| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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()
|