"""管理后台 HTML(现代化 Tab 版)。 Tab 切换:概览 / 厂商 / 令牌 / 文件 / 会话 / 用量 / Webhook / 审计 / 测试 所有交互通过 fetch 调 /admin/api/* 接口。 """ from __future__ import annotations import secrets from fastapi import APIRouter, Query, Request from fastapi.responses import HTMLResponse, JSONResponse, Response from .api._common import CORS_HEADERS from .config import get_settings router = APIRouter(tags=["admin-html"]) @router.get("/admin", response_class=HTMLResponse) async def admin_page( request: Request, k: str | None = Query(default=None), ) -> Response: settings = get_settings() # 页面门禁:若配置了 XTC_ADMIN_ACCESS_TOKEN,则必须携带匹配的 ?k= # 否则返回 404 伪装该路径不存在(避免攻击者探测 /admin 是否存在) if settings.has_admin_access_token: provided = (k or "").strip() expected = settings.xtc_admin_access_token if not provided or not secrets.compare_digest(provided, expected): return JSONResponse( status_code=404, content={"detail": "Not Found"}, headers=CORS_HEADERS, ) disabled = not settings.is_admin_enabled return HTMLResponse(content=_render_html(disabled), headers=CORS_HEADERS) def _render_html(disabled: bool) -> str: disabled_attr = "true" if disabled else "false" return _HTML_TEMPLATE.replace("__DISABLED_ATTR__", disabled_attr) _HTML_TEMPLATE = """ XTC 后台管理

XTC 后台管理

服务: 检测中 Hugging Face 版

登录

登录后才能使用以下功能。admin key 会保存在 localStorage。

"""