snapdirect/src/security.py

21 lines
623 B
Python

import secrets
from typing import Annotated
from fastapi import Depends, Header, HTTPException
from starlette import status
from src.config import settings
def api_key(host: str = Header(), authorization: str | None = Header(None)) -> bool:
if host.lower().strip() != settings.API_DOMAIN.strip():
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
try:
if secrets.compare_digest(authorization.split()[1], settings.API_KEY):
return True
return False
except (AttributeError, TypeError, IndexError):
return False
ApiKey = Annotated[bool, Depends(api_key)]