e6875f0b4b
- 13-service async plugin framework - Textual TUI with CLI fallback - Plugin hot-reload + permission system - Web management panel (aiohttp) - Bridge-based inter-module communication - 10 regression tests Fixes applied: - PBKDF2-SHA256 auth (was plain SHA256) - Auth bypass removed (was allow-all on fail) - Bare excepts replaced with logged errors - CatFramework/DreamSu -> SenSu naming unified - ServiceManager: health checks + startup_order - Env var credentials (SENSU_ADMIN_PASSWORD etc)
16 lines
585 B
Python
16 lines
585 B
Python
from aiohttp import web
|
|
from ..utils.auth import panel_auth
|
|
|
|
def setup_routes(app, prefix=''):
|
|
app.router.add_post(f'{prefix}/api/command', panel_auth(exec_cmd))
|
|
|
|
async def exec_cmd(req):
|
|
d = await req.json()
|
|
cs = req.app.get('service_manager').get_service("command")
|
|
if not cs: return web.json_response({"error": "Missing"}, 503)
|
|
try:
|
|
res = await cs.execute_command(d.get('command',''))
|
|
return web.json_response({"success": True, "output": str(res)})
|
|
except Exception as e:
|
|
return web.json_response({"success": False, "error": str(e)})
|