morphos / backend /app /security /device.py
Jose Salazar
A帽adir el stack nuevo: Vite/TypeScript + FastAPI
70e641d
Raw
History Blame Contribute Delete
1.18 kB
"""Autenticaci贸n del puente local (dispositivo headless) para la ingesta de laboratorio.
El puente no es un navegador: no tiene cookie de sesi贸n ni CSRF. Se autentica con una API
key por Bearer sobre HTTPS. Comparaci贸n en tiempo constante (misma disciplina que
verificar_password en db.py). Falla cerrado: sin keys configuradas, la ingesta no existe.
"""
from __future__ import annotations
import hmac
from fastapi import Header, HTTPException, status
from ..config import obtener_config
def verificar_dispositivo(authorization: str | None = Header(default=None)) -> None:
"""Dependencia para /api/lab/ingesta. 503 si no hay keys; 401 si la Bearer no coincide."""
cfg = obtener_config()
if not cfg.lab_api_keys:
raise HTTPException(
status.HTTP_503_SERVICE_UNAVAILABLE,
"Ingesta de laboratorio no configurada.",
)
token = ""
if authorization and authorization.lower().startswith("bearer "):
token = authorization[7:].strip()
if not token or not any(hmac.compare_digest(token, k) for k in cfg.lab_api_keys):
raise HTTPException(status.HTTP_401_UNAUTHORIZED, "Dispositivo no autorizado.")