tlong-ds's picture
upload
d810052
"""
token_utils.py - JWT token utilities for authentication
------------------------------------------------------
This module contains functions for JWT token encoding and decoding
Extracted to avoid circular imports between auth.py and api_endpoints.py
"""
from fastapi import HTTPException
from jose import jwt, JWTError
import time
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
SECRET_KEY = os.getenv("SECRET_TOKEN", "somesecretkey")
ALGORITHM = os.getenv("ALGORITHM", "HS256")
def create_token(data: dict, expires_in: int = 86400):
"""
Create a JWT token from user data
Args:
data: Dictionary containing user information
expires_in: Token expiration time in seconds (default: 24 hours)
Returns:
JWT token string
"""
to_encode = data.copy()
to_encode.update({"exp": time.time() + expires_in})
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
def decode_token(token: str):
"""
Decode and validate a JWT token
Args:
token: JWT token string
Returns:
Dictionary with decoded token data
Raises:
HTTPException: If token is invalid or expired
"""
try:
return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
except JWTError:
raise HTTPException(status_code=403, detail="Invalid or expired token")