import os import json from pathlib import Path from utils.device_id import get_device_id # 基础配置 class Settings: def __init__(self): # 1. 检测环境 self.is_development = Path(".env.development").exists() self.env = "development" if self.is_development else "production" print(f"🎯 当前环境: {self.env}") # 2. 加载配置文件 self._load_env_file() # API配置 self.DEEPSEEK_API_KEY = self._get_api_key() self.DEEPSEEK_BASE_URL = os.getenv( "DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1" ) # KMS配置 self.KMS_LIST_URL = os.getenv( "KMS_LIST_URL", "http://kms.longjoe.com:82/KMS/api/common/DocListAi" ) self.KMS_VIEW_URL = os.getenv( "KMS_VIEW_URL", "http://kms.longjoe.com:82/KMS/api/common/DocViewAi" ) # 其他配置 self.LLM_MODEL = "deepseek-chat" self.LLM_TEMPERATURE = 0.7 self.LLM_MAX_TOKENS = 2048 def _load_env_file(self): """加载对应的.env文件""" from dotenv import load_dotenv env_file = ".env.development" if self.is_development else ".env" if Path(env_file).exists(): load_dotenv(env_file, override=True) print(f"📁 加载配置文件: {env_file}") else: print(f"⚠️ 配置文件 {env_file} 不存在") def _get_api_key(self) -> str: """根据环境获取API Key""" if self.is_development: # 开发环境:使用明文 key = os.getenv("DEEPSEEK_API_KEY") if not key: print("\n⚠️ 开发环境提示:") print(" 请在 .env.development 中添加:") print(" DEEPSEEK_API_KEY=sk-your-key-here") print("=" * 40) return key or "" else: # 生产环境:必须使用加密 encrypted_key = os.getenv("ENCRYPTED_DEEPSEEK_KEY") if not encrypted_key: raise ValueError("生产环境需要 ENCRYPTED_DEEPSEEK_KEY") master_key = "ialwayslovelongjoe" return self._decrypt_key(encrypted_key, master_key) def _decrypt_key(self, encrypted_key: str, master_key: str) -> str: """解密API Key""" # 简单版AES解密 from Crypto.Cipher import AES from Crypto.Util.Padding import unpad import base64 import hashlib try: # 生成密钥 aes_key = hashlib.sha256(master_key.encode()).digest() iv = hashlib.md5(master_key.encode()).digest() # 解密 cipher = AES.new(aes_key, AES.MODE_CBC, iv) ct = base64.b64decode(encrypted_key) pt = unpad(cipher.decrypt(ct), AES.block_size) data = json.loads(pt.decode("utf-8")) # 验证设备ID if data.get("device_code", "") != get_device_id(): raise ValueError("设备ID不匹配,APIKEY无效,请联系软件公司") return data.get("api_key", "") except Exception as e: raise ValueError(f"解密失败: {e}") # 创建全局实例 settings = Settings()