Source code for flaskbb.core.auth.registration

# -*- coding: utf-8 -*-
"""
    flaskbb.core.auth.services
    ~~~~~~~~~~~~~~~~~~~~~~~~~~

    This modules provides services used in authentication and authorization
    across FlaskBB.

    :copyright: (c) 2014-2018 by the FlaskBB Team.
    :license: BSD, see LICENSE for more details.
"""
from abc import ABC, abstractmethod

import attr


[docs]@attr.s(hash=True, eq=False, order=False, repr=True, frozen=True) class UserRegistrationInfo(object): """ User registration object, contains all relevant information for validating and creating a new user. """ username = attr.ib() password = attr.ib(repr=False) email = attr.ib() language = attr.ib() group = attr.ib()
[docs]class UserValidator(ABC): """ Used to validate user registrations and stop the registration process by raising a :class:`~flaskbb.core.exceptions.ValidationError`. """
[docs] @abstractmethod def validate(self, user_info): """ This method is abstract. :param user_info: The provided registration information. :type user_info: :class:`~flaskbb.core.auth.registration.UserRegistrationInfo` """ # noqa
def __call__(self, user_info): return self.validate(user_info)
[docs]class RegistrationFailureHandler(ABC): """ Used to handle failures in the registration process. """
[docs] @abstractmethod def handle_failure(self, user_info, failures): """ This method is abstract. :param user_info: The provided registration information. :param failures: Tuples of (attribute, message) from the failure :type user_info: :class:`~flaskbb.core.auth.registration.UserRegistrationInfo` """ # noqa pass
def __call__(self, user_info, failures): self.handle_failure(user_info, failures)
[docs]class RegistrationPostProcessor(ABC): """ Used to post proccess successful registrations by the time this interface is called, the user has already been persisted into the database. """
[docs] @abstractmethod def post_process(self, user): """ This method is abstract. :param user: The registered, persisted user. :type user: :class:`~flaskbb.user.models.User` """ pass
def __call__(self, user): self.post_process(user)
[docs]class UserRegistrationService(ABC): """ Used to manage the registration process. A default implementation is provided however, this interface is provided in case alternative flows are needed. """
[docs] @abstractmethod def register(self, user_info): """ This method is abstract. :param user_info: The provided user registration information. :type user_info: :class:`~flaskbb.core.auth.registration.UserRegistrationInfo` """ # noqa pass