diff --git a/modoboa/core/password_hashers/base.py b/modoboa/core/password_hashers/base.py index ce05f4e72..8b354466f 100644 --- a/modoboa/core/password_hashers/base.py +++ b/modoboa/core/password_hashers/base.py @@ -86,6 +86,16 @@ class PasswordHasher(with_metaclass(MetaHasher, object)): hashed_value ) + def needs_rehash(self, hashed_value): + """Check if the provided hash needs rehasing accoring to the current + parameters + + :param str hashed_value: hased password + :rtype bool + :return: True if the password needs rehash, false otherwise + """ + return False + @classmethod def get_password_hashers(cls): """Return all the PasswordHasher supported by Modoboa""" diff --git a/modoboa/core/views/auth.py b/modoboa/core/views/auth.py index 77de63417..8945f7bf4 100644 --- a/modoboa/core/views/auth.py +++ b/modoboa/core/views/auth.py @@ -52,6 +52,14 @@ def dologin(request): ) user.set_password(form.cleaned_data["password"]) user.save() + if pwhash.needs_rehash(user.password): + logging.info( + _("Password hash parameter missmatch. " + "Updating %s password"), + user.username + ) + user.set_password(form.cleaned_data["password"]) + user.save() login(request, user) if not form.cleaned_data["rememberme"]: