293 lines
8.0 KiB
Python
293 lines
8.0 KiB
Python
"""配置管理模块"""
|
|
import json
|
|
import os
|
|
from logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
DEFAULT_CONFIG_FILE = "config.json"
|
|
DEFAULT_COOKIE_DATA_FILE = "cookie_data.json"
|
|
|
|
|
|
class ConfigManager:
|
|
"""配置管理器"""
|
|
|
|
def __init__(self, config_file: str = DEFAULT_CONFIG_FILE):
|
|
"""
|
|
初始化配置管理器
|
|
|
|
Args:
|
|
config_file: 配置文件路径
|
|
"""
|
|
self.config_file = config_file
|
|
self.config = self._load_config()
|
|
|
|
def _load_config(self) -> dict:
|
|
"""加载配置文件"""
|
|
try:
|
|
if os.path.exists(self.config_file):
|
|
with open(self.config_file, 'r', encoding='utf-8') as f:
|
|
config = json.load(f)
|
|
logger.info(f"配置文件加载成功: {self.config_file}")
|
|
return config
|
|
else:
|
|
logger.warning(f"配置文件不存在: {self.config_file}")
|
|
return {}
|
|
except Exception as e:
|
|
logger.error(f"加载配置文件失败: {e}")
|
|
return {}
|
|
|
|
def save_config(self, config: dict) -> bool:
|
|
"""
|
|
保存配置文件
|
|
|
|
Args:
|
|
config: 配置字典
|
|
|
|
Returns:
|
|
是否保存成功
|
|
"""
|
|
try:
|
|
with open(self.config_file, 'w', encoding='utf-8') as f:
|
|
json.dump(config, f, indent=2, ensure_ascii=False)
|
|
logger.info(f"配置文件保存成功: {self.config_file}")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"保存配置文件失败: {e}")
|
|
return False
|
|
|
|
def get(self, key: str, default=None):
|
|
"""
|
|
获取配置项
|
|
|
|
Args:
|
|
key: 配置键
|
|
default: 默认值
|
|
|
|
Returns:
|
|
配置值
|
|
"""
|
|
return self.config.get(key, default)
|
|
|
|
def set(self, key: str, value):
|
|
"""
|
|
设置配置项
|
|
|
|
Args:
|
|
key: 配置键
|
|
value: 配置值
|
|
"""
|
|
self.config[key] = value
|
|
self.save_config(self.config)
|
|
|
|
def get_users(self) -> list:
|
|
"""
|
|
获取所有用户配置
|
|
|
|
Returns:
|
|
用户配置列表
|
|
"""
|
|
return self.config.get('users', [])
|
|
|
|
def get_user_config(self, user_name: str) -> dict:
|
|
"""
|
|
获取指定用户的配置
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
用户配置字典
|
|
"""
|
|
users = self.get_users()
|
|
for user in users:
|
|
if user.get('name') == user_name:
|
|
return user
|
|
return {}
|
|
|
|
def get_cookie_cloud_config(self, user_name: str) -> dict:
|
|
"""
|
|
获取用户的Cookie Cloud配置
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
Cookie Cloud配置字典
|
|
"""
|
|
user_config = self.get_user_config(user_name)
|
|
return user_config.get('cookie_cloud', {})
|
|
|
|
def get_notification_config(self, user_name: str) -> dict:
|
|
"""
|
|
获取用户的通知配置
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
通知配置字典
|
|
"""
|
|
user_config = self.get_user_config(user_name)
|
|
return user_config.get('notification', {})
|
|
|
|
def get_browser_config(self, user_name: str) -> dict:
|
|
"""
|
|
获取用户的浏览器配置
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
浏览器配置字典
|
|
"""
|
|
user_config = self.get_user_config(user_name)
|
|
return user_config.get('browser', {})
|
|
|
|
def get_websites(self, user_name: str) -> list:
|
|
"""
|
|
获取用户的网站配置
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
网站配置列表
|
|
"""
|
|
user_config = self.get_user_config(user_name)
|
|
return user_config.get('websites', [])
|
|
|
|
|
|
class CookieDataManager:
|
|
"""Cookie数据管理器"""
|
|
|
|
def __init__(self, data_file: str = DEFAULT_COOKIE_DATA_FILE):
|
|
"""
|
|
初始化Cookie数据管理器
|
|
|
|
Args:
|
|
data_file: Cookie数据文件路径
|
|
"""
|
|
self.data_file = data_file
|
|
self.data = self._load_data()
|
|
|
|
def _load_data(self) -> dict:
|
|
"""加载Cookie数据文件"""
|
|
try:
|
|
if os.path.exists(self.data_file):
|
|
with open(self.data_file, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
logger.info(f"Cookie数据文件加载成功: {self.data_file}")
|
|
return data
|
|
else:
|
|
logger.warning(f"Cookie数据文件不存在: {self.data_file}")
|
|
return {}
|
|
except Exception as e:
|
|
logger.error(f"加载Cookie数据文件失败: {e}")
|
|
return {}
|
|
|
|
def save_data(self, data: dict) -> bool:
|
|
"""
|
|
保存Cookie数据文件
|
|
|
|
Args:
|
|
data: Cookie数据字典
|
|
|
|
Returns:
|
|
是否保存成功
|
|
"""
|
|
try:
|
|
with open(self.data_file, 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, indent=2, ensure_ascii=False)
|
|
logger.info(f"Cookie数据文件保存成功: {self.data_file}")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"保存Cookie数据文件失败: {e}")
|
|
return False
|
|
|
|
def get_user_cookies(self, user_name: str) -> dict:
|
|
"""
|
|
获取用户的Cookie数据
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
|
|
Returns:
|
|
用户Cookie数据字典
|
|
"""
|
|
return self.data.get(user_name, {})
|
|
|
|
def save_user_cookies(self, user_name: str, cookies: list, url: str, website_name: str = ""):
|
|
"""
|
|
保存用户的Cookie数据
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
cookies: Cookie列表
|
|
url: 网站URL
|
|
website_name: 网站名称
|
|
"""
|
|
if user_name not in self.data:
|
|
self.data[user_name] = {}
|
|
|
|
from urllib.parse import urlparse
|
|
parsed = urlparse(url)
|
|
domain = parsed.netloc
|
|
|
|
cookie_entry = {
|
|
"cookies": cookies,
|
|
"url": url,
|
|
"website_name": website_name
|
|
}
|
|
|
|
self.data[user_name][domain] = cookie_entry
|
|
self.save_data(self.data)
|
|
logger.info(f"已保存 {len(cookies)} 个 cookie ({user_name} -> {domain})")
|
|
|
|
def get_domain_cookies(self, user_name: str, domain: str) -> dict:
|
|
"""
|
|
获取指定域名的Cookie数据
|
|
|
|
Args:
|
|
user_name: 用户名
|
|
domain: 域名
|
|
|
|
Returns:
|
|
域名Cookie数据字典
|
|
"""
|
|
user_cookies = self.get_user_cookies(user_name)
|
|
|
|
for cookie_domain, cookie_data in user_cookies.items():
|
|
clean_domain = cookie_domain.lstrip('.')
|
|
if domain in clean_domain or clean_domain in domain:
|
|
return cookie_data
|
|
|
|
return {}
|
|
|
|
def save_simple_cookies(self, cookies: list, url: str):
|
|
"""
|
|
保存简单的Cookie数据(用于Cookie提取器)
|
|
|
|
Args:
|
|
cookies: Cookie列表
|
|
url: 网站URL
|
|
"""
|
|
data = {
|
|
"cookies": cookies,
|
|
"url": url
|
|
}
|
|
self.save_data(data)
|
|
logger.info(f"已保存 {len(cookies)} 个 cookie")
|
|
|
|
def load_simple_cookies(self) -> dict:
|
|
"""
|
|
加载简单的Cookie数据(用于Cookie提取器)
|
|
|
|
Returns:
|
|
Cookie数据字典
|
|
"""
|
|
return {
|
|
"cookies": self.data.get("cookies", []),
|
|
"url": self.data.get("url", "")
|
|
}
|