diff --git a/password_security/models/res_company.py b/password_security/models/res_company.py index 1c22ac9657..0f42da3014 100644 --- a/password_security/models/res_company.py +++ b/password_security/models/res_company.py @@ -10,7 +10,7 @@ class ResCompany(models.Model): _inherit = "res.company" password_policy_enabled = fields.Boolean(default=False) - + password_expiration = fields.Integer( "Days", default=60, diff --git a/password_security/models/res_users.py b/password_security/models/res_users.py index dae396133f..4eb049958f 100644 --- a/password_security/models/res_users.py +++ b/password_security/models/res_users.py @@ -46,7 +46,7 @@ def create(self, vals): return super(ResUsers, self).create(vals) def write(self, vals): - if vals.get("password"): + if vals.get("password") and self.env.user.company_id.password_policy_enabled: self._check_password(vals["password"]) vals["password_write_date"] = fields.Datetime.now() return super(ResUsers, self).write(vals) @@ -55,16 +55,17 @@ def write(self, vals): def get_password_policy(self): data = super(ResUsers, self).get_password_policy() company_id = self.env.user.company_id - data.update( - { - "password_lower": company_id.password_lower, - "password_upper": company_id.password_upper, - "password_numeric": company_id.password_numeric, - "password_special": company_id.password_special, - "password_length": company_id.password_length, - "password_estimate": company_id.password_estimate, - } - ) + if company_id.password_policy_enabled: + data.update( + { + "password_lower": company_id.password_lower, + "password_upper": company_id.password_upper, + "password_numeric": company_id.password_numeric, + "password_special": company_id.password_special, + "password_length": company_id.password_length, + "password_estimate": company_id.password_estimate, + } + ) return data def _check_password_policy(self, passwords): @@ -124,20 +125,21 @@ def _check_password_rules(self, password): if not password: return True company_id = self.company_id - password_regex = [ - "^", - "(?=.*?[a-z]){" + str(company_id.password_lower) + ",}", - "(?=.*?[A-Z]){" + str(company_id.password_upper) + ",}", - "(?=.*?\\d){" + str(company_id.password_numeric) + ",}", - r"(?=.*?[\W_]){" + str(company_id.password_special) + ",}", - ".{%d,}$" % int(company_id.password_length), - ] - if not re.search("".join(password_regex), password): - raise ValidationError(self.password_match_message()) - - estimation = self.get_estimation(password) - if estimation["score"] < company_id.password_estimate: - raise UserError(estimation["feedback"]["warning"]) + if company_id.password_policy_enabled: + password_regex = [ + "^", + "(?=.*?[a-z]){" + str(company_id.password_lower) + ",}", + "(?=.*?[A-Z]){" + str(company_id.password_upper) + ",}", + "(?=.*?\\d){" + str(company_id.password_numeric) + ",}", + r"(?=.*?[\W_]){" + str(company_id.password_special) + ",}", + ".{%d,}$" % int(company_id.password_length), + ] + if not re.search("".join(password_regex), password): + raise ValidationError(self.password_match_message()) + + estimation = self.get_estimation(password) + if estimation["score"] < company_id.password_estimate: + raise UserError(estimation["feedback"]["warning"]) return True diff --git a/password_security/tests/test_res_users.py b/password_security/tests/test_res_users.py index 9e6d8b875c..11207467af 100644 --- a/password_security/tests/test_res_users.py +++ b/password_security/tests/test_res_users.py @@ -17,6 +17,7 @@ def setUpClass(cls): } cls.password = "asdQWE123$%^" cls.main_comp = cls.env.ref("base.main_company") + cls.main_comp.password_policy_enabled = True cls.vals = { "name": "User", "login": cls.login, diff --git a/password_security/views/res_config_settings_views.xml b/password_security/views/res_config_settings_views.xml index c90caf67e8..e96091996d 100644 --- a/password_security/views/res_config_settings_views.xml +++ b/password_security/views/res_config_settings_views.xml @@ -26,17 +26,11 @@