edadometro / admin_auth.py
chechoguz's picture
Publicar demo Edadómetro en Hugging Face Spaces
c1fed6e
Raw History Blame Contribute Delete
1.17 kB
"""Autenticación simple para panel de administrador."""
from __future__ import annotations
import hashlib
import hmac
import os
import secrets
import time
ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "")
TOKEN_TTL_SECONDS = 24 * 60 * 60
def admin_configured() -> bool:
return bool(ADMIN_PASSWORD)
def verify_password(password: str) -> bool:
if not ADMIN_PASSWORD:
return False
return secrets.compare_digest(password, ADMIN_PASSWORD)
def create_token() -> str:
ts = str(int(time.time()))
sig = hmac.new(
ADMIN_PASSWORD.encode(),
f"admin:{ts}".encode(),
hashlib.sha256,
).hexdigest()
return f"{ts}.{sig}"
def verify_token(token: str) -> bool:
if not ADMIN_PASSWORD or not token:
return False
try:
ts_str, sig = token.split(".", 1)
ts = int(ts_str)
except (ValueError, AttributeError):
return False
if time.time() - ts > TOKEN_TTL_SECONDS:
return False
expected = hmac.new(
ADMIN_PASSWORD.encode(),
f"admin:{ts_str}".encode(),
hashlib.sha256,
).hexdigest()
return secrets.compare_digest(sig, expected)