jwt.py
 1  from datetime import datetime, timedelta
 2  from typing import Any
 3  
 4  import jwt
 5  
 6  from ..settings import settings
 7  
 8  
 9  def encode_jwt(data: dict[Any, Any], ttl: timedelta) -> str:
10      return jwt.encode({**data, "exp": datetime.utcnow() + ttl}, settings.jwt_secret, "HS256")
11  
12  
13  def decode_jwt(
14      token: str, *, require: list[str] | None = None, audience: list[str] | None = None
15  ) -> dict[Any, Any] | None:
16      try:
17          return jwt.decode(
18              token,
19              settings.jwt_secret,
20              ["HS256"],
21              audience=audience,
22              options={"require": [*{*(require or []), "exp"}], "verify_aud": bool(audience)},
23          )
24      except jwt.InvalidTokenError:
25          return None