feat: F1 — panel admin web (FastAPI, solo 127.0.0.1, X-Admin-Token, SSH tunnel)

This commit is contained in:
markosbenitez
2026-05-30 01:37:14 -03:00
parent 61a15c5c50
commit 8bd1a0dd5b
12 changed files with 552 additions and 0 deletions

22
admin/auth.py Normal file
View File

@@ -0,0 +1,22 @@
"""
admin/auth.py — Autenticación del panel de administración.
Token estático via header X-Admin-Token.
Si ADMIN_TOKEN no está configurado, el panel rechaza todos los requests.
"""
from __future__ import annotations
import secrets
from fastapi import HTTPException, Request
def require_token(token_esperado: str):
"""Devuelve una dependencia FastAPI que valida X-Admin-Token."""
async def _check(request: Request) -> None:
if not token_esperado:
raise HTTPException(status_code=403, detail="Panel no configurado: falta ADMIN_TOKEN")
token = request.headers.get("X-Admin-Token", "")
if not secrets.compare_digest(token, token_esperado):
raise HTTPException(status_code=403, detail="Token inválido")
return _check