From 9db620d8186985344cfeda40bac4a6ffaa681d22 Mon Sep 17 00:00:00 2001 From: jain Date: Mon, 26 Jun 2023 10:38:49 +0530 Subject: [PATCH] forgot, reset and change password --- zod_bank/account/serializers.py | 28 ++++++++++++++++++- .../email_reset_verification.email | 2 +- zod_bank/account/urls.py | 5 ++-- zod_bank/account/views.py | 23 +++++++++++---- zod_bank/base/messages.py | 2 +- zod_bank/guardian/urls.py | 2 +- zod_bank/junior/urls.py | 2 +- 7 files changed, 51 insertions(+), 13 deletions(-) diff --git a/zod_bank/account/serializers.py b/zod_bank/account/serializers.py index f70f084..94c774f 100644 --- a/zod_bank/account/serializers.py +++ b/zod_bank/account/serializers.py @@ -36,8 +36,34 @@ class ResetPasswordSerializer(serializers.Serializer): user_details.set_password(password) user_details.save() return {'password':password} - return user_opt_details + return user_opt_details + return '' +class ChangePasswordSerializer(serializers.Serializer): + """Update Password after verification""" + current_password = serializers.CharField(max_length=100) + new_password = serializers.CharField(required=True) + class Meta(object): + """Meta info""" + model = User + + def validate_current_password(self, value): + user = self.context + if self.context.password not in ('', None): + if user.check_password(value): + return value + raise serializers.ValidationError({"error":"Invalid Current password"}) + def create(self, validated_data): + new_password = validated_data.pop('new_password') + user_details = User.objects.filter(email=self.context).last() + print("user_details==>", user_details) + if user_details: + print("333333333==>",user_details.password) + user_details.set_password(new_password) + user_details.save() + return {'password':new_password} + return user_details + return '' diff --git a/zod_bank/account/templates/templated_email/email_reset_verification.email b/zod_bank/account/templates/templated_email/email_reset_verification.email index 0138d99..e2f8ebf 100644 --- a/zod_bank/account/templates/templated_email/email_reset_verification.email +++ b/zod_bank/account/templates/templated_email/email_reset_verification.email @@ -1,7 +1,7 @@ {% extends "templated_email/email_base.email" %} {% block subject %} - Reset Password Verification + Password Reset Verification Code {% endblock %} {% block plain %} diff --git a/zod_bank/account/urls.py b/zod_bank/account/urls.py index 0b3ddb5..3c1fc2c 100644 --- a/zod_bank/account/urls.py +++ b/zod_bank/account/urls.py @@ -5,7 +5,7 @@ from rest_framework.decorators import api_view """Third party import""" from rest_framework import routers from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp, - ForgotPasswordAPIView, ResetPasswordAPIView) + ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView) """Router""" router = routers.SimpleRouter() @@ -20,5 +20,6 @@ router.register('resend-email-otp', ReSendEmailOtp, basename='resend-email-otp') urlpatterns = [ path('api/v1/', include(router.urls)), path('api/v1/forgot-password/', ForgotPasswordAPIView.as_view()), - path('api/v1/reset-password/', ResetPasswordAPIView.as_view()) + path('api/v1/reset-password/', ResetPasswordAPIView.as_view()), + path('api/v1/change-password/', ChangePasswordAPIView.as_view()) ] diff --git a/zod_bank/account/views.py b/zod_bank/account/views.py index 321b200..82039b9 100644 --- a/zod_bank/account/views.py +++ b/zod_bank/account/views.py @@ -7,21 +7,34 @@ from junior.models import Junior from account.models import UserProfile, UserPhoneOtp, UserEmailOtp from django.contrib.auth.models import User from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer, - ForgotPasswordSerializer, ResetPasswordSerializer) + ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer) from django.views.decorators.csrf import csrf_exempt from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from rest_framework_simplejwt.views import TokenObtainPairView from rest_framework_simplejwt.tokens import RefreshToken from base.messages import ERROR_CODE, SUCCESS_CODE from guardian.tasks import generate_otp - +from django.conf import settings from account.utils import custom_response, custom_error_response from django.core.mail import EmailMessage from django.core.mail import send_mail from rest_framework.response import Response +from rest_framework.permissions import IsAuthenticated from templated_email import send_templated_mail import secrets + +class ChangePasswordAPIView(views.APIView): + permission_classes = [IsAuthenticated] + def post(self, request): + print("request.data====>",request.data) + print("request.user====>", request.user) + serializer = ChangePasswordSerializer(context=request.user, data=request.data) + if serializer.is_valid(): + serializer.save() + return custom_response(SUCCESS_CODE['3006'], response_status=status.HTTP_200_OK) + return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST) + class ResetPasswordAPIView(views.APIView): def post(self, request): print("request.data====>",request.data) @@ -42,9 +55,7 @@ class ForgotPasswordAPIView(views.APIView): return custom_error_response(ERROR_CODE['2004'], response_status=status.HTTP_404_NOT_FOUND) verification_code = ''.join([str(random.randrange(9)) for _ in range(6)]) # Send the verification code to the user's email - subject = 'Password Reset Verification Code' - message = f'Your verification code is: {verification_code}' - from_email = 'infozodbank@gmail.com' + from_email = settings.EMAIL_HOST_USER recipient_list = [email] send_templated_mail( template_name='email_reset_verification.email', @@ -102,7 +113,7 @@ class UserLogin(viewsets.ViewSet): serializer = JuniorSerializer(junior_data) if user.is_superuser: serializer = SuperUserSerializer(user) - return custom_response(None, serializer.data, response_status=status.HTTP_200_OK) + return custom_response(SUCCESS_CODE['3003'], serializer.data, response_status=status.HTTP_200_OK) else: return custom_error_response(ERROR_CODE["2002"], response_status=status.HTTP_401_UNAUTHORIZED) except Exception as e: diff --git a/zod_bank/base/messages.py b/zod_bank/base/messages.py index 953d761..39f0282 100644 --- a/zod_bank/base/messages.py +++ b/zod_bank/base/messages.py @@ -55,7 +55,7 @@ SUCCESS_CODE = { # Success code for Thank you "3002": "Thank you for contacting us! Our Consumer Experience Team will reach out to you shortly.", # Success code for account activation - "3003": "Your account has been activated.", + "3003": "Log in successfully", # Success code for password reset "3004": "Password reset link has been sent to your email address", # Success code for link verified diff --git a/zod_bank/guardian/urls.py b/zod_bank/guardian/urls.py index 64aa80f..0e3f898 100644 --- a/zod_bank/guardian/urls.py +++ b/zod_bank/guardian/urls.py @@ -11,7 +11,7 @@ router = routers.SimpleRouter() """API End points with router""" router.register('sign-up', SignupViewset, basename='sign-up') -router.register('update-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile') +router.register('complete-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile') urlpatterns = [ path('api/v1/', include(router.urls)), ] diff --git a/zod_bank/junior/urls.py b/zod_bank/junior/urls.py index cce385d..27a312e 100644 --- a/zod_bank/junior/urls.py +++ b/zod_bank/junior/urls.py @@ -10,7 +10,7 @@ from rest_framework import routers router = routers.SimpleRouter() """API End points with router""" -router.register('profile-update', UpdateJuniorProfile, basename='profile-update') +router.register('complete-junior-profile', UpdateJuniorProfile, basename='profile-update') router.register('validate-guardian-code', ValidateGuardianCode, basename='validate-guardian-code') urlpatterns = [ path('api/v1/', include(router.urls)),