Source code for podme_api.auth.models

from __future__ import annotations

from dataclasses import dataclass, field
from datetime import datetime, timezone

from mashumaro import field_options

from podme_api.models import BaseDataClassORJSONMixin


[docs] @dataclass class PodMeUserCredentials: """Represents user's login details for PodMe authentication.""" email: str password: str
[docs] @dataclass class SchibstedCredentials(BaseDataClassORJSONMixin): """Represents Schibsted authentication credentials.""" scope: str token_type: str access_token: str refresh_token: str expires_in: int id_token: str expiration_time: datetime = field( metadata=field_options( deserialize=datetime.fromtimestamp, serialize=lambda v: int(datetime.timestamp(v)), ) ) account_created: bool | None = field(default=None, metadata=field_options(alias="accountCreated")) email: str | None = None
[docs] def is_expired(self): return datetime.now(tz=timezone.utc) > self.expiration_time.astimezone(tz=timezone.utc)
[docs] @dataclass class SchibstedAuthClientData(BaseDataClassORJSONMixin): """Represents Schibsted authentication client data.""" app_type: str = field(metadata=field_options(alias="appType")) birthday_format: str = field(metadata=field_options(alias="birthdayFormat")) company: str css: dict default_client_id: str = field(metadata=field_options(alias="defaultClientId")) domain: str email_receipts_enabled: bool = field(metadata=field_options(alias="emailReceiptsEnabled")) id: str locale: str logo_mark_url: str = field(metadata=field_options(alias="logoMarkUrl")) logo_url: str = field(metadata=field_options(alias="logoUrl")) merchant_id: int = field(metadata=field_options(alias="merchantId")) merchant_name: str = field(metadata=field_options(alias="merchantName")) merchant_type: str = field(metadata=field_options(alias="merchantType")) name: str pulse_provider_id: str = field(metadata=field_options(alias="pulseProviderId")) session_service_domain: str = field(metadata=field_options(alias="sessionServiceDomain")) support_url: str = field(metadata=field_options(alias="supportUrl")) terms: dict uri_scheme: str = field(metadata=field_options(alias="uriScheme")) teaser: dict | None = field(default=None)
[docs] @dataclass class PodMeBffData(BaseDataClassORJSONMixin): """Represents PodMe Backend-for-Frontend (BFF) data.""" bff: dict client: SchibstedAuthClientData csrf_token: str = field(metadata=field_options(alias="csrfToken")) default_terms_agreement: bool = field(metadata=field_options(alias="defaultTermsAgreement")) initial_state: dict = field(metadata=field_options(alias="initialState")) pulse: dict re_captcha_site_key: str = field(metadata=field_options(alias="reCaptchaSiteKey")) spid_url: str = field(metadata=field_options(alias="spidUrl"))