import logging from yuxi.channel.extensions.wechat_kf.types import KFAccount logger = logging.getLogger(__name__) class WeChatKFSecurity: VALID_POLICIES = {"open", "pairing", "allowlist", "disabled"} def __init__(self, account: KFAccount | None = None): self._account = account if account and account.dm_policy in self.VALID_POLICIES: self._policy = account.dm_policy else: self._policy = "open" self._allowlist: set[str] = set(account.allow_from) if account else set() def resolve_dm_policy(self) -> str: return self._policy def check_allowlist(self, external_user_id: str, channel_type: str = "wechat-kf") -> bool: if self._policy == "open": return True if self._policy == "disabled": return False if not self._allowlist: logger.warning("allowlist is empty with policy=%s", self._policy) return False return external_user_id in self._allowlist def add_to_allowlist(self, external_user_id: str): self._allowlist.add(external_user_id) def remove_from_allowlist(self, external_user_id: str): self._allowlist.discard(external_user_id) def is_policy(self, policy: str) -> bool: return self._policy == policy