File size: 1,195 Bytes
e16db8b
 
 
 
 
 
 
 
 
 
 
 
b2e9550
 
 
 
e16db8b
 
 
 
 
b2e9550
e16db8b
 
 
 
 
b2e9550
e16db8b
 
 
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
28
29
30
31
32
#!/usr/bin/env python3
"""API authentication."""
from typing import Optional
from fastapi import HTTPException, Header, status

from config import API_KEY
from logger import setup_logger

logger = setup_logger("security.auth")

async def verify_bearer_token(authorization: Optional[str] = Header(None)) -> str:
    """Verify Bearer token."""
    if not API_KEY:
        logger.error("MED_SERVICE_KEY is not configured")
        raise HTTPException(status_code=status.HTTP_503_SERVICE_UNAVAILABLE, detail="Service authentication is not configured")

    if not authorization:
        logger.warning("Missing Authorization header")
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Missing Authorization")
    
    if not authorization.startswith("Bearer "):
        logger.warning("Invalid Authorization format")
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid format")
    
    token = authorization.replace("Bearer ", "", 1).strip()
    
    if token != API_KEY:
        logger.warning("Invalid API key attempt")
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid API key")
    
    return token