"""JWT encode/decode helpers.""" from __future__ import annotations from datetime import UTC, datetime, timedelta from typing import Any import jwt from flask import current_app def encode_token(user_id: int, role: str) -> str: """Return a signed JWT for the given user.""" now = datetime.now(UTC) exp_minutes = current_app.config["JWT_EXP_MINUTES"] payload: dict[str, Any] = { "sub": str(user_id), "role": role, "iat": int(now.timestamp()), "exp": int((now + timedelta(minutes=exp_minutes)).timestamp()), } return jwt.encode( payload, current_app.config["JWT_SECRET"], algorithm=current_app.config["JWT_ALGORITHM"], ) def decode_token(token: str) -> dict[str, Any]: """Decode + validate a JWT. Raises jwt.PyJWTError on failure.""" return jwt.decode( token, current_app.config["JWT_SECRET"], algorithms=[current_app.config["JWT_ALGORITHM"]], )