fooder-api/fooder/controller/token.py

25 lines
947 B
Python

from .base import ControllerBase
from ..context import Context
from ..utils.jwt import Token, AccessToken, RefreshToken
from typing import Type, TypeVar
from datetime import datetime
T = TypeVar("T", bound=Token)
class TokenController(ControllerBase):
def __init__(self, ctx: Context, entity_id: int) -> None:
super().__init__(ctx)
self.entity_id = entity_id
def generate_token(self, token_cls: Type[T], now: datetime) -> T:
return token_cls(exp=token_cls.calculate_exp(now), sub=self.entity_id)
def generate_refresh_token(self, now: datetime) -> RefreshToken:
return self.generate_token(RefreshToken, now)
def generate_access_token(self, now: datetime) -> AccessToken:
return self.generate_token(AccessToken, now)
def generate_token_pair(self, now: datetime) -> tuple[AccessToken, RefreshToken]:
return (self.generate_access_token(now), self.generate_refresh_token(now))