gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
This commit is contained in:
146
core/apps/accounts/views/sms.py
Normal file
146
core/apps/accounts/views/sms.py
Normal file
@@ -0,0 +1,146 @@
|
||||
"""
|
||||
SMS configuration (eskiz.uz)
|
||||
"""
|
||||
|
||||
import typing
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework import permissions
|
||||
from rest_framework import request as rest_request
|
||||
from rest_framework import throttling, views
|
||||
|
||||
from core import enums, exceptions, services, utils
|
||||
from core.http import serializers
|
||||
from core.http import views as http_views
|
||||
from core.http.models import User
|
||||
|
||||
|
||||
class RegisterView(
|
||||
views.APIView, services.UserService, http_views.ApiResponse
|
||||
):
|
||||
"""
|
||||
Register new user
|
||||
"""
|
||||
|
||||
serializer_class = serializers.RegisterSerializer
|
||||
throttle_classes = [throttling.UserRateThrottle]
|
||||
|
||||
def post(self, request: rest_request.Request):
|
||||
ser = self.serializer_class(data=request.data)
|
||||
ser.is_valid(raise_exception=True)
|
||||
data = ser.data
|
||||
phone = data.get("phone")
|
||||
|
||||
# Create pending user
|
||||
self.create_user(
|
||||
phone,
|
||||
data.get("first_name"),
|
||||
data.get("last_name"),
|
||||
data.get("password"),
|
||||
)
|
||||
|
||||
# Send confirmation code for sms eskiz.uz
|
||||
self.send_confirmation(phone)
|
||||
return self.success(_(enums.Messages.SEND_MESSAGE) % {"phone": phone})
|
||||
|
||||
|
||||
class ConfirmView(views.APIView, services.UserService, http_views.ApiResponse):
|
||||
"""Confirm otp code"""
|
||||
|
||||
serializer_class = serializers.ConfirmSerializer
|
||||
|
||||
def post(self, request: rest_request.Request):
|
||||
ser = self.serializer_class(data=request.data)
|
||||
ser.is_valid(raise_exception=True)
|
||||
|
||||
data = ser.data
|
||||
phone, code = data.get("phone"), data.get("code")
|
||||
|
||||
try:
|
||||
# Check Sms confirmation otp code
|
||||
if services.SmsService.check_confirm(phone, code=code):
|
||||
# Create user
|
||||
token = self.validate_user(
|
||||
User.objects.filter(phone=phone).first()
|
||||
)
|
||||
return self.success(
|
||||
_(enums.Messages.OTP_CONFIRMED), token=token
|
||||
)
|
||||
except exceptions.SmsException as e:
|
||||
return utils.ResponseException(e)
|
||||
except Exception as e:
|
||||
return self.error(e)
|
||||
|
||||
|
||||
class ResetConfirmationCodeView(
|
||||
views.APIView, http_views.ApiResponse, services.UserService
|
||||
): # noqa
|
||||
"""
|
||||
Reset confirm otp code
|
||||
"""
|
||||
|
||||
serializer_class = serializers.ResetConfirmationSerializer
|
||||
|
||||
def post(self, request: rest_request.Request):
|
||||
ser = self.serializer_class(data=request.data)
|
||||
ser.is_valid(raise_exception=True)
|
||||
|
||||
data = ser.data
|
||||
code, phone, password = (
|
||||
data.get("code"),
|
||||
data.get("phone"),
|
||||
data.get("password"),
|
||||
) # noqa
|
||||
|
||||
try:
|
||||
res = services.SmsService.check_confirm(phone, code)
|
||||
if res:
|
||||
self.change_password(phone, password)
|
||||
return self.success(_(enums.Messages.CHANGED_PASSWORD))
|
||||
return self.error(_(enums.Messages.INVALID_OTP))
|
||||
except exceptions.SmsException as e:
|
||||
return self.error(e, error_code=enums.Codes.INVALID_OTP_ERROR)
|
||||
except Exception as e:
|
||||
return self.error(e)
|
||||
|
||||
|
||||
class ResendView(http_views.AbstractSendSms):
|
||||
"""
|
||||
Resend Otp Code
|
||||
"""
|
||||
|
||||
serializer_class = serializers.ResendSerializer
|
||||
|
||||
|
||||
class ResetPasswordView(http_views.AbstractSendSms):
|
||||
"""
|
||||
Reset user password
|
||||
"""
|
||||
|
||||
serializer_class: typing.Type[serializers.ResetPasswordSerializer] = (
|
||||
serializers.ResetPasswordSerializer
|
||||
) # noqa
|
||||
|
||||
|
||||
# class MeView(views.APIView, http_views.ApiResponse):
|
||||
# """
|
||||
# Get user information
|
||||
# """
|
||||
# permission_classes = [permissions.IsAuthenticated]
|
||||
#
|
||||
# def get(self, request: rest_request.Request):
|
||||
# user = request.user
|
||||
# serializer = serializers.UserSerializer(user, context={'request': request})
|
||||
# return self.success(data=serializer.data)
|
||||
|
||||
|
||||
class MeView(views.APIView, http_views.ApiResponse):
|
||||
"""
|
||||
Get user information
|
||||
"""
|
||||
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def get(self, request: rest_request.Request):
|
||||
user = request.user
|
||||
return self.success(data=serializers.UserSerializer(user).data)
|
||||
Reference in New Issue
Block a user