from datetime import datetime, timedelta, timezone from typing import Optional, Union from jose import JWTError, jwt from ea_chatbot.config import Settings settings = Settings() def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -> str: """ Create a JWT access token. Args: data: The payload data to encode. expires_delta: Optional expiration time delta. Returns: str: The encoded JWT token. """ to_encode = data.copy() if expires_delta: expire = datetime.now(timezone.utc) + expires_delta else: expire = datetime.now(timezone.utc) + timedelta(minutes=settings.access_token_expire_minutes) to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, settings.secret_key, algorithm=settings.algorithm) return encoded_jwt def decode_access_token(token: str) -> Optional[dict]: """ Decode a JWT access token. Args: token: The token to decode. Returns: Optional[dict]: The decoded payload if valid, None otherwise. """ try: payload = jwt.decode(token, settings.secret_key, algorithms=[settings.algorithm]) return payload except JWTError: return None