实现了 Teams 机器人所需的全功能组件,包括: - 基础命令解析与帮助卡片生成 - 租户验证与访问控制 - 自定义 UA 与媒体工具 - 消息分块、批注处理与会话管理 - 防抖、缓存与配置路由能力 - 投票、配对、审计与运行时状态管理 - TTS 语音合成与卡片构建工具 - 群组管理与权限控制逻辑
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""Microsoft Teams 多租户验证与隔离。
|
|
|
|
验证 Activity 来源 Tenant 是否在允许列表中,支持
|
|
单租户和多租户两种模式。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from yuxi.utils.logging_config import logger
|
|
|
|
|
|
class TenantValidator:
|
|
def __init__(self, allowed_tenants: set[str] | None = None):
|
|
self._allowed_tenants = allowed_tenants or set()
|
|
|
|
@property
|
|
def mode(self) -> str:
|
|
return "restricted" if self._allowed_tenants else "open"
|
|
|
|
def validate(self, channel_data: dict | None) -> bool:
|
|
if not self._allowed_tenants:
|
|
return True
|
|
tenant_id = ""
|
|
if channel_data:
|
|
tenant = channel_data.get("tenant")
|
|
if isinstance(tenant, dict):
|
|
tenant_id = tenant.get("id", "")
|
|
if tenant_id not in self._allowed_tenants:
|
|
logger.warning(f"MSTeams tenant '{tenant_id}' not in allowed_tenants")
|
|
return False
|
|
return True
|
|
|
|
def set_allowed_tenants(self, tenants: list[str]) -> None:
|
|
self._allowed_tenants = set(tenants)
|