5ab5366534
1. 去掉 asyncio.wait_for 包装 open_connection,改用直接调用 2. ConnectionHandler 增加 flask_app 参数,数据库操作使用 app context 3. InstanceManager 传递 flask_app 到 Socks5Server 4. 修复 _reply 中 writer.write 不需要 await 的问题 验证: - 直连测试: HTTP/1.1 200 OK (ifconfig.me) - 端口监听: 10800 正常工作
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
"""Flask 应用工厂。"""
|
|
import os
|
|
import logging
|
|
from flask import Flask
|
|
from config import Config
|
|
from database import db
|
|
from models import Instance # 触发表创建
|
|
|
|
# ── 全局服务 ───────────────────────────────────────────────────
|
|
from engine.instances import InstanceManager
|
|
from services.user_service import UserService
|
|
from services.backup_service import set_backup_dir
|
|
|
|
|
|
def create_app():
|
|
app = Flask(__name__)
|
|
app.config.from_object(Config)
|
|
app.config["SECRET_KEY"] = os.environ.get(
|
|
"SM_SECRET_KEY", "sm-dev-key-change-in-prod"
|
|
)
|
|
app.config["SESSION_COOKIE_HTTPONLY"] = True
|
|
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
|
|
|
|
# 日志
|
|
logging.basicConfig(
|
|
level=getattr(logging, Config.LOG_LEVEL),
|
|
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
)
|
|
|
|
# 数据库
|
|
db.init_app(app)
|
|
app.db = db
|
|
|
|
# 全局服务注册
|
|
with app.app_context():
|
|
db.create_all()
|
|
# 初始化全局 db.app
|
|
from database import db as _db
|
|
_db.app = app
|
|
|
|
# 用户服务
|
|
user_service = UserService()
|
|
user_service.set_db_app(app)
|
|
app.user_service = user_service
|
|
|
|
# 实例管理器
|
|
instance_manager = InstanceManager(user_service, flask_app=app)
|
|
app.instance_manager = instance_manager
|
|
|
|
# 备份目录
|
|
set_backup_dir(Config.BACKUP_DIR)
|
|
|
|
# 注册蓝图
|
|
from auth import bp as auth_bp
|
|
from web.routes import bp as web_bp
|
|
from api.v1 import bp as api_bp
|
|
|
|
app.register_blueprint(auth_bp)
|
|
app.register_blueprint(web_bp)
|
|
app.register_blueprint(api_bp, url_prefix="/api")
|
|
|
|
return app
|