jira-15 and email otp validation

This commit is contained in:
jain
2023-07-06 15:52:30 +05:30
parent cf966a5250
commit 2edd8c4e00
5 changed files with 43 additions and 6 deletions

View File

@ -135,7 +135,10 @@ class GuardianSerializer(serializers.ModelSerializer):
def get_user_type(self, obj): def get_user_type(self, obj):
"""user type""" """user type"""
return GUARDIAN email_verified = UserEmailOtp.objects.filter(email=obj.user.username).last()
if email_verified and email_verified.user_type != None:
return email_verified.user_type
return '2'
def get_auth(self, obj): def get_auth(self, obj):
"""user email address""" """user email address"""
@ -172,7 +175,10 @@ class JuniorSerializer(serializers.ModelSerializer):
return access_token return access_token
def get_user_type(self, obj): def get_user_type(self, obj):
return JUNIOR email_verified = UserEmailOtp.objects.filter(email=obj.auth.username).last()
if email_verified and email_verified.user_type != None:
return email_verified.user_type
return '1'
def get_auth(self, obj): def get_auth(self, obj):
return obj.auth.username return obj.auth.username

View File

@ -14,8 +14,8 @@ router = routers.SimpleRouter()
router.register('user', UserLogin, basename='user') router.register('user', UserLogin, basename='user')
router.register('admin', UserLogin, basename='admin') router.register('admin', UserLogin, basename='admin')
router.register('google-login', GoogleLoginViewSet, basename='admin') router.register('google-login', GoogleLoginViewSet, basename='admin')
router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp') # router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp')
router.register('user-phone-verification', UserPhoneVerification, basename='user-phone-verification') # router.register('user-phone-verification', UserPhoneVerification, basename='user-phone-verification')
router.register('user-email-verification', UserEmailVerification, basename='user-email-verification') router.register('user-email-verification', UserEmailVerification, basename='user-email-verification')
router.register('resend-email-otp', ReSendEmailOtp, basename='resend-email-otp') router.register('resend-email-otp', ReSendEmailOtp, basename='resend-email-otp')
urlpatterns = [ urlpatterns = [

View File

@ -1,3 +1,5 @@
from datetime import datetime, timedelta
from rest_framework import viewsets, status, views from rest_framework import viewsets, status, views
from rest_framework.decorators import action from rest_framework.decorators import action
import random import random
@ -182,9 +184,16 @@ class ForgotPasswordAPIView(views.APIView):
'verification_code': verification_code 'verification_code': verification_code
} }
) )
expiry = datetime.today() + timedelta(days=1)
print("expiry===>", expiry, '===>', type(expiry))
user_data, created = UserEmailOtp.objects.get_or_create(email=email) user_data, created = UserEmailOtp.objects.get_or_create(email=email)
if created:
user_data.expired_at = expiry
user_data.save()
if user_data: if user_data:
user_data.otp = verification_code user_data.otp = verification_code
user_data.expired_at = expiry
user_data.save() user_data.save()
return custom_response(SUCCESS_CODE['3015'], return custom_response(SUCCESS_CODE['3015'],
response_status=status.HTTP_200_OK) response_status=status.HTTP_200_OK)
@ -246,6 +255,7 @@ class UserLogin(viewsets.ViewSet):
email_verified = UserEmailOtp.objects.filter(email=username).last() email_verified = UserEmailOtp.objects.filter(email=username).last()
refresh = RefreshToken.for_user(user) refresh = RefreshToken.for_user(user)
access_token = str(refresh.access_token) access_token = str(refresh.access_token)
print("email_verified.user_type==>",email_verified.user_type)
data = {"auth_token":access_token, "is_profile_complete": False, data = {"auth_token":access_token, "is_profile_complete": False,
"user_type": email_verified.user_type, "user_type": email_verified.user_type,
} }
@ -292,6 +302,15 @@ class UserEmailVerification(viewsets.ModelViewSet):
email_data = UserEmailOtp.objects.filter(email=self.request.GET.get('email'), email_data = UserEmailOtp.objects.filter(email=self.request.GET.get('email'),
otp=self.request.GET.get('otp')).last() otp=self.request.GET.get('otp')).last()
if email_data: if email_data:
input_datetime_str = str(email_data.expired_at)
input_format = "%Y-%m-%d %H:%M:%S.%f%z"
output_format = "%Y-%m-%d %H:%M:%S.%f"
input_datetime = datetime.strptime(input_datetime_str, input_format)
output_datetime_str = input_datetime.strftime(output_format)
format_str = "%Y-%m-%d %H:%M:%S.%f"
datetime_obj = datetime.strptime(output_datetime_str, format_str)
if datetime.today() > datetime_obj:
return custom_error_response(ERROR_CODE["2029"], response_status=status.HTTP_400_BAD_REQUEST)
email_data.is_verified = True email_data.is_verified = True
email_data.save() email_data.save()
if email_data.user_type == '1': if email_data.user_type == '1':
@ -315,12 +334,19 @@ class UserEmailVerification(viewsets.ModelViewSet):
class ReSendEmailOtp(viewsets.ModelViewSet): class ReSendEmailOtp(viewsets.ModelViewSet):
"""Send otp on phone""" """Send otp on phone"""
serializer_class = EmailVerificationSerializer
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
otp = generate_otp() otp = generate_otp()
if User.objects.filter(email=request.data['email']): if User.objects.filter(email=request.data['email']):
expiry = datetime.today() + timedelta(days=1)
print("expiry===>", expiry, '===>', type(expiry))
email_data, created = UserEmailOtp.objects.get_or_create(email=request.data['email']) email_data, created = UserEmailOtp.objects.get_or_create(email=request.data['email'])
if created:
email_data.expired_at = expiry
email_data.save()
if email_data: if email_data:
email_data.otp = otp email_data.otp = otp
email_data.expired_at = expiry
email_data.save() email_data.save()
send_otp_email(request.data['email'], otp) send_otp_email(request.data['email'], otp)
return custom_response(SUCCESS_CODE['3016'], response_status=status.HTTP_200_OK) return custom_response(SUCCESS_CODE['3016'], response_status=status.HTTP_200_OK)

