from datetime import datetime, timedelta from django.contrib.auth import get_user_model from django.shortcuts import render from rest_framework.views import APIView from rest_framework import serializers from apps.user_auth.auth_service import SMSAuth from rest_framework.response import Response from apps.user_auth.models import SmsOtp as SmsOtpModel from apps.user_auth.services import send_otp_code, sms_auth, login_by_user_pass from apps.user_auth.token_service import get_refresh_token from rest_framework import status from rest_framework import exceptions CUserModel = get_user_model() class MojriByMobileApiView(APIView): class InputSerializer(serializers.Serializer): mobile = serializers.IntegerField() def post(self, request): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) user_mobile = serializer.validated_data.get('mobile', None) send_otp_code(user_mobile=user_mobile) return Response({'status': 'otp code send'}, status=status.HTTP_200_OK) class MojriMobileVerificationApiView(APIView): class InputSerializer(serializers.Serializer): mobile = serializers.IntegerField() otp_code = serializers.IntegerField() def post(self, request): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) token = sms_auth(**serializer.validated_data) return Response(token) class LoginAdmin(APIView): class InputSerializers(serializers.Serializer): username = serializers.CharField(required=True) password = serializers.CharField(required=True) def post(self, request): serializer = self.InputSerializers(data=request.data) serializer.is_valid(raise_exception=True) token = login_by_user_pass(**serializer.validated_data) return Response(token, status=status.HTTP_200_OK) class CustomRefreshToken(APIView): class InputSerializer(serializers.Serializer): refresh = serializers.CharField() def post(self, request): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) ref_token = serializer.validated_data.get('refresh') token = get_refresh_token(ref_token=ref_token) return Response(token)