3838[ ] Force new password every x days.
3939"""
4040
41+
4142# Allow logger to be set externally before importing this module
42- try :
43- logger # type: ignore # pylance: ignore undefined
44- except NameError :
45- # If not set, define a default logger
46- logger = logging .getLogger ("py4web.auth" )
43+ def make_default_logger (name = "py4web.auth" ):
44+ """Makes a default logger"""
45+ logger = logging .getLogger (name )
4746 if not logger .hasHandlers ():
4847 handler = logging .StreamHandler ()
4948 formatter = logging .Formatter ("%(asctime)s - %(levelname)s - %(message)s" )
5049 handler .setFormatter (formatter )
5150 logger .addHandler (handler )
51+ return logger
5252
5353
5454def b16e (text ):
@@ -244,6 +244,7 @@ def __init__(
244244 two_factor_send = None ,
245245 two_factor_validate = None ,
246246 template_args = None ,
247+ logger = None ,
247248 ):
248249 # configuration parameters
249250 self .param = Param (
@@ -290,6 +291,7 @@ def __init__(
290291 self .session = session
291292 self .sender = sender
292293 self .route = "auth"
294+ self .logger = logger or make_default_logger ()
293295 self .use_username = use_username # if False, uses email only
294296 self .password_in_db = password_in_db # if False, password is never saved in db
295297 self .use_phone_number = use_phone_number
@@ -689,20 +691,26 @@ def login(self, email, password):
689691 for plugin in self .plugins .values ():
690692 if not hasattr (plugin , "get_login_url" ):
691693 prevent_db_lookup = True
692- logger .debug (f"Trying plugin: { plugin .name } , mode: { getattr (plugin , 'mode' , None )} " )
694+ self .logger .debug (
695+ f"Trying plugin: { plugin .name } , mode: { getattr (plugin , 'mode' , None )} "
696+ )
693697 if plugin .check_credentials (email , password ):
694- logger .debug (f"Plugin { plugin .name } accepted credentials for { email } " )
698+ self .logger .debug (
699+ f"Plugin { plugin .name } accepted credentials for { email } "
700+ )
695701 user_info = {}
696702 user_info ["sso_id" ] = plugin .name + ":" + email
697703 if self .use_username or "@" not in email :
698704 user_info ["username" ] = email
699705 if "@" in email :
700706 user_info ["email" ] = email
701707 else :
702- logger .debug (f"Constructing email from username: { email } @example.com" )
708+ self .logger .debug (
709+ f"Constructing email from username: { email } @example.com"
710+ )
703711 user_info ["email" ] = email + "@example.com"
704712 user = self .get_or_register_user (user_info )
705- logger .debug (f"User after get_or_register_user: { user } " )
713+ self . logger .debug (f"User after get_or_register_user: { user } " )
706714 break
707715
708716 # else check against database
@@ -1295,9 +1303,13 @@ def login(auth):
12951303 if "pam" in auth .plugins or "ldap" in auth .plugins :
12961304 plugin_name = "pam" if "pam" in auth .plugins else "ldap"
12971305 plugin = auth .plugins [plugin_name ]
1298- logger .debug (f"AuthAPI.login: Trying plugin { plugin_name } for user { username } " )
1306+ self .logger .debug (
1307+ f"AuthAPI.login: Trying plugin { plugin_name } for user { username } "
1308+ )
12991309 check = plugin .check_credentials (username , password )
1300- logger .debug (f"AuthAPI.login: plugin.check_credentials returned { check } " )
1310+ self .logger .debug (
1311+ f"AuthAPI.login: plugin.check_credentials returned { check } "
1312+ )
13011313 if check :
13021314 data = {
13031315 "username" : username ,
@@ -1306,13 +1318,19 @@ def login(auth):
13061318 }
13071319 # and register the user if we have one, just in case
13081320 if auth .db :
1309- logger .debug (f"AuthAPI.login: Calling get_or_register_user with data={ data } " )
1321+ self .logger .debug (
1322+ f"AuthAPI.login: Calling get_or_register_user with data={ data } "
1323+ )
13101324 user = auth .get_or_register_user (data )
1311- logger .debug (f"AuthAPI.login: User after get_or_register_user: { user } " )
1325+ self .logger .debug (
1326+ f"AuthAPI.login: User after get_or_register_user: { user } "
1327+ )
13121328 auth .store_user_in_session (user ["id" ])
13131329 # else: if we're here - check is OK, but user is not in the session - is it right?
13141330 else :
1315- logger .debug (f"AuthAPI.login: plugin.check_credentials failed for { username } " )
1331+ self .logger .debug (
1332+ f"AuthAPI.login: plugin.check_credentials failed for { username } "
1333+ )
13161334 data = auth ._error (
13171335 auth .param .messages ["errors" ].get ("invalid_credentials" )
13181336 )
@@ -1699,9 +1717,7 @@ def login(self, model=False):
16991717 # Get plain text password directly from request, on Windows this is needed
17001718 # because form.vars.get("password", "") returns an hashed password.
17011719 plain_password = request .forms .get ("password" , "" )
1702- user , error = self .auth .login (
1703- form .vars .get ("email" , "" ), plain_password
1704- )
1720+ user , error = self .auth .login (form .vars .get ("email" , "" ), plain_password )
17051721 form .accepted = not error
17061722
17071723 # Stops processing if there is a login error
0 commit comments