|
5 | 5 |
|
6 | 6 | import httpx |
7 | 7 | from fastapi import HTTPException, Request, status |
| 8 | +from fastapi.responses import JSONResponse |
8 | 9 | from jose import JWTError, jwk, jwt |
9 | 10 | from sqlmodel.ext.asyncio.session import AsyncSession |
10 | | -from src.backend.base.langflow.logging.logger import logger |
| 11 | +from starlette.status import HTTP_401_UNAUTHORIZED |
11 | 12 |
|
| 13 | +from langflow.logging.logger import logger |
12 | 14 | from langflow.services.database.models.user import User, UserCreate |
13 | 15 | from langflow.services.database.models.user.crud import get_user_by_id |
14 | 16 | from langflow.services.deps import get_settings_service |
|
19 | 21 | _jwks_cache: dict[str, dict[str, Any]] = {} |
20 | 22 |
|
21 | 23 | # APIs that require Clerk token decoding in middleware |
22 | | -PROTECTED_PATHS = ["/api/v1/users/"] |
| 24 | +PROTECTED_PATHS = ["/api/v1/users/","/api/v1/login"] |
23 | 25 |
|
24 | 26 |
|
25 | 27 | async def _get_jwks(issuer: str) -> dict[str, Any]: |
@@ -146,13 +148,25 @@ async def clerk_token_middleware(request: Request, call_next): |
146 | 148 | ctx_token: Token | None = None |
147 | 149 | if settings.auth_settings.CLERK_AUTH_ENABLED and request.url.path in PROTECTED_PATHS: |
148 | 150 | auth_header = request.headers.get("Authorization") |
| 151 | + |
| 152 | + if not auth_header or not auth_header.startswith("Bearer "): |
| 153 | + logger.warning("Missing or malformed Authorization header for Clerk protected route.") |
| 154 | + return JSONResponse( |
| 155 | + status_code=HTTP_401_UNAUTHORIZED, |
| 156 | + content={"detail": "Authorization header with valid Bearer token required"}, |
| 157 | + ) |
| 158 | + |
149 | 159 | if auth_header and auth_header.startswith("Bearer "): |
150 | 160 | token = auth_header[len("Bearer ") :] |
151 | 161 | try: |
152 | 162 | payload = await verify_clerk_token(token) |
153 | 163 | ctx_token = auth_header_ctx.set(payload) |
154 | 164 | except Exception as exc: # noqa: BLE001 |
155 | 165 | logger.warning(f"Failed to verify Clerk token: {exc}") |
| 166 | + return JSONResponse( |
| 167 | + status_code=HTTP_401_UNAUTHORIZED, |
| 168 | + content={"detail": "Invalid Clerk token"} |
| 169 | + ) |
156 | 170 |
|
157 | 171 | try: |
158 | 172 | return await call_next(request) |
|
0 commit comments