from datetime import datetime, timedelta, timezone import jwt from enum import Enum from utils.constants import JWT_SECRET, JWT_ALGORITHM, JWT_EXPIRE_MINUTES def create_jwt_token(data: dict): try: # Create a copy of the data and handle Enum and datetime serialization to_encode = {} for key, value in data.items(): if isinstance(value, Enum): to_encode[key] = value.value # Convert Enum to its string value elif isinstance(value, datetime): to_encode[key] = value.isoformat() # Convert datetime to ISO format string else: to_encode[key] = value # Safely evaluate the JWT_EXPIRE_MINUTES expression minutes = eval(JWT_EXPIRE_MINUTES) if isinstance(JWT_EXPIRE_MINUTES, str) else JWT_EXPIRE_MINUTES expire = datetime.now(timezone.utc) + timedelta(minutes=minutes) to_encode.update({"exp": expire.timestamp()}) # Use timestamp for expiration encoded_jwt = jwt.encode(to_encode, JWT_SECRET, algorithm=JWT_ALGORITHM) return encoded_jwt except Exception as e: raise e def verify_jwt_token(token: str): try: payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM]) return payload except jwt.ExpiredSignatureError: return None except jwt.InvalidTokenError: return None