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
This commit is contained in:
qinglong
2026-06-11 14:37:28 +08:00
parent 6918ee6514
commit dd8a31e29a
8 changed files with 27 additions and 22 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
framework: framework:
debug: true debug: true
name: SenSu name: SenSu
version: v0.5.0 version: v0.6.0
logging: logging:
debug_level_file: true debug_level_file: true
level: DEBUG level: DEBUG
+1 -1
View File
@@ -92,7 +92,7 @@ commands:
permissions: permissions:
- framework.command.test - framework.command.test
source: internal source: internal
last_updated: 274185.477575092 last_updated: 279099.130874572
plugin_commands: plugin_commands:
example_plugin: example_plugin:
echo: *id001 echo: *id001
+1 -1
View File
@@ -1,5 +1,5 @@
http_port: 4200 http_port: 4200
last_updated: 274185.481265509 last_updated: 279099.134553218
plugin_routes: plugin_routes:
example_plugin: example_plugin:
- methods: - methods:
-2
View File
@@ -199,8 +199,6 @@ class SenSuFramework:
logger.info("> 初始化 反向代理 中...") logger.info("> 初始化 反向代理 中...")
proxy_service = ProxyService(self.service_manager) proxy_service = ProxyService(self.service_manager)
await proxy_service.start() 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) self.service_manager.register_service("proxy", proxy_service)
logger.info("✅ 项目引擎+反向代理就绪") logger.info("✅ 项目引擎+反向代理就绪")
except Exception as e: except Exception as e:
+2 -2
View File
@@ -62,8 +62,8 @@ class WebPanelManager:
plugins.setup_routes(app, self.base_path) plugins.setup_routes(app, self.base_path)
commands.setup_routes(app, self.base_path) commands.setup_routes(app, self.base_path)
logs.setup_routes(app, self.base_path) logs.setup_routes(app, self.base_path)
projects.setup_project_routes(app, self.sm) projects.setup_project_routes(app, self.sm, self.base_path)
proxy.setup_proxy_routes(app, self.sm) proxy.setup_proxy_routes(app, self.sm, self.base_path)
plugin_web.setup_plugin_web_routes(app, self.sm) plugin_web.setup_plugin_web_routes(app, self.sm)
# 注册日志广播 # 注册日志广播
+2 -2
View File
@@ -8,7 +8,7 @@ def _get_engine(request):
return sm.get_service("project_engine") return sm.get_service("project_engine")
return None return None
def setup_project_routes(app, service_manager): def setup_project_routes(app, service_manager, prefix=''):
app["service_manager"] = service_manager app["service_manager"] = service_manager
async def list_projects(request): async def list_projects(request):
@@ -51,7 +51,7 @@ def setup_project_routes(app, service_manager):
async def project_page(request): async def project_page(request):
return web.FileResponse("static/web_panel/pages/projects.html") 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_post("/api/projects/run", run_project)
app.router.add_get("/api/projects/{name}/logs", get_logs) app.router.add_get("/api/projects/{name}/logs", get_logs)
app.router.add_post("/api/projects/{name}/stop", stop_project) app.router.add_post("/api/projects/{name}/stop", stop_project)
+5 -5
View File
@@ -2,7 +2,7 @@ from aiohttp import web, ClientSession
import json, logging, asyncio import json, logging, asyncio
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def setup_proxy_routes(app, service_manager): def setup_proxy_routes(app, service_manager, prefix=''):
async def list_proxies(request): async def list_proxies(request):
ps = service_manager.get_service("proxy") ps = service_manager.get_service("proxy")
return web.json_response({"proxies": ps.list_proxies() if ps else []}) 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) ps.unregister_proxy(path)
return web.json_response({"ok": True}) return web.json_response({"ok": True})
app.router.add_get("/api/proxy", list_proxies) app.router.add_get(f'{prefix}/api/proxy', list_proxies)
app.router.add_post("/api/proxy", add_proxy) app.router.add_post(f'{prefix}/api/proxy', add_proxy)
app.router.add_delete("/api/proxy/{path}", remove_proxy) app.router.add_delete(f'{prefix}/api/proxy/{{path}}', remove_proxy)
logger.info("🔀 代理路由已注册") logger.info(f'🔀 代理路由已注册 ({prefix}/api/proxy)')
+13 -6
View File
@@ -1,25 +1,32 @@
import time import time
from aiohttp import web from aiohttp import web
from ..utils.auth import panel_auth
from ..utils.system_info import SystemInfoCollector from ..utils.system_info import SystemInfoCollector
collector = SystemInfoCollector() collector = SystemInfoCollector()
def setup_routes(app, prefix=''): def setup_routes(app, prefix=''):
app.router.add_get(f'{prefix}/api/framework', panel_auth(get_framework)) app.router.add_get(f'{prefix}/api/framework', get_framework)
app.router.add_get(f'{prefix}/api/system', panel_auth(get_system)) app.router.add_get(f'{prefix}/api/system', get_system)
async def get_framework(req): async def get_framework(req):
sm = req.app.get('service_manager') sm = req.app.get('service_manager')
if not sm: return web.json_response({"error": "Missing"}, 500) if not sm: return web.json_response({"error": "Missing"}, 500)
ps = sm.get_service("plugin") ps = sm.get_service("plugin")
# 🟢 修复:使用 sm.start_time 属性
uptime = time.time() - getattr(sm, 'start_time', time.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({ return web.json_response({
"version": "Alpha_0.2.0", "version": ver,
"uptime": int(uptime), # 取整秒 "uptime": int(uptime),
"plugins": len(ps.plugins) if ps else 0 "plugins": len(ps.plugins) if ps else 0
}) })