View File

@ -51,7 +51,8 @@ ERROR_CODE = {
"2025": "Invalid input. Expected a list of strings.", "2025": "Invalid input. Expected a list of strings.",
"2026": "New password should not same as old password", "2026": "New password should not same as old password",
"2027": "data should contain `identityToken`", "2027": "data should contain `identityToken`",
"2028": "You are not authorized person to sign up on this platform" "2028": "You are not authorized person to sign up on this platform",
"2029": "Validity of otp verification is expired"
} }
SUCCESS_CODE = { SUCCESS_CODE = {
# Success code for password # Success code for password

View File

@ -4,6 +4,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets, status from rest_framework import viewsets, status
from rest_framework.pagination import PageNumberPagination from rest_framework.pagination import PageNumberPagination
from django.db.models import Max from django.db.models import Max
from datetime import datetime, timedelta
"""Import Django app""" """Import Django app"""
from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer, from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer,
TopJuniorSerializer) TopJuniorSerializer)
@ -30,7 +31,10 @@ class SignupViewset(viewsets.ModelViewSet):
serializer.save() serializer.save()
"""Generate otp""" """Generate otp"""
otp = generate_otp() otp = generate_otp()
UserEmailOtp.objects.create(email=request.data['email'], otp=otp, user_type=str(request.data['user_type'])) expiry = datetime.today() + timedelta(days=1)
print("expiry===>", expiry, '===>', type(expiry))
UserEmailOtp.objects.create(email=request.data['email'], otp=otp,
user_type=str(request.data['user_type']), expired_at=expiry)
"""Send email to the register user""" """Send email to the register user"""
send_otp_email(request.data['email'], otp) send_otp_email(request.data['email'], otp)
return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp}, return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp},