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:
@@ -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
|
||||||
|
|||||||
@@ -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,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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
# 注册日志广播
|
# 注册日志广播
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)')
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user