Initial commit: SenSu Alpha 0.2.0

- 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)
This commit is contained in:
2026-06-10 12:27:14 +08:00
commit e6875f0b4b
78 changed files with 14843 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
from aiohttp import web
from .utils.response import json_res
import logging
logger = logging.getLogger(__name__)
# 白名单 (相对于子应用的路径)
WHITE_LIST = {
"/api/login",
"/api/auth/status",
"/",
"/static/"
}
async def auth_middleware(app, handler):
async def mid(req):
path = req.path
# 检查白名单
if any(path.startswith(w) for w in WHITE_LIST):
return await handler(req)
# 提取 Token
token = req.cookies.get("panel_token")
if not token and req.headers.get("Authorization", "").startswith("Bearer "):
token = req.headers["Authorization"].split(" ", 1)[1]
valid, info = False, {}
# 验证 Token (简单内存验证,后期可接 Redis/DB)
session_store = app.get('session_store', {})
if token and token in session_store:
valid, info = True, session_store[token]
if valid:
req['user'] = info
return await handler(req)
return json_res({"error": "未认证"}, 401)
return mid