diff --git a/modoboa/core/api/v1/serializers.py b/modoboa/core/api/v1/serializers.py index 5b38fcbba..eda376829 100644 --- a/modoboa/core/api/v1/serializers.py +++ b/modoboa/core/api/v1/serializers.py @@ -10,6 +10,7 @@ from django.utils.translation import gettext as _ from rest_framework import serializers from modoboa.core import models +from modoboa.parameters import tools as param_tools logger = logging.getLogger("modoboa.auth") @@ -28,7 +29,16 @@ class AccountPasswordSerializer(serializers.ModelSerializer): def validate_password(self, value): """Check password.""" - if not self.instance.check_password(value): + authentication_type = param_tools.get_global_parameter("authentication_type") + if authentication_type != "ldap": + check = self.instance.check_password(value) + else: + from django_auth_ldap.backend import LDAPBackend + + check = LDAPBackend().authenticate( + self.context["request"], self.instance.username, value + ) + if not check: raise serializers.ValidationError("Password not correct") return value diff --git a/modoboa/core/api/v2/viewsets.py b/modoboa/core/api/v2/viewsets.py index 72b41756e..23c3187aa 100644 --- a/modoboa/core/api/v2/viewsets.py +++ b/modoboa/core/api/v2/viewsets.py @@ -76,7 +76,7 @@ class AccountViewSet(core_v1_viewsets.AccountViewSet): ) def set_me_password(self, request): serializer = core_v1_serializers.AccountPasswordSerializer( - instance=request.user, data=request.data + instance=request.user, data=request.data, context={"request": request} ) serializer.is_valid(raise_exception=True) serializer.save() diff --git a/modoboa/core/tests/test_ldap.py b/modoboa/core/tests/test_ldap.py index 5953ccdc4..6cc7c116e 100644 --- a/modoboa/core/tests/test_ldap.py +++ b/modoboa/core/tests/test_ldap.py @@ -157,6 +157,5 @@ class ProfileTestCase(LDAPTestCaseMixin, ModoAPITestCase): {"password": "test", "new_password": "Toto1234"}, format="json", ) - print(response.json()) self.assertEqual(response.status_code, 200) self.authenticate(username, "Toto1234", False)