gallyga commited on
Commit
ab8b793
·
verified ·
1 Parent(s): 5d72620

Update src/main.py

Browse files
Files changed (1) hide show
  1. src/main.py +69 -2
src/main.py CHANGED
@@ -1,18 +1,85 @@
1
  import uvicorn
2
  import logging
 
 
3
  from .app import app, key_manager
4
  from .config import Config
5
 
6
  # 获取日志记录器
7
  logger = logging.getLogger("sora-api.main")
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  def init_app():
10
  """初始化应用程序"""
11
  try:
12
- # 密钥管理器已在app.py中初始化并加载完成
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  # 检查是否有可用的密钥
14
  if not key_manager.keys:
15
- logger.warning("未配置API key,将使用测试密钥")
16
  key_manager.add_key(
17
  key_value="Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9...",
18
  name="默认测试密钥"
 
1
  import uvicorn
2
  import logging
3
+ import json
4
+ import os
5
  from .app import app, key_manager
6
  from .config import Config
7
 
8
  # 获取日志记录器
9
  logger = logging.getLogger("sora-api.main")
10
 
11
+ def ensure_bearer_prefix(key):
12
+ """确保API密钥包含Bearer前缀"""
13
+ if key and not key.startswith("Bearer "):
14
+ return f"Bearer {key}"
15
+ return key
16
+
17
+ def format_api_keys_json(keys):
18
+ """格式化API密钥为JSON字符串,确保包含Bearer前缀"""
19
+ if isinstance(keys, list):
20
+ for i, key_info in enumerate(keys):
21
+ if isinstance(key_info, dict) and "key" in key_info:
22
+ keys[i]["key"] = ensure_bearer_prefix(key_info["key"])
23
+ return json.dumps(keys)
24
+
25
  def init_app():
26
  """初始化应用程序"""
27
  try:
28
+ # 从环境变量加载API密钥
29
+ api_keys_loaded = False
30
+
31
+ # 从API_AUTH_TOKEN环境变量加载密钥
32
+ api_auth_token = os.getenv("API_AUTH_TOKEN", "")
33
+ if api_auth_token:
34
+ logger.info(f"从环境变量API_AUTH_TOKEN读取,长度: {len(api_auth_token)}")
35
+
36
+ # 尝试解析为JSON(多个密钥)
37
+ try:
38
+ api_keys_data = json.loads(api_auth_token)
39
+ logger.info(f"API_AUTH_TOKEN包含JSON数据,尝试解析为密钥列表")
40
+
41
+ # 清空现有密钥并设置新密钥
42
+ key_manager.keys = []
43
+ key_manager.usage_stats = {}
44
+
45
+ # 如果是列表,作为多个密钥处理
46
+ if isinstance(api_keys_data, list):
47
+ key_manager._process_keys_data(api_keys_data)
48
+ logger.info(f"已从API_AUTH_TOKEN加载 {len(key_manager.keys)} 个API密钥")
49
+ api_keys_loaded = True
50
+ # 如果是字典,检查是否包含keys字段
51
+ elif isinstance(api_keys_data, dict) and "keys" in api_keys_data:
52
+ key_manager._process_keys_data(api_keys_data["keys"])
53
+ logger.info(f"已从API_AUTH_TOKEN加载 {len(key_manager.keys)} 个API密钥")
54
+ api_keys_loaded = True
55
+ else:
56
+ logger.warning(f"API_AUTH_TOKEN包含JSON数据,但格式不是密钥列表")
57
+ except json.JSONDecodeError:
58
+ # 不是JSON,作为单个密钥处理
59
+ logger.info(f"API_AUTH_TOKEN不是JSON格式,作为单个密钥处理")
60
+
61
+ # 清空现有密钥并设置新密钥
62
+ key_manager.keys = []
63
+ key_manager.usage_stats = {}
64
+
65
+ # 添加从环境变量读取的单个密钥
66
+ key_manager.add_key(
67
+ key_value=ensure_bearer_prefix(api_auth_token),
68
+ name="环境变量密钥",
69
+ weight=1,
70
+ rate_limit=60
71
+ )
72
+
73
+ logger.info(f"已将API_AUTH_TOKEN作为单个密钥设置")
74
+ api_keys_loaded = True
75
+
76
+ # 保存密钥到文件
77
+ if api_keys_loaded:
78
+ key_manager._save_keys()
79
+
80
  # 检查是否有可用的密钥
81
  if not key_manager.keys:
82
+ logger.warning("未从环境变量加载到API密钥,将使用测试密钥")
83
  key_manager.add_key(
84
  key_value="Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9...",
85
  name="默认测试密钥"