File size: 944 Bytes
0d3f7cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"""Authentication middleware — API key based."""

from __future__ import annotations

import logging
import secrets

from fastapi import HTTPException, Request

from hermes.config.settings import get_settings

logger = logging.getLogger(__name__)


async def get_api_key_dependency(request: Request) -> None:
    """Evaluated at request-time so env/config changes take effect without module reload."""
    settings = get_settings()
    if not settings.security.enable_auth or not settings.security.api_key:
        return
    auth_header = request.headers.get("Authorization", "")
    if not auth_header.startswith("Bearer "):
        raise HTTPException(status_code=401, detail="Missing or malformed Authorization header")
    provided = auth_header.removeprefix("Bearer ")
    expected = settings.security.api_key
    if not secrets.compare_digest(provided, expected):
        raise HTTPException(status_code=401, detail="Invalid API key")