byceps/byceps

View on GitHub
byceps/services/verification_token/models.py

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
"""
byceps.services.verification_token.models
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Copyright: 2014-2024 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

from dataclasses import dataclass
from datetime import datetime
from enum import Enum

from byceps.services.user.models.user import User


Purpose = Enum(
    'Purpose',
    [
        'consent',
        'email_address_change',
        'email_address_confirmation',
        'password_reset',
    ],
)


@dataclass(frozen=True)
class _BaseVerificationToken:
    token: str
    created_at: datetime
    user: User


@dataclass(frozen=True)
class VerificationToken(_BaseVerificationToken):
    purpose: Purpose
    data: dict[str, str]


@dataclass(frozen=True)
class ConsentToken(_BaseVerificationToken):
    pass


@dataclass(frozen=True)
class EmailAddressChangeToken(_BaseVerificationToken):
    new_email_address: str


@dataclass(frozen=True)
class EmailAddressConfirmationToken(_BaseVerificationToken):
    email_address: str


@dataclass(frozen=True)
class PasswordResetToken(_BaseVerificationToken):
    pass