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):
"""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):
"""user email address"""
@ -172,7 +175,10 @@ class JuniorSerializer(serializers.ModelSerializer):
return access_token
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):
return obj.auth.username

View File

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

View File

@ -1,3 +1,5 @@
from datetime import datetime, timedelta
from rest_framework import viewsets, status, views
from rest_framework.decorators import action
import random
@ -182,9 +184,16 @@ class ForgotPasswordAPIView(views.APIView):
'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)
if created:
user_data.expired_at = expiry
user_data.save()
if user_data:
user_data.otp = verification_code
user_data.expired_at = expiry
user_data.save()
return custom_response(SUCCESS_CODE['3015'],
response_status=status.HTTP_200_OK)
@ -246,6 +255,7 @@ class UserLogin(viewsets.ViewSet):
email_verified = UserEmailOtp.objects.filter(email=username).last()
refresh = RefreshToken.for_user(user)
access_token = str(refresh.access_token)
print("email_verified.user_type==>",email_verified.user_type)
data = {"auth_token":access_token, "is_profile_complete": False,
"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'),
otp=self.request.GET.get('otp')).last()
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.save()
if email_data.user_type == '1':
@ -315,12 +334,19 @@ class UserEmailVerification(viewsets.ModelViewSet):
class ReSendEmailOtp(viewsets.ModelViewSet):
"""Send otp on phone"""
serializer_class = EmailVerificationSerializer
def create(self, request, *args, **kwargs):
otp = generate_otp()
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'])
if created:
email_data.expired_at = expiry
email_data.save()
if email_data:
email_data.otp = otp
email_data.expired_at = expiry
email_data.save()
send_otp_email(request.data['email'], otp)
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.",
"2026": "New password should not same as old password",
"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 for password

View File

@ -4,6 +4,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets, status
from rest_framework.pagination import PageNumberPagination
from django.db.models import Max
from datetime import datetime, timedelta
"""Import Django app"""
from .serializers import (UserSerializer, CreateGuardianSerializer, TaskSerializer, TaskDetailsSerializer,
TopJuniorSerializer)
@ -30,7 +31,10 @@ class SignupViewset(viewsets.ModelViewSet):
serializer.save()
"""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_otp_email(request.data['email'], otp)
return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp},