Spaces:
Sleeping
Sleeping
| from sqlmodel import Session | |
| from typing import Generator | |
| from fastapi import Depends, HTTPException, status | |
| from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials | |
| from src.core.database import get_session | |
| from src.core.security import verify_jwt_token | |
| from src.core.config import settings | |
| security = HTTPBearer() | |
| def get_db() -> Generator[Session, None, None]: | |
| """Get database session dependency.""" | |
| yield from get_session() | |
| def get_current_user( | |
| credentials: HTTPAuthorizationCredentials = Depends(security) | |
| ) -> int: | |
| """ | |
| Get current user ID from JWT token. | |
| Extracts and verifies JWT from Authorization header. | |
| Args: | |
| credentials: HTTP Bearer credentials from Authorization header | |
| Returns: | |
| User ID extracted from validated token | |
| Raises: | |
| HTTPException: 401 if token is missing, invalid, or expired | |
| """ | |
| if not credentials: | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Not authenticated", | |
| headers={"WWW-Authenticate": "Bearer"} | |
| ) | |
| token = credentials.credentials | |
| # Verify token and extract payload | |
| payload = verify_jwt_token(token, settings.BETTER_AUTH_SECRET) | |
| # Extract user ID from 'sub' claim | |
| user_id = payload.get("sub") | |
| if not user_id: | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Invalid token payload", | |
| headers={"WWW-Authenticate": "Bearer"} | |
| ) | |
| return int(user_id) | |