558bd8153f
架构: - engine/server.py: asyncio SOCKS5 服务器引擎(含隧道/认证/限速) - engine/instances.py: 多实例管理器(独立事件循环/热启动/热停止) - services/user_service.py: 用户认证/流量统计/IP白名单/防爆破 - services/stats_service.py: 实时监控/流量趋势/连接追踪 - services/backup_service.py: 数据库备份与恢复 - api/v1.py: 完整 RESTful API - web/routes.py: Web 管理面板(暗色 Bootstrap 5 主题) 功能覆盖: ✅ 多实例 SOCKS5 管理(创建/启动/停止/重启/热加载) ✅ 用户认证(无认证/账号密码/流量上限/限速/并发限制) ✅ IP 白名单/黑名单/防爆破 ✅ 实时仪表盘(CPU/内存/网络/活跃连接) ✅ 流量统计(30天趋势图/用户排名/实例统计) ✅ 活跃连接追踪 ✅ 审计日志(事件/用户/IP 筛选) ✅ 数据库备份与恢复 ✅ 管理员密码保护 ✅ 16 项功能测试全部通过
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)
|
|
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
|