from __future__ import annotations import logging from yuxi.channel.extensions.nextcloud_talk.config_schema import NextcloudTalkConfig, NextcloudTalkRoomConfig logger = logging.getLogger(__name__) def resolve_nextcloud_talk_room_match( rooms: dict[str, NextcloudTalkRoomConfig], room_token: str, ) -> NextcloudTalkRoomConfig | None: if room_token in rooms: return rooms[room_token] lower_token = room_token.lower() for key, config in rooms.items(): if key.lower() == lower_token: return config if "*" in rooms: return rooms["*"] return None def check_nextcloud_talk_sender_allowlist( sender_id: str, cfg: NextcloudTalkConfig, ) -> bool: if not cfg.allow_from: return True normalized_sender = _normalize_sender_id(sender_id) return normalized_sender in [_normalize_sender_id(s) for s in cfg.allow_from] def check_nextcloud_talk_group_sender_allowlist( sender_id: str, cfg: NextcloudTalkConfig, ) -> bool: if not cfg.group_allow_from: return True normalized_sender = _normalize_sender_id(sender_id) return normalized_sender in [_normalize_sender_id(s) for s in cfg.group_allow_from] def _normalize_sender_id(sender_id: str) -> str: sid = sender_id.strip().lower() for prefix in ("nextcloud-talk:", "nc-talk:", "nc:"): if sid.startswith(prefix): sid = sid[len(prefix) :] break return sid