import datetime from dataclasses import dataclass, field from auth0.authentication import GetToken from fansifter_common.utils import timezone from pydantic import BaseModel class Auth0Token(BaseModel): access_token: str expires_in: int @property def expires_at(self) -> datetime.datetime: return timezone.now() + datetime.timedelta(seconds=self.expires_in) @dataclass(kw_only=True) class Auth0Client: domain: str audience: str client_id: str client_secret: str = field(repr=False) # Authentication _get_token_auth: GetToken = field(init=False) def __post_init__(self) -> None: self._get_token_auth = GetToken( self.domain, client_id=self.client_id, client_secret=self.client_secret, ) def get_token(self) -> Auth0Token: token = self._get_token_auth.client_credentials(self.audience) return Auth0Token.model_validate(token)