Skip to content
This repository was archived by the owner on May 23, 2025. It is now read-only.

Commit 37e5abd

Browse files
committed
fix: 修复secret key问题
1 parent 89dd415 commit 37e5abd

File tree

9 files changed

+75
-154
lines changed

9 files changed

+75
-154
lines changed

WebUI/__init__.py

Lines changed: 13 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,23 @@
11
import logging
22
import os
3-
from datetime import datetime, timedelta
4-
from typing import Dict, Optional, Tuple, Any, Union
3+
from datetime import datetime
4+
from pathlib import Path
5+
from typing import Dict, Tuple, Union
56

6-
# 添加 monkey patch 修复 Flask-Session 与 Werkzeug 的兼容性问题
7-
import flask_session.sessions
87
from flask import Flask, redirect, url_for
98
from flask_login import LoginManager
109
from flask_session import Session
1110
from flask_socketio import SocketIO
1211
from loguru import logger
1312

14-
# 保存原始的 save_session 方法
15-
original_save_session = flask_session.sessions.FileSystemSessionInterface.save_session
16-
17-
# 创建修复的 save_session 方法
18-
def patched_save_session(self, app, session, response):
19-
# 如果会话 ID 是字节类型,转换为字符串
20-
if hasattr(self, 'get_session_id') and callable(self.get_session_id):
21-
original_get_session_id = self.get_session_id
22-
23-
def wrapped_get_session_id(session):
24-
session_id = original_get_session_id(session)
25-
if isinstance(session_id, bytes):
26-
return session_id.decode('utf-8')
27-
return session_id
28-
29-
self.get_session_id = wrapped_get_session_id
30-
31-
# 调用原始方法
32-
return original_save_session(self, app, session, response)
33-
34-
# 应用 monkey patch
35-
flask_session.sessions.FileSystemSessionInterface.save_session = patched_save_session
36-
3713

3814
class InterceptHandler(logging.Handler):
39-
"""将标准日志重定向到loguru的处理器
40-
41-
此类拦截标准logging模块的日志记录,并将其重定向到loguru,
42-
确保所有日志使用统一的格式和处理方式。
43-
"""
44-
4515
def emit(self, record: logging.LogRecord) -> None:
46-
"""处理日志记录并转发到loguru
47-
48-
Args:
49-
record: 标准日志模块的日志记录对象
50-
"""
5116
logger_opt = logger.opt(depth=6, exception=record.exc_info)
5217
logger_opt.log('WEBUI', record.getMessage())
5318

5419

5520
def _configure_logging(app: Flask) -> None:
56-
"""配置应用日志系统,使用loguru处理所有日志
57-
58-
Args:
59-
app: Flask应用实例
60-
"""
6121
# 清除Flask默认日志处理器并配置使用loguru
6222
app.logger.handlers = []
6323
app.logger.propagate = False
@@ -69,15 +29,7 @@ def _configure_logging(app: Flask) -> None:
6929
werkzeug_logger.propagate = False
7030
werkzeug_logger.addHandler(InterceptHandler())
7131

72-
logger.log('WEBUI', "日志系统已配置为使用loguru")
73-
74-
7532
def _setup_instance_directories(app: Flask) -> None:
76-
"""确保应用所需的实例目录存在
77-
78-
Args:
79-
app: Flask应用实例
80-
"""
8133
try:
8234
os.makedirs(app.instance_path, exist_ok=True)
8335
os.makedirs(app.config['SESSION_FILE_DIR'], exist_ok=True)
@@ -86,11 +38,8 @@ def _setup_instance_directories(app: Flask) -> None:
8638
logger.log('WEBUI', f"创建实例目录失败: {e}")
8739

8840

