Add API key authentication support for /api/chat (Bearer or X-API-Key header)
Browse files
app.py
CHANGED
|
@@ -61,6 +61,11 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None):
|
|
| 61 |
|
| 62 |
async def get_current_user(credentials: HTTPAuthorizationCredentials = Depends(security)):
|
| 63 |
token = credentials.credentials
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
try:
|
| 65 |
payload = jwt.decode(token, settings.secret_key, algorithms=[settings.algorithm])
|
| 66 |
username = payload.get("sub")
|
|
@@ -76,6 +81,9 @@ async def get_current_user(credentials: HTTPAuthorizationCredentials = Depends(s
|
|
| 76 |
async def get_user_or_none(request: Request):
|
| 77 |
auth = request.headers.get("Authorization", "")
|
| 78 |
if not auth.startswith("Bearer "):
|
|
|
|
|
|
|
|
|
|
| 79 |
return None
|
| 80 |
try:
|
| 81 |
return await get_current_user(HTTPAuthorizationCredentials(scheme="Bearer", credentials=auth[7:]))
|
|
|
|
| 61 |
|
| 62 |
async def get_current_user(credentials: HTTPAuthorizationCredentials = Depends(security)):
|
| 63 |
token = credentials.credentials
|
| 64 |
+
if token.startswith("ollama_"):
|
| 65 |
+
user = get_user_by_api_key(token)
|
| 66 |
+
if not user:
|
| 67 |
+
raise HTTPException(status_code=401, detail="Invalid API key")
|
| 68 |
+
return user
|
| 69 |
try:
|
| 70 |
payload = jwt.decode(token, settings.secret_key, algorithms=[settings.algorithm])
|
| 71 |
username = payload.get("sub")
|
|
|
|
| 81 |
async def get_user_or_none(request: Request):
|
| 82 |
auth = request.headers.get("Authorization", "")
|
| 83 |
if not auth.startswith("Bearer "):
|
| 84 |
+
api_key = request.headers.get("X-API-Key", "")
|
| 85 |
+
if api_key:
|
| 86 |
+
return get_user_by_api_key(api_key)
|
| 87 |
return None
|
| 88 |
try:
|
| 89 |
return await get_current_user(HTTPAuthorizationCredentials(scheme="Bearer", credentials=auth[7:]))
|