diff --git a/auth_user_case_insensitive/__init__.py b/auth_user_case_insensitive/__init__.py index 9558317ddb..b26a8b2689 100644 --- a/auth_user_case_insensitive/__init__.py +++ b/auth_user_case_insensitive/__init__.py @@ -8,30 +8,30 @@ def pre_init_hook_login_check(env): - """This hook will look to see if any conflicting logins exist before + """This hook will look to see if any conflicting logins exist before the module is installed :param openerp.sql_db.Cursor cr: Database cursor. """ - with env.cr.savepoint(): - users = [] - env.cr.execute("SELECT login FROM res_users") - for user in env.cr.fetchall(): - login = user[0].lower() - if login not in users: - users.append(login) - else: - raise ValidationError( - _("Conflicting user logins exist for `%s`", login) - ) + with env.cr.savepoint(): + users = [] + env.cr.execute("SELECT login FROM res_users") + for user in env.cr.fetchall(): + login = user[0].lower() + if login not in users: + users.append(login) + else: + raise ValidationError( + _("Conflicting user logins exist for `%s`", login) + ) def post_init_hook_login_convert(env): - """After the module is installed, set all logins to lowercase + """After the module is installed, set all logins to lowercase :param openerp.sql_db.Cursor cr: Database cursor. :param openerp.modules.registry.RegistryManager registry: Database registry, using v7 api. """ - with env.cr.savepoint(): - env.cr.execute("UPDATE res_users SET login=lower(login)") + with env.cr.savepoint(): + env.cr.execute("UPDATE res_users SET login=lower(login)") diff --git a/auth_user_case_insensitive/models/res_users.py b/auth_user_case_insensitive/models/res_users.py index 9c119a87a3..270882b8ff 100644 --- a/auth_user_case_insensitive/models/res_users.py +++ b/auth_user_case_insensitive/models/res_users.py @@ -6,29 +6,28 @@ class ResUsers(models.Model): + _inherit = "res.users" - _inherit = "res.users" + login = fields.Char(help="Used to log into the system. Case insensitive.") - login = fields.Char(help="Used to log into the system. Case insensitive.") - - @classmethod - def _login(cls, db, credential, user_agent_env): - """Overload _login to lowercase the `login` before passing to the + @classmethod + def _login(cls, db, credential, user_agent_env): + """Overload _login to lowercase the `login` before passing to the super.""" - if credential.get('type') and credential['type'] == 'password': - credential['login'] = credential['login'].lower() - - return super()._login(db, credential, user_agent_env) - - @api.model_create_multi - def create(self, vals_list): - """Overload create multiple to lowercase login.""" - for val in vals_list: - val["login"] = val.get("login", "").lower() - return super().create(vals_list) - - def write(self, vals): - """Overload write to lowercase login.""" - if vals.get("login"): - vals["login"] = vals["login"].lower() - return super().write(vals) + if credential.get("type") and credential["type"] == "password": + credential["login"] = credential["login"].lower() + + return super()._login(db, credential, user_agent_env) + + @api.model_create_multi + def create(self, vals_list): + """Overload create multiple to lowercase login.""" + for val in vals_list: + val["login"] = val.get("login", "").lower() + return super().create(vals_list) + + def write(self, vals): + """Overload write to lowercase login.""" + if vals.get("login"): + vals["login"] = vals["login"].lower() + return super().write(vals) diff --git a/auth_user_case_insensitive/tests/test_res_users.py b/auth_user_case_insensitive/tests/test_res_users.py index 39e43b1720..5dafcbcffe 100644 --- a/auth_user_case_insensitive/tests/test_res_users.py +++ b/auth_user_case_insensitive/tests/test_res_users.py @@ -6,55 +6,54 @@ class TestResUsers(TransactionCase): - - def setUp(self): - super().setUp() - self.login = "LasLabs@ExAmPlE.CoM" - self.partner_vals = { - "name": "Partner", - "is_company": False, - "email": self.login, - } - self.vals = {"name": "User", "login": self.login, "password": "password"} - self.model_obj = self.env["res.users"] - - def _new_record(self): - """Gnerate a new record to test with.""" - partner_id = self.env["res.partner"].create(self.partner_vals) - self.vals["partner_id"] = partner_id.id - return self.model_obj.create(self.vals) - - def test_login_is_lowercased_on_create(self): - """Verify the login is set to lowercase on create.""" - rec_id = self._new_record() - self.assertEqual( - self.login.lower(), - rec_id.login, - "Login was not lowercased when saved to db.", - ) - - def test_login_is_lowercased_on_write(self): - """Verify the login is set to lowercase on write.""" - rec_id = self._new_record() - rec_id.write({"login": self.login}) - self.assertEqual( - self.login.lower(), - rec_id.login, - "Login was not lowercased when saved to db.", - ) - - def test_login_login_is_lowercased(self): - """verify the login is set to lowercase on login.""" - rec_id = self.model_obj.search([("login", "=", "admin")]) - credential = {'login': "AdMiN", 'password': "admin", 'type': 'password'} - auth_info = self.model_obj._login( - self.env.registry.db_name, - credential, - {"interactive": True}, - ) - self.assertEqual( - rec_id.id, - auth_info['uid'], - "Login with with uppercase chars was not \ + def setUp(self): + super().setUp() + self.login = "LasLabs@ExAmPlE.CoM" + self.partner_vals = { + "name": "Partner", + "is_company": False, + "email": self.login, + } + self.vals = {"name": "User", "login": self.login, "password": "password"} + self.model_obj = self.env["res.users"] + + def _new_record(self): + """Gnerate a new record to test with.""" + partner_id = self.env["res.partner"].create(self.partner_vals) + self.vals["partner_id"] = partner_id.id + return self.model_obj.create(self.vals) + + def test_login_is_lowercased_on_create(self): + """Verify the login is set to lowercase on create.""" + rec_id = self._new_record() + self.assertEqual( + self.login.lower(), + rec_id.login, + "Login was not lowercased when saved to db.", + ) + + def test_login_is_lowercased_on_write(self): + """Verify the login is set to lowercase on write.""" + rec_id = self._new_record() + rec_id.write({"login": self.login}) + self.assertEqual( + self.login.lower(), + rec_id.login, + "Login was not lowercased when saved to db.", + ) + + def test_login_login_is_lowercased(self): + """verify the login is set to lowercase on login.""" + rec_id = self.model_obj.search([("login", "=", "admin")]) + credential = {"login": "AdMiN", "password": "admin", "type": "password"} + auth_info = self.model_obj._login( + self.env.registry.db_name, + credential, + {"interactive": True}, + ) + self.assertEqual( + rec_id.id, + auth_info["uid"], + "Login with with uppercase chars was not \ successful", - ) + )