16 lines
480 B
Python
16 lines
480 B
Python
import secrets
|
|
|
|
from fastapi import Security
|
|
from fastapi.security import APIKeyHeader
|
|
|
|
from .config import get_settings
|
|
from .errors import APIError
|
|
|
|
api_key_header = APIKeyHeader(name="X-API-Key", auto_error=False)
|
|
|
|
|
|
def require_api_key(api_key: str | None = Security(api_key_header)) -> None:
|
|
expected = get_settings().api_key
|
|
if not api_key or not secrets.compare_digest(api_key, expected):
|
|
raise APIError(status_code=401, detail="Invalid or missing API key")
|