def register_user(request: Request, ) -> Response: """ Register new user. :param request: contains e-mail and password. :return: response whether request is successful. """ email: str = request.data.get("email") email = BaseUserManager.normalize_email(email).lower() phone_number: str = request.data.get("phone_number", "") password: str = request.data.get("password") if not email or not password: return Response( data={"message": "No email or password provided."}, status=HTTP_400_BAD_REQUEST, ) if Profile.exists(email): return Response( data={"message": "User with such email already exists."}, status=HTTP_400_BAD_REQUEST, ) user = Profile.register( email=email, password=password, ) queue = get_according_notification_queue( prefix="sms" if phone_number else "email", ) body = make_confirmation_message( view=confirm_registration, confirmation_token=RefreshToken.for_user(user), ) message_queue_provider.send_confirmation( queue=queue, recipient=phone_number if phone_number else email, subject="Registration confirmation", body=body, ) device = "phone" if phone_number else "email address" return Response( data={ "message": f"User created successfully, " f"check your {device} for confirmation link.", }, status=HTTP_200_OK, )
def register_admin(request: Request, ) -> Response: """ Register new admin. :param request: contains email and password with admin token in header. :return: response whether request is successful. """ token_from_request = request.META.get("HTTP_AUTHORIZATION", "").split("Bearer ")[-1] try: token = AccessToken(token_from_request) profile = Profile.objects.get(user_id=token["id"]) if profile.role != Admin: raise PermissionError except (TokenError, PermissionError): return Response( data={ "message": "Invalid credentials.", }, status=HTTP_401_UNAUTHORIZED, ) email: str = request.data.get("email") email = BaseUserManager.normalize_email(email).lower() password: str = request.data.get("password") if not email or not password: return Response( data={"message": "No email or password provided."}, status=HTTP_400_BAD_REQUEST, ) if Profile.exists(email): return Response( data={"message": "User with such email already exists."}, status=HTTP_400_BAD_REQUEST, ) Profile.register( email=email, password=password, role=Admin, is_active=True, ) return Response( data={ "message": "Admin created successfully.", }, status=HTTP_201_CREATED, )