some changes in forgot password api

This commit is contained in:
abutalib-kiwi
2023-07-27 10:59:10 +05:30
parent a83e27b12a
commit c079f3ceca
5 changed files with 23 additions and 34 deletions

2
.gitignore vendored
View File

@ -21,4 +21,4 @@ static/*
__pycache__/ __pycache__/
*.env *.env
ve/* ve/*
celerybeat-schedule

View File

@ -88,7 +88,9 @@ ERROR_CODE = {
"2060": "Task does not exist or not in pending state", "2060": "Task does not exist or not in pending state",
"2061": "Please insert image or check the image is valid or not.", "2061": "Please insert image or check the image is valid or not.",
# email not null # email not null
"2062": "Please enter email address" "2062": "Please enter email address",
"2063": "Unauthorized access.",
"2064": "To change your password first request an OTP and get it verify then change your password."
} }
"""Success message code""" """Success message code"""
SUCCESS_CODE = { SUCCESS_CODE = {

Binary file not shown.

View File

@ -9,11 +9,11 @@ from rest_framework import serializers
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.conf import settings from django.conf import settings
from django.utils import timezone from django.utils import timezone
from rest_framework import status
from templated_email import send_templated_mail from templated_email import send_templated_mail
# local imports # local imports
from account.models import UserEmailOtp from account.models import UserEmailOtp
from base.constants import USER_TYPE
from base.messages import ERROR_CODE from base.messages import ERROR_CODE
from guardian.tasks import generate_otp from guardian.tasks import generate_otp
@ -35,11 +35,11 @@ class AdminOTPSerializer(serializers.ModelSerializer):
def validate(self, attrs): def validate(self, attrs):
""" used to validate the incoming data """ """ used to validate the incoming data """
user = USER.objects.filter(email=attrs['email']).first() user = USER.objects.filter(email=attrs.get('email')).first()
if not user: if not user:
raise serializers.ValidationError(ERROR_CODE['2004']) raise serializers.ValidationError(ERROR_CODE['2004'])
elif not user.is_superuser: elif not user.is_superuser:
raise serializers.ValidationError(ERROR_CODE['2036']) raise serializers.ValidationError(ERROR_CODE['2063'])
attrs.update({'user': user}) attrs.update({'user': user})
return attrs return attrs
@ -67,9 +67,11 @@ class AdminOTPSerializer(serializers.ModelSerializer):
user_data, created = UserEmailOtp.objects.get_or_create(email=email) user_data, created = UserEmailOtp.objects.get_or_create(email=email)
if created: if created:
user_data.expired_at = expiry user_data.expired_at = expiry
user_data.user_type = dict(USER_TYPE).get('3')
if user_data: if user_data:
user_data.otp = verification_code user_data.otp = verification_code
user_data.expired_at = expiry user_data.expired_at = expiry
user_data.user_type = dict(USER_TYPE).get('3')
user_data.save() user_data.save()
return user_data return user_data
@ -93,15 +95,12 @@ class AdminVerifyOTPSerializer(serializers.Serializer):
email = attrs.get('email') email = attrs.get('email')
otp = attrs.get('otp') otp = attrs.get('otp')
user = USER.objects.filter(email=attrs['email']).first()
if not user:
raise serializers.ValidationError(ERROR_CODE['2004'])
elif not user.is_superuser:
raise serializers.ValidationError(ERROR_CODE['2036'])
# fetch email otp object of the user # fetch email otp object of the user
user_otp_details = UserEmailOtp.objects.filter(email=email, otp=otp).last() user_otp_details = UserEmailOtp.objects.filter(email=email, otp=otp).last()
if not user_otp_details: if not user_otp_details:
raise serializers.ValidationError(ERROR_CODE['2008']) raise serializers.ValidationError(ERROR_CODE['2064'])
if user_otp_details.user_type != dict(USER_TYPE).get('3'):
raise serializers.ValidationError(ERROR_CODE['2063'])
if user_otp_details.expired_at.replace(tzinfo=None) < datetime.utcnow(): if user_otp_details.expired_at.replace(tzinfo=None) < datetime.utcnow():
raise serializers.ValidationError(ERROR_CODE['2029']) raise serializers.ValidationError(ERROR_CODE['2029'])
user_otp_details.is_verified = True user_otp_details.is_verified = True
@ -137,26 +136,12 @@ class AdminCreatePasswordSerializer(serializers.ModelSerializer):
if new_password != confirm_password: if new_password != confirm_password:
raise serializers.ValidationError('password do not match') raise serializers.ValidationError('password do not match')
user = USER.objects.filter(email=attrs['email']).first()
if not user:
raise serializers.ValidationError(ERROR_CODE['2004'])
elif not user.is_superuser:
raise serializers.ValidationError(ERROR_CODE['2036'])
user_otp_details = UserEmailOtp.objects.filter(email=email).last() user_otp_details = UserEmailOtp.objects.filter(email=email).last()
if not user_otp_details:
if user_otp_details and user_otp_details.is_verified: raise serializers.ValidationError(ERROR_CODE['2064'])
if user_otp_details.user_type != dict(USER_TYPE).get('3'):
raise serializers.ValidationError(ERROR_CODE['2063'])
if not user_otp_details.is_verified:
raise serializers.ValidationError(ERROR_CODE['2064'])
user_otp_details.delete() user_otp_details.delete()
attrs.update({'user': user})
return attrs return attrs
raise serializers.ValidationError(ERROR_CODE['2036'])
def create(self, validated_data):
"""
to create password
:return: user
"""
user = validated_data.get('user')
user.set_password(validated_data.get('password'))
user.save()
return user

View File

@ -53,5 +53,7 @@ class ForgotAndResetPasswordViewSet(GenericViewSet):
""" """
serializer = self.serializer_class(data=request.data) serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
serializer.save() user = USER.objects.filter(email=serializer.validated_data.get('email')).first()
user.set_password(serializer.validated_data.get('new_password'))
user.save()
return custom_response(SUCCESS_CODE['3007']) return custom_response(SUCCESS_CODE['3007'])