56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ResolvedFeishuTarget:
|
|
ok: bool
|
|
identifier_type: str
|
|
identifier_value: str
|
|
display_name: str
|
|
masked_identifier: str
|
|
error_code: str = ""
|
|
error_message: str = ""
|
|
|
|
|
|
def mask_identifier(value: str) -> str:
|
|
if not value:
|
|
return ""
|
|
if len(value) <= 8:
|
|
return value[:2] + "***"
|
|
return f"{value[:4]}***{value[-4:]}"
|
|
|
|
|
|
def resolve_configured_personal_recipient() -> ResolvedFeishuTarget:
|
|
open_id = getattr(settings, "FEISHU_DEFAULT_USER_OPEN_ID", "")
|
|
user_id = getattr(settings, "FEISHU_DEFAULT_USER_ID", "")
|
|
display_name = getattr(settings, "FEISHU_DEFAULT_TARGET_NAME", "默认飞书接收人")
|
|
if open_id:
|
|
return ResolvedFeishuTarget(
|
|
ok=True,
|
|
identifier_type="open_id",
|
|
identifier_value=open_id,
|
|
display_name=display_name,
|
|
masked_identifier=mask_identifier(open_id),
|
|
)
|
|
if user_id:
|
|
return ResolvedFeishuTarget(
|
|
ok=True,
|
|
identifier_type="user_id",
|
|
identifier_value=user_id,
|
|
display_name=display_name,
|
|
masked_identifier=mask_identifier(user_id),
|
|
)
|
|
return ResolvedFeishuTarget(
|
|
ok=False,
|
|
identifier_type="missing",
|
|
identifier_value="",
|
|
display_name=display_name,
|
|
masked_identifier="",
|
|
error_code="recipient_missing",
|
|
error_message="未配置 FEISHU_DEFAULT_USER_OPEN_ID 或 FEISHU_DEFAULT_USER_ID",
|
|
)
|