Spaces:
Running
Running
| """Optional API key protection.""" | |
| from __future__ import annotations | |
| from fastapi import HTTPException, Request, status | |
| from app.core.config import settings | |
| async def require_api_key(request: Request) -> None: | |
| """Require X-API-Key or Bearer token when STOCK_DATA_API_KEY is configured.""" | |
| if not settings.api_key: | |
| return | |
| header_key = request.headers.get("X-API-Key", "") | |
| auth = request.headers.get("Authorization", "") | |
| bearer_key = auth.removeprefix("Bearer ").strip() if auth.startswith("Bearer ") else "" | |
| if header_key == settings.api_key or bearer_key == settings.api_key: | |
| return | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Missing or invalid API key", | |
| ) | |