From e54483fae3412813cca78de96bc9a67a97647682 Mon Sep 17 00:00:00 2001 From: Dustin Oprea Date: Wed, 19 May 2021 04:10:50 -0400 Subject: [PATCH] user_manager.py: Support alternative managers passed to init_app() --- flask_user/user_manager.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/flask_user/user_manager.py b/flask_user/user_manager.py index b6323997..c4b3d683 100644 --- a/flask_user/user_manager.py +++ b/flask_user/user_manager.py @@ -60,7 +60,11 @@ def init_app( UserInvitationClass=None, UserEmailClass=None, RoleClass=None, # Only used for testing - ): + token_manager=None, + email_manager=None, + password_manager=None, + db_manager=None, + login_manager=None): # See http://flask.pocoo.org/docs/0.12/extensiondev/#the-extension-code # Perform Class type checking @@ -121,8 +125,11 @@ def advance_session_timeout(): # Configure Flask-Login # -------------------- # Setup default LoginManager using Flask-Login - self.login_manager = LoginManager(app) - self.login_manager.login_view = 'user.login' + if login_manager is None: + login_manager = LoginManager(app) + login_manager.login_view = 'user.login' + + self.login_manager = login_manager # Flask-Login calls this function to retrieve a User record by token. @self.login_manager.user_loader @@ -179,10 +186,16 @@ def call_or_get(function_or_property): # Set default managers # -------------------- # Setup DBManager - self.db_manager = DBManager(app, db, UserClass, UserEmailClass, UserInvitationClass, RoleClass) + if db_manager is None: + db_manager = DBManager(app, db, UserClass, UserEmailClass, UserInvitationClass, RoleClass) + + self.db_manager = db_manager # Setup PasswordManager - self.password_manager = PasswordManager(app) + if password_manager is None: + password_manager = PasswordManager(app) + + self.password_manager = password_manager # Set default EmailAdapter if self.USER_ENABLE_EMAIL: @@ -191,10 +204,16 @@ def call_or_get(function_or_property): # Setup EmailManager if self.USER_ENABLE_EMAIL: - self.email_manager = EmailManager(app) + if email_manager is None: + email_manager = EmailManager(app) + + self.email_manager = email_manager # Setup TokenManager - self.token_manager = TokenManager(app) + if token_manager is None: + token_manager = TokenManager(app) + + self.token_manager = token_manager # Allow developers to customize UserManager self.customize(app)