全局整改: 布局重构、鉴权加固、API修复

- 首页/播放页: 去掉 antd Layout 改用 div 避免 flex 布局问题
- 播放页: 返回按钮改为 navigate('/') 替代 window.close()
- 后端登录/验证: 改用 POST JSON body 替代 query param
- 后端鉴权: require_auth 依赖注入保护所有管理接口
- nodes路由: 修复 /strategy 被 /{node_id} 拦截的顺序问题
- 前端 Settings: 策略更新改为 JSON body
This commit is contained in:
admin committed 2026-08-07 21:22:52 +08:00
1 parent f3b2a9cb46
commit b81a7bf293
7 files changed
+110 -64

No files matched your search

+28 -23
View File
@@ -1,6 +1,7 @@
from fastapi import APIRouter, HTTPException
from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel
from config import settings, Settings
from config import settings
from routes.auth import require_auth
from services.load_balancer import lb
from services.multicast_detector import multicast_detector
@@ -12,8 +13,13 @@ class NodeUpdate(BaseModel):
enabled: bool | None = None
class StrategyUpdate(BaseModel):
strategy: str
multicast_enabled: bool | None = None
@router.get("")
async def list_nodes():
async def list_nodes(_: bool = Depends(require_auth)):
nodes = []
for n in settings.edge_nodes:
nodes.append({
@@ -28,8 +34,26 @@ async def list_nodes():
return nodes
@router.get("/strategy")
async def get_strategy(_: bool = Depends(require_auth)):
return {
"strategy": settings.load_balance_strategy,
"multicast_enabled": settings.multicast_enabled,
"multicast_available": multicast_detector.is_available(),
}
@router.put("/strategy")
async def update_strategy(body: StrategyUpdate, _: bool = Depends(require_auth)):
if body.strategy in ("round-robin", "weighted", "least-conn"):
settings.load_balance_strategy = body.strategy
if body.multicast_enabled is not None:
settings.multicast_enabled = body.multicast_enabled
return {"ok": True}
@router.put("/{node_id}")
async def update_node(node_id: str, body: NodeUpdate):
async def update_node(node_id: str, body: NodeUpdate, _: bool = Depends(require_auth)):
found = False
for n in settings.edge_nodes:
if n["id"] == node_id:
@@ -41,22 +65,3 @@ async def update_node(node_id: str, body: NodeUpdate):
if not found:
raise HTTPException(status_code=404, detail="Node not found")
return {"ok": True}
@router.get("/strategy")
async def get_strategy():
return {
"strategy": settings.load_balance_strategy,
"multicast_enabled": settings.multicast_enabled,
"multicast_available": multicast_detector.is_available(),
}
@router.put("/strategy")
async def update_strategy(strategy: str, multicast_enabled: bool | None = None):
global settings
if strategy in ("round-robin", "weighted", "least-conn"):
settings.load_balance_strategy = strategy
if multicast_enabled is not None:
settings.multicast_enabled = multicast_enabled
return {"ok": True}