File size: 5,257 Bytes
bbb6398
 
 
 
 
 
 
ef8784d
bbb6398
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ef8784d
 
 
bbb6398
 
 
 
 
 
ef8784d
bbb6398
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ef8784d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbb6398
 
 
 
 
ef8784d
 
 
bbb6398
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
"""

API密钥模型 - 处理API密钥的CRUD操作

"""
import json
import uuid
from datetime import datetime
import os
import pytz
from config import API_KEYS_FILE

class ApiKeyManager:
    """管理API密钥的类"""
    
    @staticmethod
    def load_keys():
        """加载所有API密钥"""
        if not os.path.exists(API_KEYS_FILE):
            with open(API_KEYS_FILE, 'w', encoding='utf-8') as f:
                json.dump({"api_keys": []}, f, ensure_ascii=False, indent=2)
            return {"api_keys": []}
        
        try:
            with open(API_KEYS_FILE, 'r', encoding='utf-8') as f:
                return json.load(f)
        except json.JSONDecodeError:
            return {"api_keys": []}
    
    @staticmethod
    def save_keys(data):
        """保存API密钥数据"""
        with open(API_KEYS_FILE, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=2)
    
    @staticmethod
    def get_all_keys():
        """获取所有密钥"""
        return ApiKeyManager.load_keys()
    
    @staticmethod
    def add_key(platform, name, key):
        """添加新的API密钥"""
        api_keys_data = ApiKeyManager.load_keys()
        
        # 过滤掉key中的单引号、双引号、小括号、方括号和空格,防止存储时出错
        if key:
            key = key.replace("'", "").replace('"', "").replace('(', "").replace(')', "").replace('[', "").replace(']', "").replace(' ', "")
        
        new_key = {
            "id": str(uuid.uuid4()),
            "platform": platform,
            "name": name,
            "key": key,
            "created_at": datetime.now(pytz.timezone('Asia/Shanghai')).isoformat()
        }
        
        api_keys_data["api_keys"].append(new_key)
        ApiKeyManager.save_keys(api_keys_data)
        
        return new_key
    
    @staticmethod
    def delete_key(key_id):
        """删除指定的API密钥"""
        api_keys_data = ApiKeyManager.load_keys()
        
        original_count = len(api_keys_data["api_keys"])
        api_keys_data["api_keys"] = [k for k in api_keys_data["api_keys"] if k.get("id") != key_id]
        
        if len(api_keys_data["api_keys"]) < original_count:
            ApiKeyManager.save_keys(api_keys_data)
            return True
        return False
    
    @staticmethod
    def bulk_delete(key_ids):
        """批量删除多个API密钥"""
        if not key_ids:
            return 0
        
        api_keys_data = ApiKeyManager.load_keys()
        
        original_count = len(api_keys_data["api_keys"])
        api_keys_data["api_keys"] = [k for k in api_keys_data["api_keys"] if k.get("id") not in key_ids]
        
        deleted_count = original_count - len(api_keys_data["api_keys"])
        if deleted_count > 0:
            ApiKeyManager.save_keys(api_keys_data)
        
        return deleted_count
    
    @staticmethod
    def bulk_add_keys(keys_data):
        """批量添加多个API密钥

        

        Args:

            keys_data: 包含多个密钥信息的列表,每个元素包含platform、name、key

            

        Returns:

            添加的密钥列表

        """
        if not keys_data:
            return []
        
        api_keys_data = ApiKeyManager.load_keys()
        added_keys = []
        
        now = datetime.now(pytz.timezone('Asia/Shanghai')).isoformat()
        
        for key_info in keys_data:
            platform = key_info.get("platform")
            name = key_info.get("name")
            key = key_info.get("key")
            
            # 过滤掉key中的单引号、双引号、小括号、方括号和空格,防止存储时出错
            if key:
                key = key.replace("'", "").replace('"', "").replace('(', "").replace(')', "").replace('[', "").replace(']', "").replace(' ', "")
            
            new_key = {
                "id": str(uuid.uuid4()),
                "platform": platform,
                "name": name,
                "key": key,
                "created_at": now
            }
            
            api_keys_data["api_keys"].append(new_key)
            added_keys.append(new_key)
        
        # 一次性保存所有添加的密钥
        ApiKeyManager.save_keys(api_keys_data)
        
        return added_keys
    
    @staticmethod
    def update_key(key_id, name, key):
        """更新API密钥信息"""
        api_keys_data = ApiKeyManager.load_keys()
        
        # 过滤掉key中的单引号、双引号、小括号、方括号和空格,防止存储时出错
        if key:
            key = key.replace("'", "").replace('"', "").replace('(', "").replace(')', "").replace('[', "").replace(']', "").replace(' ', "")
            
        updated_key = None
        for k in api_keys_data["api_keys"]:
            if k.get("id") == key_id:
                k["name"] = name
                k["key"] = key
                updated_key = k
                break
        
        if updated_key:
            ApiKeyManager.save_keys(api_keys_data)
            
        return updated_key