28 lines
934 B
Python
28 lines
934 B
Python
"""
|
|
Login simples via HTTP Basic Auth, usuário/senha vindos de variável de
|
|
ambiente. Sem cadastro de usuários, sem perfis, sem sessão/cookie.
|
|
"""
|
|
import os
|
|
import secrets
|
|
|
|
from fastapi import Depends, HTTPException, status
|
|
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
|
|
|
_security = HTTPBasic()
|
|
|
|
|
|
def exigir_login(credenciais: HTTPBasicCredentials = Depends(_security)) -> str:
|
|
usuario_esperado = os.environ.get("ADMIN_USER", "")
|
|
senha_esperada = os.environ.get("ADMIN_PASSWORD", "")
|
|
|
|
usuario_ok = secrets.compare_digest(credenciais.username, usuario_esperado)
|
|
senha_ok = secrets.compare_digest(credenciais.password, senha_esperada)
|
|
|
|
if not (usuario_ok and senha_ok):
|
|
raise HTTPException(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
detail="Usuário ou senha inválidos.",
|
|
headers={"WWW-Authenticate": "Basic"},
|
|
)
|
|
return credenciais.username
|