from datetime import datetime, timedelta from typing import Optional from jose import JWTError, jwt from passlib.context import CryptContext from schemas.auth import TokenData from config import settings pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") SECRET_KEY = settings.SECRET_KEY ALGORITHM = settings.ALGORITHM ACCESS_TOKEN_EXPIRE_MINUTES = settings.ACCESS_TOKEN_EXPIRE_MINUTES def decode_token(token: str): try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) username: str = payload.get("sub") user_id: str = payload.get("user_id") if username is None and user_id is None: return None token_data = TokenData(username=username, user_id=user_id) except JWTError: return None return token_data