Import source: axon/middleware/auth
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
from starlette.middleware.base import BaseHTTPMiddleware
|
||||||
|
from starlette.requests import Request
|
||||||
|
|
||||||
|
from axon.config import settings
|
||||||
|
|
||||||
|
_EXEMPT = {"/health", "/metrics", "/docs", "/openapi.json", "/redoc"}
|
||||||
|
|
||||||
|
|
||||||
|
class APIKeyMiddleware(BaseHTTPMiddleware):
|
||||||
|
async def dispatch(self, request: Request, call_next):
|
||||||
|
if not settings.api_key_list:
|
||||||
|
return await call_next(request)
|
||||||
|
|
||||||
|
if request.url.path in _EXEMPT:
|
||||||
|
return await call_next(request)
|
||||||
|
|
||||||
|
key = request.headers.get("X-API-Key", "")
|
||||||
|
if key not in settings.api_key_list:
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=401,
|
||||||
|
content={"detail": "Invalid or missing API key"},
|
||||||
|
)
|
||||||
|
|
||||||
|
return await call_next(request)
|
||||||
Reference in New Issue
Block a user