Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import secrets | |
| from fastapi import Header, HTTPException, status | |
| from app.config import settings | |
| def verify_api_key(key: str) -> bool: | |
| """Constant-time check against every configured API key.""" | |
| valid = False | |
| for stored_key in settings.api_keys_list: | |
| if secrets.compare_digest(stored_key.encode(), key.encode()): | |
| valid = True | |
| return valid | |
| def verify_admin_key(key: str) -> bool: | |
| if not settings.admin_key: | |
| return False | |
| return secrets.compare_digest(settings.admin_key.encode(), key.encode()) | |
| def get_api_key(x_api_key: str = Header(..., alias="X-Api-Key")) -> str: | |
| if not verify_api_key(x_api_key): | |
| raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key") | |
| return x_api_key | |
| def get_admin_key(x_api_key: str = Header(..., alias="X-Api-Key")) -> str: | |
| if not verify_admin_key(x_api_key): | |
| raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid admin key") | |
| return x_api_key | |