from fastapi import Depends, HTTPException, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from jose import JWTError, jwt from app.core.config import settings bearer_scheme = HTTPBearer(auto_error=False) async def get_current_owner_id( credentials: HTTPAuthorizationCredentials | None = Depends(bearer_scheme), ) -> str: if credentials is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated.", ) try: payload = jwt.decode(credentials.credentials, settings.jwt_secret, algorithms=[settings.jwt_algorithm]) except JWTError as exc: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or expired token.", ) from exc owner_id = payload.get("sub") if not isinstance(owner_id, str) or not owner_id: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token payload.", ) return owner_id