23 lines
784 B
Python
23 lines
784 B
Python
"""
|
|
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
|