factories.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding: utf-8 -*-
  2. """
  3. flaskbb.auth.services.factories
  4. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5. Factory functions for various FlaskBB auth services
  6. These factories are provisional.
  7. :copyright: 2014-2018 the FlaskBB Team.
  8. :license: BSD, see LICENSE for more details
  9. """
  10. from datetime import timedelta
  11. from flask import current_app
  12. from ...extensions import db
  13. from ...tokens import FlaskBBTokenSerializer
  14. from ...tokens.verifiers import EmailMatchesUserToken
  15. from ...user.models import User
  16. from ...user.repo import UserRepository
  17. from ...utils.settings import flaskbb_config
  18. from .activation import AccountActivator
  19. from .authentication import PluginAuthenticationManager
  20. from .password import ResetPasswordService
  21. from .reauthentication import PluginReauthenticationManager
  22. from .registration import (EmailUniquenessValidator, RegistrationService,
  23. UsernameRequirements, UsernameUniquenessValidator,
  24. UsernameValidator)
  25. def registration_service_factory():
  26. blacklist = [
  27. w.strip()
  28. for w in flaskbb_config["AUTH_USERNAME_BLACKLIST"].split(",")
  29. ]
  30. requirements = UsernameRequirements(
  31. min=flaskbb_config["AUTH_USERNAME_MIN_LENGTH"],
  32. max=flaskbb_config["AUTH_USERNAME_MAX_LENGTH"],
  33. blacklist=blacklist
  34. )
  35. validators = [
  36. EmailUniquenessValidator(User),
  37. UsernameUniquenessValidator(User),
  38. UsernameValidator(requirements)
  39. ]
  40. return RegistrationService(validators, UserRepository(db))
  41. def reset_service_factory():
  42. token_serializer = FlaskBBTokenSerializer(
  43. current_app.config['SECRET_KEY'], expiry=timedelta(hours=1)
  44. )
  45. verifiers = [EmailMatchesUserToken(User)]
  46. return ResetPasswordService(
  47. token_serializer, User, token_verifiers=verifiers
  48. )
  49. def account_activator_factory():
  50. token_serializer = FlaskBBTokenSerializer(
  51. current_app.config['SECRET_KEY'], expiry=timedelta(hours=1)
  52. )
  53. return AccountActivator(token_serializer, User)
  54. def authentication_manager_factory():
  55. return PluginAuthenticationManager(current_app.pluggy, db.session)
  56. def reauthentication_manager_factory():
  57. return PluginReauthenticationManager(current_app.pluggy, db.session)