api / backend /auth.py
gary-boon
Fix backend structure - remove duplicates
2c0fd9b
"""
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