pre / models /api_key.py
yangtb24's picture
Upload 41 files
ef8784d verified
raw
history blame
5.26 kB
"""
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