""" 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