This commit is contained in:
DengDai
2025-12-08 14:45:14 +08:00
commit 519589f8f5
60 changed files with 8191 additions and 0 deletions

67
backend/config.py Normal file
View File

@@ -0,0 +1,67 @@
import json
import os
import copy
from threading import Lock
CONFIG_PATH = 'config.json'
class ConfigManager:
"""线程安全地处理 config.json 的读取、写入和访问"""
def __init__(self, path=CONFIG_PATH):
self.path = path
self._lock = Lock()
self.config = self._load_config()
def _load_config(self):
"""加载配置文件,如果不存在则创建一个空的"""
with self._lock:
if os.path.exists(self.path):
try:
with open(self.path, 'r', encoding='utf-8') as f:
return json.load(f)
except (json.JSONDecodeError, IOError):
return {}
return {}
def get_config(self, sensitive=False):
"""
获取配置。
:param sensitive: False时将敏感信息替换为 '******'
"""
config_copy = copy.deepcopy(self.config)
if sensitive:
return config_copy
# 隐藏敏感信息
sensitive_keys = {
'douban': 'cookie', 'ptskit': 'cookie',
'emby': 'api_key', 'plex': 'token', 'fnos': 'authorization'
}
for section, key in sensitive_keys.items():
if section in config_copy and key in config_copy[section]:
config_copy[section][key] = '******' if config_copy[section][key] else ''
# 隐藏密码
for section in ['qbittorrent', 'transmission']:
if section in config_copy and 'password' in config_copy[section]:
config_copy[section]['password'] = ''
return config_copy
def save_config(self, new_config):
"""保存配置到文件"""
with self._lock:
try:
with open(self.path, 'w', encoding='utf-8') as f:
json.dump(new_config, f, indent=4, ensure_ascii=False)
self.config = new_config # 更新内存中的配置
return True, None
except Exception as e:
return False, str(e)
def get(self, key, default=None):
"""获取特定配置项"""
return self.config.get(key, default)
# 创建一个全局单例
config_manager = ConfigManager()