diff --git a/account/serializers.py b/account/serializers.py index 70808f3..9380ba8 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -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 diff --git a/account/urls.py b/account/urls.py index e0e1c6c..74098c2 100644 --- a/account/urls.py +++ b/account/urls.py @@ -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 = [ diff --git a/account/views.py b/account/views.py index f992a05..3c006d7 100644 --- a/account/views.py +++ b/account/views.py @@ -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) diff --git a/base/messages.py b/base/messages.py index dc6392a..f024a3d 100644 --- a/base/messages.py +++ b/base/messages.py @@ -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 diff --git a/guardian/views.py b/guardian/views.py index 900734e..6b7bf9b 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -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},