From c545489726388e470de4e77a2f9420f4d189b7b7 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 11 Jan 2023 11:41:44 +0100 Subject: [PATCH] Fixed unit test --- modoboa/core/api/v2/serializers.py | 6 ++++++ modoboa/core/api/v2/views.py | 31 ++++++++++++++++-------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/modoboa/core/api/v2/serializers.py b/modoboa/core/api/v2/serializers.py index 635a4b859..d38123777 100644 --- a/modoboa/core/api/v2/serializers.py +++ b/modoboa/core/api/v2/serializers.py @@ -339,6 +339,12 @@ class PasswordRecoverySmsSerializer(serializers.Serializer): request = self.context["request"] clean_email = data["email"] + user = User.objects.filter(email__iexact=clean_email, is_active=True).first() + if user is None: + raise CustomValidationError({ + "type": "sms", "reason": "No valid user found." + }, 404) + self.context["user"] = ( User.objects.filter( email__iexact=clean_email, is_active=True) diff --git a/modoboa/core/api/v2/views.py b/modoboa/core/api/v2/views.py index 38f242cf7..ef07211af 100644 --- a/modoboa/core/api/v2/views.py +++ b/modoboa/core/api/v2/views.py @@ -18,7 +18,7 @@ from modoboa.parameters import tools as param_tools from smtplib import SMTPException -from .serializers import * +from . import serializers logger = logging.getLogger("modoboa.auth") @@ -84,17 +84,16 @@ class EmailPasswordResetView(APIView): """ def post(self, request, *args, **kwargs): - serializer = PasswordRecoveryEmailSerializer( + serializer = serializers.PasswordRecoveryEmailSerializer( data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) try: serializer.save() except SMTPException: return response.Response({ - "type": "email", - "reason": "Error while sending the email. Please contact an administrator." - }, - 503) + "type": "email", + "reason": "Error while sending the email. Please contact an administrator." + }, 503) # Email response return response.Response({"type": "email"}, 200) @@ -107,11 +106,11 @@ class DefaultPasswordResetView(EmailPasswordResetView): def post(self, request, *args, **kwargs): """Recover password.""" - serializer = PasswordRecoverySmsSerializer( + serializer = serializers.PasswordRecoverySmsSerializer( data=request.data, context={'request': request}) try: serializer.is_valid(raise_exception=True) - except NoSMSAvailable as e: + except serializers.NoSMSAvailable: return super().post(request, *args, **kwargs) # SMS response return response.Response({"type": "sms"}, 200) @@ -123,9 +122,10 @@ class PasswordResetSmsTOTP(APIView): def post(self, request, *args, **kwargs): try: if request.data["type"] == "confirm": - serializer = PasswordRecoverySmsConfirmSerializer(data=request.data, context={'request': request}) + klass = serializers.PasswordRecoverySmsConfirmSerializer elif request.data["type"] == "resend": - serializer = PasswordRecoverySmsResendSerializer(data=request.data, context={'request': request}) + klass = serializers.PasswordRecoverySmsResendSerializer + serializer = klass(data=request.data, context={'request': request}) except (MultiValueDictKeyError, KeyError): return response.Response({"reason": "No type provided."}, 400) serializer.is_valid(raise_exception=True) @@ -133,8 +133,11 @@ class PasswordResetSmsTOTP(APIView): payload = {"type": "resend"} if request.data["type"] == "confirm": serializer_response = serializer.context["response"] - payload.update({"token": serializer_response[0], "id": serializer_response[1], "type": "confirm"}) - + payload.update({ + "token": serializer_response[0], + "id": serializer_response[1], + "type": "confirm" + }) return response.Response(payload, 200) @@ -142,10 +145,10 @@ class PasswordResetConfirmView(APIView): """ Get and set new user password. """ def post(self, request, *args, **kwargs): - serializer = PasswordRecoveryConfirmSerializer(data=request.data) + serializer = serializers.PasswordRecoveryConfirmSerializer(data=request.data) try: serializer.is_valid(raise_exception=True) - except PasswordRequirementsFailure as e: + except serializers.PasswordRequirementsFailure as e: data = {"type": "password_requirement"} errors = [] for element in e.message_list: