api / backend /auth.py
gary-boon
Fix backend structure - remove duplicates
2c0fd9b
raw
history blame
1.18 kB
"""
Simple API Key Authentication for Private Deployment
"""
import os
from fastapi import HTTPException, Security, status
from fastapi.security import APIKeyHeader
from typing import Optional
# Get API key from environment variable
API_KEY = os.getenv("API_KEY", None)
# Create API key header scheme
api_key_header = APIKeyHeader(name="X-API-Key", auto_error=False)
async def verify_api_key(api_key: Optional[str] = Security(api_key_header)) -> bool:
"""
Verify API key if one is configured
If no API_KEY is set in environment, allows all requests (public mode)
If API_KEY is set, requires matching key in X-API-Key header
"""
# If no API key is configured, allow all requests (public mode)
if not API_KEY:
return True
# If API key is configured but not provided in request
if not api_key:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="API Key required"
)
# Verify the API key
if api_key != API_KEY:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Invalid API Key"
)
return True