From ad0574a55f1a9a144a8bd1d37bc104491daafad1 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sat, 7 Jun 2025 22:10:22 +0200 Subject: [PATCH] Use LDAP backend to check password --- modoboa/core/api/v1/serializers.py | 12 +++++++++++- modoboa/core/api/v2/viewsets.py | 2 +- modoboa/core/tests/test_ldap.py | 1 - 3 files changed, 12 insertions(+), 3 deletions(-) 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)