89-
def create_app(test_config: Optional[Dict[str, Any]] = None) -> Tuple[Flask, SocketIO]:
41+
def create_app() -> Tuple[Flask, SocketIO]:
9042
"""创建并配置Flask应用实例及SocketIO实例
91-
92-
Args:
93-
test_config: 可选的测试配置字典,用于测试环境
9443
9544
Returns:
9645
tuple: 包含配置好的Flask应用实例和SocketIO实例
@@ -100,54 +49,35 @@ def create_app(test_config: Optional[Dict[str, Any]] = None) -> Tuple[Flask, Soc
10049
instance_relative_config=True,
10150
static_folder='static',
10251
template_folder='templates')
52+
# 配置日志系统
53+
_configure_logging(app)
10354

10455
logger.log('WEBUI', "正在初始化XYBotV2 WebUI应用...")
10556

106-
# 加载默认配置
107-
app.config.from_mapping(
108-
SECRET_KEY=os.environ.get('SECRET_KEY', 'dev_key_please_change_in_production'),
109-
SESSION_TYPE='filesystem',
110-
SESSION_FILE_DIR=os.path.join(app.instance_path, 'flask_session'),
111-
SESSION_PERMANENT=True,
112-
PERMANENT_SESSION_LIFETIME=timedelta(minutes=30),
113-
SESSION_USE_SIGNER=True,
114-
)
115-
116-
# 加载实例配置(如果存在)
117-
if test_config is None:
118-
# 非测试模式下,从配置文件加载
119-
app.config.from_pyfile('config.py', silent=True)
120-
logger.log('WEBUI', "已从config.py加载配置")
121-
else:
122-
# 测试模式下,使用传入的配置
123-
app.config.from_mapping(test_config)
124-
logger.log('WEBUI', "已加载测试配置")
57+
# 加载配置
58+
app.config.from_pyfile(Path(__file__).resolve().parent / 'config.py')
59+
logger.log('WEBUI', "已加载WEBUI配置")
12560

12661
# 确保实例文件夹存在
12762
_setup_instance_directories(app)
12863

129-
# 配置日志系统
130-
_configure_logging(app)
13164

13265
# 初始化Flask-Session
13366
Session(app)
134-
logger.log('WEBUI', "已初始化会话管理")
13567

13668
# 初始化Flask-Login
13769
login_manager = LoginManager()
13870
login_manager.init_app(app)
13971
login_manager.login_view = 'auth.login'
140-
logger.log('WEBUI', "已初始化用户认证系统")
14172

14273
# 注册模板过滤器
14374
from .utils.template_filters import register_template_filters
14475
register_template_filters(app)
145-
logger.log('WEBUI', "已注册模板过滤器")
14676

14777
# 注册蓝图
14878
from .routes import register_blueprints
14979
register_blueprints(app)
150-
logger.log('WEBUI', "已注册路由蓝图")
80+
logger.log('WEBUI', "已注册路由蓝图,模板过滤器")
15181

15282
# 初始化WebSocket服务
15383
from .services.websocket_service import socketio, init_websocket
@@ -162,7 +92,7 @@ def create_app(test_config: Optional[Dict[str, Any]] = None) -> Tuple[Flask, Soc
16292

16393
# 初始化socketio
16494
socketio.init_app(app, **socketio_config)
165-
logger.log('WEBUI', "已初始化SocketIO服务")
95+
logger.log('WEBUI', "已初始化会话管理,用户认证系统,SocketIO服务")
16696

16797
# 启动WebSocket服务
16898
init_websocket()
@@ -184,17 +114,8 @@ def inject_global_vars() -> Dict[str, Union[str, datetime]]:
184114

185115
# 定义用户加载函数
186116
@login_manager.user_loader
187-
def load_user(user_id: str) -> Any:
188-
"""根据用户ID加载用户对象
189-
190-
Args:
191-
user_id: 用户的唯一标识符
192-
193-
Returns:
194-
用户对象或None(如果用户不存在)
195-
"""
196-
from .models import User
197-
return User.get(user_id)
117+
def load_user(user_id):
118+
pass
198119

199120
# 简单的首页路由(重定向到概览页)
200121
@app.route('/')

WebUI/config.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
WEBUI_CONFIG = {}
1515

1616
# Flask应用配置
17-
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev_key_please_change_in_production')
18-
# DEBUG = os.environ.get('FLASK_DEBUG', 'True').lower() == 'true'
19-
DEBUG = True
17+
SECRET_KEY = WEBUI_CONFIG.get("flask-secret-key") or os.environ.get('SECRET_KEY', 'HenryXiaoYang_XYBotV2')
18+
DEBUG = WEBUI_CONFIG.get("debug", False)
2019

2120
# 会话配置
2221
SESSION_TYPE = 'filesystem'
2322
SESSION_PERMANENT = True
23+
SESSION_USE_SIGNER = True
24+
SESSION_FILE_DIR = 'flask_session'
2425
PERMANENT_SESSION_LIFETIME = int(WEBUI_CONFIG.get('session-timeout', 30)) * 60 # 转换为秒
2526

2627
# 认证相关配置
@@ -29,4 +30,4 @@
2930

3031
# 日志配置
3132
LOG_LEVEL = 'DEBUG' if DEBUG else 'INFO'
32-
LOG_FILE = BASE_DIR / 'logs' / 'webui.log'
33+
LOG_FILE = BASE_DIR / 'logs' / 'webui.log'

WebUI/services/bot_service.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ def __init__(self):
5151
self._start_time: float = 0
5252
self._loop: Optional[asyncio.AbstractEventLoop] = None
5353
self._bot_thread: Optional[threading.Thread] = None
54-
logger.log('WEBUI', "机器人服务初始化完成")
5554

5655
def start_bot(self) -> bool:
5756
"""启动机器人
@@ -143,7 +142,7 @@ def stop_bot(self) -> bool:
143142
# 重置状态
144143
self._task = None
145144
self._start_time = 0
146-
self._bot_thread = None
145+
self._bot_thread = None
147146
self._loop = None
148147
bot_bridge.start_time = 0
149148
bot_bridge.is_running = False

0 commit comments

Comments
 (0)