chore: initial import
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import base64
|
||||
import hmac
|
||||
import os
|
||||
|
||||
from fastapi import Request
|
||||
from fastapi.responses import JSONResponse, Response
|
||||
|
||||
|
||||
def _unauthorized() -> Response:
|
||||
return JSONResponse(
|
||||
status_code=401,
|
||||
content={"detail": "Anmeldung erforderlich."},
|
||||
headers={"WWW-Authenticate": 'Basic realm="Tandoor AI Import"'},
|
||||
)
|
||||
|
||||
|
||||
async def basic_auth_middleware(request: Request, call_next):
|
||||
expected_password = os.environ.get("APP_PASSWORD", "")
|
||||
if not expected_password:
|
||||
return await call_next(request)
|
||||
|
||||
expected_username = os.environ.get("APP_USERNAME", "admin")
|
||||
header = request.headers.get("Authorization", "")
|
||||
if not header.startswith("Basic "):
|
||||
return _unauthorized()
|
||||
|
||||
try:
|
||||
decoded = base64.b64decode(header[6:]).decode("utf-8")
|
||||
username, password = decoded.split(":", 1)
|
||||
except Exception:
|
||||
return _unauthorized()
|
||||
|
||||
if not (
|
||||
hmac.compare_digest(username, expected_username)
|
||||
and hmac.compare_digest(password, expected_password)
|
||||
):
|
||||
return _unauthorized()
|
||||
|
||||
return await call_next(request)
|
||||
Reference in New Issue
Block a user