Files
wecom_it_smart_desk/backend/app/services/external/config.py
T

167 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 企微IT智能服务台 — 外部系统连接配置管理
# =============================================================================
# 说明:
# 1. 统一管理联软/火绒/aTrust/eHR四个系统的连接配置
# 2. 支持从环境变量或 .env 文件读取
# 3. 支持运行时切换 Mock 模式(所有请求走 MockAdapter
#
# 配置优先级:环境变量 > .env 文件 > 默认值
# =============================================================================
import os
from typing import Optional
from pydantic import BaseModel, Field
class ExternalSystemConfig(BaseModel):
"""外部系统连接配置
做什么:集中管理所有外部系统的连接参数
为什么:避免在代码中硬编码,支持环境隔离(开发/测试/生产)
"""
# ── 联软LV7000 ──
lianruan_base_url: str = Field(
default="http://192.168.3.200:30098",
description="联软API基础地址(端口30098",
)
lianruan_api_account: Optional[str] = Field(
default=None,
description="联软API账号(ApiAccount参数)",
)
lianruan_api_password: Optional[str] = Field(
default=None,
description="联软API密码(ApiPassword参数)",
)
lianruan_enabled: bool = Field(
default=False,
description="联软适配器是否启用(凭证配置后自动启用)",
)
# ── 火绒企业版 ──
huorong_base_url: str = Field(
default="http://huorong.oa.servyou-it.com:8080",
description="火绒API基础地址(内网地址)",
)
huorong_access_key_id: Optional[str] = Field(
default=None,
description="火绒AccessKey ID",
)
huorong_access_key_secret: Optional[str] = Field(
default=None,
description="火绒AccessKey SecretHMAC-SHA1签名用)",
)
huorong_enabled: bool = Field(
default=False,
description="火绒适配器是否启用",
)
# ── aTrust零信任 ──
atrust_base_url: str = Field(
default="https://atrust.servyou-it.com:4433",
description="aTrust API基础地址(HTTPS端口4433",
)
atrust_api_id: Optional[str] = Field(
default=None,
description="aTrust API IDx-ca-key Header",
)
atrust_api_secret: Optional[str] = Field(
default=None,
description="aTrust API SecretHMAC-SHA256签名密钥)",
)
atrust_directory_domain: Optional[str] = Field(
default=None,
description="aTrust用户目录域名(V3 API需要此参数)",
)
atrust_enabled: bool = Field(
default=False,
description="aTrust适配器是否启用",
)
# ── 北森eHR ──
ehr_base_url: Optional[str] = Field(
default=None,
description="eHR API基础地址",
)
ehr_client_id: Optional[str] = Field(
default=None,
description="eHR OAuth2.0 Client ID",
)
ehr_client_secret: Optional[str] = Field(
default=None,
description="eHR OAuth2.0 Client Secret",
)
ehr_enabled: bool = Field(
default=False,
description="eHR适配器是否启用",
)
# ── 全局配置 ──
cache_enabled: bool = Field(
default=True,
description="是否启用外部数据缓存(Redis",
)
mock_mode: bool = Field(
default=False,
description="Mock模式 — True时所有请求走MockAdapter,不调真实API",
)
class Config:
env_prefix = "EXT_" # 环境变量前缀,如 EXT_LIANRUAN_BASE_URL
def load_external_config() -> ExternalSystemConfig:
"""从环境变量加载外部系统配置
做什么:读取 EXT_ 前缀的环境变量,构建配置对象
为什么:生产环境通过环境变量注入敏感配置,不写入代码或文件
Returns:
ExternalSystemConfig 实例
"""
config_dict = {}
# 映射关系:环境变量名 → 配置字段名
env_mapping = {
"EXT_LIANRUAN_BASE_URL": "lianruan_base_url",
"EXT_LIANRUAN_API_ACCOUNT": "lianruan_api_account",
"EXT_LIANRUAN_API_PASSWORD": "lianruan_api_password",
"EXT_HUORONG_BASE_URL": "huorong_base_url",
"EXT_HUORONG_ACCESS_KEY_ID": "huorong_access_key_id",
"EXT_HUORONG_ACCESS_KEY_SECRET": "huorong_access_key_secret",
"EXT_ATRUST_BASE_URL": "atrust_base_url",
"EXT_ATRUST_API_ID": "atrust_api_id",
"EXT_ATRUST_API_SECRET": "atrust_api_secret",
"EXT_ATRUST_DIRECTORY_DOMAIN": "atrust_directory_domain",
"EXT_EHR_BASE_URL": "ehr_base_url",
"EXT_EHR_CLIENT_ID": "ehr_client_id",
"EXT_EHR_CLIENT_SECRET": "ehr_client_secret",
"EXT_CACHE_ENABLED": "cache_enabled",
"EXT_MOCK_MODE": "mock_mode",
}
for env_key, field_name in env_mapping.items():
value = os.environ.get(env_key)
if value is not None:
# 布尔类型特殊处理
if field_name in ("cache_enabled", "mock_mode"):
config_dict[field_name] = value.lower() in ("true", "1", "yes")
else:
config_dict[field_name] = value
config = ExternalSystemConfig(**config_dict)
# 自动启用已有凭证的系统
if config.lianruan_api_account and config.lianruan_api_password:
config.lianruan_enabled = True
if config.huorong_access_key_id and config.huorong_access_key_secret:
config.huorong_enabled = True
if config.atrust_api_id and config.atrust_api_secret:
config.atrust_enabled = True
if config.ehr_client_id and config.ehr_client_secret:
config.ehr_enabled = True
return config