feat(server): modularize backend and admin console

This commit is contained in:
2026-07-14 01:38:41 +00:00
parent 9a6ac1e4ed
commit 95dd32c75a
261 changed files with 39289 additions and 2156 deletions
+61
View File
@@ -0,0 +1,61 @@
from pathlib import Path
import hashlib
import secrets
from fastapi import Header, HTTPException
from app.core.config import ENV_FILE_PATH, settings
if not settings.admin_token:
raise RuntimeError("请在环境变量或 .env 中配置 ADMIN_TOKEN")
def token_digest(token: str) -> str:
return hashlib.sha256(token.encode("utf-8")).hexdigest()
def quote_env_value(value: str) -> str:
unsafe_chars = set(" \t\n\r#\"'")
if value and not any(ch in unsafe_chars for ch in value):
return value
return '"' + value.replace("\\", "\\\\").replace('"', '\\"') + '"'
def persist_env_value(path: Path, key: str, value: str) -> bool:
line = f"{key}={quote_env_value(value)}\n"
if path.exists():
lines = path.read_text(encoding="utf-8").splitlines(keepends=True)
replaced = False
for index, item in enumerate(lines):
stripped = item.lstrip()
if stripped.startswith("#") or "=" not in stripped:
continue
name = stripped.split("=", 1)[0].strip()
if name == key:
lines[index] = line
replaced = True
break
if not replaced:
if lines and not lines[-1].endswith(("\n", "\r")):
lines[-1] += "\n"
lines.append(line)
path.write_text("".join(lines), encoding="utf-8")
return True
path.write_text(line, encoding="utf-8")
return True
def admin_auth(X_Admin_Token: str = Header("")):
if not secrets.compare_digest(X_Admin_Token, settings.admin_token):
raise HTTPException(status_code=403, detail="后台密钥错误,禁止访问")
return True
ADMIN_TOKEN = settings.admin_token
def set_admin_token(new_token: str):
global ADMIN_TOKEN
settings.admin_token = new_token
ADMIN_TOKEN = new_token