init
This commit is contained in:
67
backend/config.py
Normal file
67
backend/config.py
Normal 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()
|
||||
Reference in New Issue
Block a user