"""脱敏被驱动适配器。 委托 ``yuxi.utils.crypto`` 的 ``CryptoHelper`` 实现脱敏,是 channels 模块 唯一调用 ``yuxi.utils.crypto`` 脱敏 API 的位置(加解密仍由 ``mappers.py`` 调用)。字段关键词表与匹配规则由工具层统一维护(单一事实源),本适配器 不承载任何脱敏算法或字段定义。 无状态适配器,跨请求复用,构造时不依赖任何请求级资源。 """ from __future__ import annotations from typing import Any from yuxi.channels.contract.ports.driven.masking_port import MaskingPort from yuxi.utils.crypto import get_crypto_helper __all__ = ["MaskingAdapter"] class MaskingAdapter(MaskingPort): """脱敏被驱动适配器,委托 ``CryptoHelper`` 实现 ``MaskingPort``。""" def __init__(self) -> None: self._helper = get_crypto_helper() def maskFull(self, value: Any) -> Any: """全量遮蔽脱敏(对外 HTTP 响应、审计日志)。""" return self._helper.mask_full(value) def maskPartial(self, value: Any) -> Any: """部分遮蔽脱敏(日志、诊断包)。""" return self._helper.mask_partial(value) def isSensitiveKey(self, key: str) -> bool: """判断字段名是否属于敏感字段。""" return self._helper.is_sensitive_key(key)