From dd8a31e29af8b0f2b096612622ae979675fc4b93 Mon Sep 17 00:00:00 2001 From: qinglong Date: Thu, 11 Jun 2026 14:37:28 +0800 Subject: [PATCH] Fix: proxy API prefix, version from config, remove auth from framework/system endpoints - Proxy routes now use /SenSu/api/proxy (was missing prefix) - Projects routes use dynamic prefix - Version reads from config/framework/base_config.yaml - Framework/System APIs no longer require auth (public info) - Proxy init separated from route setup (avoids frozen router error) - Version updated to v0.6.0 --- config/framework/base_config.yaml | 2 +- config/plugins/commands.yaml | 2 +- config/services/network_routes.yaml | 2 +- main.py | 2 -- services/web_panel/manager.py | 4 ++-- services/web_panel/routes/projects.py | 4 ++-- services/web_panel/routes/proxy.py | 10 +++++----- services/web_panel/routes/status.py | 23 +++++++++++++++-------- 8 files changed, 27 insertions(+), 22 deletions(-) diff --git a/config/framework/base_config.yaml b/config/framework/base_config.yaml index 5940164..af68063 100644 --- a/config/framework/base_config.yaml +++ b/config/framework/base_config.yaml @@ -1,7 +1,7 @@ framework: debug: true name: SenSu - version: v0.5.0 + version: v0.6.0 logging: debug_level_file: true level: DEBUG diff --git a/config/plugins/commands.yaml b/config/plugins/commands.yaml index 243e2e7..827a44a 100644 --- a/config/plugins/commands.yaml +++ b/config/plugins/commands.yaml @@ -92,7 +92,7 @@ commands: permissions: - framework.command.test source: internal -last_updated: 274185.477575092 +last_updated: 279099.130874572 plugin_commands: example_plugin: echo: *id001 diff --git a/config/services/network_routes.yaml b/config/services/network_routes.yaml index d77185d..9c9bde3 100644 --- a/config/services/network_routes.yaml +++ b/config/services/network_routes.yaml @@ -1,5 +1,5 @@ http_port: 4200 -last_updated: 274185.481265509 +last_updated: 279099.134553218 plugin_routes: example_plugin: - methods: diff --git a/main.py b/main.py index a0aa926..66358e8 100644 --- a/main.py +++ b/main.py @@ -199,8 +199,6 @@ class SenSuFramework: logger.info("> 初始化 反向代理 中...") proxy_service = ProxyService(self.service_manager) await proxy_service.start() - if internet_service and internet_service.http_app: - proxy_service.setup_routes(internet_service.http_app) self.service_manager.register_service("proxy", proxy_service) logger.info("✅ 项目引擎+反向代理就绪") except Exception as e: diff --git a/services/web_panel/manager.py b/services/web_panel/manager.py index 6f4a181..8b4a749 100644 --- a/services/web_panel/manager.py +++ b/services/web_panel/manager.py @@ -62,8 +62,8 @@ class WebPanelManager: plugins.setup_routes(app, self.base_path) commands.setup_routes(app, self.base_path) logs.setup_routes(app, self.base_path) - projects.setup_project_routes(app, self.sm) - proxy.setup_proxy_routes(app, self.sm) + projects.setup_project_routes(app, self.sm, self.base_path) + proxy.setup_proxy_routes(app, self.sm, self.base_path) plugin_web.setup_plugin_web_routes(app, self.sm) # 注册日志广播 diff --git a/services/web_panel/routes/projects.py b/services/web_panel/routes/projects.py index 1fd4748..a092cc0 100644 --- a/services/web_panel/routes/projects.py +++ b/services/web_panel/routes/projects.py @@ -8,7 +8,7 @@ def _get_engine(request): return sm.get_service("project_engine") return None -def setup_project_routes(app, service_manager): +def setup_project_routes(app, service_manager, prefix=''): app["service_manager"] = service_manager async def list_projects(request): @@ -51,7 +51,7 @@ def setup_project_routes(app, service_manager): async def project_page(request): return web.FileResponse("static/web_panel/pages/projects.html") - app.router.add_get("/api/projects", list_projects) + app.router.add_get(f'{prefix}/api/projects', list_projects) app.router.add_post("/api/projects/run", run_project) app.router.add_get("/api/projects/{name}/logs", get_logs) app.router.add_post("/api/projects/{name}/stop", stop_project) diff --git a/services/web_panel/routes/proxy.py b/services/web_panel/routes/proxy.py index 4854208..ae09d5f 100644 --- a/services/web_panel/routes/proxy.py +++ b/services/web_panel/routes/proxy.py @@ -2,7 +2,7 @@ from aiohttp import web, ClientSession import json, logging, asyncio logger = logging.getLogger(__name__) -def setup_proxy_routes(app, service_manager): +def setup_proxy_routes(app, service_manager, prefix=''): async def list_proxies(request): ps = service_manager.get_service("proxy") return web.json_response({"proxies": ps.list_proxies() if ps else []}) @@ -24,7 +24,7 @@ def setup_proxy_routes(app, service_manager): ps.unregister_proxy(path) return web.json_response({"ok": True}) - app.router.add_get("/api/proxy", list_proxies) - app.router.add_post("/api/proxy", add_proxy) - app.router.add_delete("/api/proxy/{path}", remove_proxy) - logger.info("🔀 代理路由已注册") + app.router.add_get(f'{prefix}/api/proxy', list_proxies) + app.router.add_post(f'{prefix}/api/proxy', add_proxy) + app.router.add_delete(f'{prefix}/api/proxy/{{path}}', remove_proxy) + logger.info(f'🔀 代理路由已注册 ({prefix}/api/proxy)') diff --git a/services/web_panel/routes/status.py b/services/web_panel/routes/status.py index ace8768..0c26319 100644 --- a/services/web_panel/routes/status.py +++ b/services/web_panel/routes/status.py @@ -1,25 +1,32 @@ import time from aiohttp import web -from ..utils.auth import panel_auth from ..utils.system_info import SystemInfoCollector collector = SystemInfoCollector() def setup_routes(app, prefix=''): - app.router.add_get(f'{prefix}/api/framework', panel_auth(get_framework)) - app.router.add_get(f'{prefix}/api/system', panel_auth(get_system)) + app.router.add_get(f'{prefix}/api/framework', get_framework) + app.router.add_get(f'{prefix}/api/system', get_system) async def get_framework(req): sm = req.app.get('service_manager') if not sm: return web.json_response({"error": "Missing"}, 500) - + ps = sm.get_service("plugin") - # 🟢 修复:使用 sm.start_time 属性 uptime = time.time() - getattr(sm, 'start_time', time.time()) - + # Read version from config file + ver = "v0.6.0" + try: + import yaml, os + config_path = os.path.join(os.path.dirname(__file__), "..", "..", "..", "config", "framework", "base_config.yaml") + with open(config_path) as f: + cfg = yaml.safe_load(f) + ver = cfg.get("framework", {}).get("version", ver) + except: pass + return web.json_response({ - "version": "Alpha_0.2.0", - "uptime": int(uptime), # 取整秒 + "version": ver, + "uptime": int(uptime), "plugins": len(ps.plugins) if ps else 0 })