Exemplo n.º 1
0
    def resend_otp(self, request):
        """
        Resend OTP if user has already tried once.

        responseMessages:
            - code: 400
              message: 'No User with this Phone Number'
            - code: 500
              message: 'SMS sending/ OTP processing failed.'
            - code: 200
              message: 'OTP Sent'
            - code: 400
              message: Input errors.

        """
        serializer = userSerializer.PhoneNumberSerializer(data=request.data)
        if serializer.is_valid():
            data = serializer.validated_data
            user = userManager.find_matching_users_by_phone(data.get('phone'))

            if not user or not user.is_active:
                return Response({'status': 'No User with this Phone Number'},
                                status=status.HTTP_400_BAD_REQUEST)
            if user.send_auth_code(user.phone):
                return Response({'status': 'OTP Sent'})
            else:
                return Response(
                    {'status': 'SMS sending/ OTP processing failed.'},
                    status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 2
0
 def delete_testing_user(self, request):
     phone = request.data.get('phone', '9740176267')
     if phone in ['9740176267', '9886452736']:
         user = userManager.find_matching_users_by_phone(phone)
         if user:
             user.phone = None
             user.is_active = False
             user.save()
             return Response({'message': 'User deleted from system'})
     return Response({'message': 'No user with testing phone number.'})
Exemplo n.º 3
0
 def validate_auth_code(self, request):
     """
         validate auth code.
     """
     new_user = request.user
     serializer = userSerializer.ValidateAuthCodeSerializer(
         data=request.data)
     if serializer.is_valid():
         data = serializer.validated_data
         existing_user = userManager.find_matching_users_by_phone(
             data.get('phone'))
         if existing_user and existing_user.is_active:
             if existing_user.validate_auth_code(data.get('auth_code')):
                 if not new_user.is_anonymous(
                 ) and existing_user != new_user:
                     userManager.merge_new_user_to_existing(
                         existing_user, new_user)
                 if existing_user.email and not existing_user.is_email_verified:
                     existing_user.send_verification_email(request)
                 # If there is event code - add incentive
                 if data.get('event_code'):
                     event_code = data.get('event_code')
                     incentive_data = {
                         "name": event_code,
                         "entity": UserVendorCash.ENTITY_USER,
                         "entity_id": existing_user.id,
                         "promise_info": "Remarketing for login/signup",
                         "user": existing_user,
                         "promise_and_transfer": True
                     }
                     userManager.handle_incentive_events(incentive_data)
                 return Response({
                     'token':
                     existing_user.get_jwt_token(),
                     'user':
                     userSerializer.UserSerializer(
                         existing_user, remove_fields=['referral']).data,
                     'status':
                     'OTP is Valid'
                 })
             else:
                 return Response({'status': 'OTP is In-correct.'},
                                 status=status.HTTP_400_BAD_REQUEST)
         else:
             return Response({'detail': "User account is disabled."},
                             status=status.HTTP_401_UNAUTHORIZED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 4
0
    def chat_inquiry(self, request):
        """
            Create User Inquiry from Chat - This has to be done without authentication.
        """
        user_inquiry_serializer = userSerializer.UserInquirySerializer(
            data=request.data)
        user_detail_serializer = userSerializer.ChatUserSerializer(
            data=request.data)
        if user_inquiry_serializer.is_valid(
        ) and user_detail_serializer.is_valid():
            inquiry_data = user_inquiry_serializer.validated_data
            user = None
            if not inquiry_data.get('user'):
                user_detail = user_detail_serializer.validated_data
                if not user_detail.get('phone') and not user_detail.get(
                        'email'):
                    # send email to our team about this chat
                    logger.error(
                        'No phone and email for this chat inquiry: %s',
                        inquiry_data)
                    return Response(
                        {'detail': 'No phone and email for this chat inquiry'})
                else:
                    user = None
                    if user_detail.get('phone'):
                        user = userManager.find_matching_users_by_phone(
                            user_detail.get('phone'))
                    if not user:
                        if request.META.get('HTTP_SOURCE'):
                            user_detail['source'] = Source.objects.filter(
                                source=self.request.META.get(
                                    'HTTP_SOURCE')).first()
                        user_detail.update({
                            'city_id':
                            inquiry_data.get('city').id
                            if inquiry_data.get('city') else None
                        })
                        user = userManager.create_user(user_detail)

            user_inquiry_serializer.save(user=user)
            return Response({"detail": "Chat Inquiry Created."},
                            status=status.HTTP_201_CREATED)
        else:
            return Response({"errors": user_inquiry_serializer.errors},
                            status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 5
0
 def send_login_code(self, request):
     serializer = userSerializer.PhoneNumberSerializer(data=request.data)
     if serializer.is_valid():
         data = serializer.validated_data
         user = userManager.find_matching_users_by_phone(data.get('phone'))
         if not user or not user.is_active:
             return Response({'status': 'No User with this Phone Number'},
                             status=status.HTTP_400_BAD_REQUEST)
         # if not user.is_otp_validated:
         #     return Response({'status': 'No User with this Phone Number'}, status=status.HTTP_400_BAD_REQUEST)
         if user.send_auth_code(user.phone, send_email=True):
             if data.get('is_scratch_finder'):
                 if not user.groups.filter(name='ScratchFinder').exists():
                     g = Group.objects.filter(name='ScratchFinder').first()
                     if g:
                         g.user_set.add(user)
             return Response({'status': 'OTP Sent'})
         else:
             return Response(
                 {'status': 'SMS sending/ OTP processing failed.'},
                 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 6
0
 def create_user_from_ops(self, request):
     """
         Create User from Ops (for web signups and iOS users) or some exception cases
     """
     if self.request.user.groups.filter(name='OpsUser').exists():
         serializer = userSerializer.UserSerializer(data=request.data)
         if serializer.is_valid():
             data = serializer.validated_data
             existing_user = None
             if data.get('phone'):
                 existing_user = userManager.find_matching_users_by_phone(
                     data.get('phone'))
             if existing_user:
                 if existing_user.is_otp_validated:
                     return Response(
                         {
                             'status':
                             'User already exists. Please login.',
                             'user':
                             userSerializer.UserSerializer(
                                 existing_user).data
                         },
                         status=status.HTTP_400_BAD_REQUEST)
                 else:
                     return Response(
                         {
                             'status':
                             'User already exists. OTP not validated. Please signup.',
                             'user':
                             userSerializer.UserSerializer(
                                 existing_user).data
                         },
                         status=status.HTTP_400_BAD_REQUEST)
             else:
                 data.update({
                     'city_id':
                     data.get('city').id if data.get('city') else None
                 })
                 user = userManager.create_user(data)
                 return Response(
                     {
                         'status': 'User Created',
                         'user': userSerializer.UserSerializer(user).data
                     },
                     status=status.HTTP_200_OK)
         else:
             if serializer.errors.has_key('phone'):
                 existing_user = userManager.find_matching_users_by_phone(
                     request.data.get('phone'))
                 if existing_user:
                     return Response(
                         {
                             "errors":
                             serializer.errors,
                             "user":
                             userSerializer.UserSerializer(
                                 existing_user).data
                         },
                         status=status.HTTP_409_CONFLICT)
             return Response({"errors": serializer.errors},
                             status=status.HTTP_400_BAD_REQUEST)
     else:
         return Response({"detail": "Not Found"},
                         status=status.HTTP_403_FORBIDDEN)
Exemplo n.º 7
0
    def send_signup_code(self, request):
        """
        Send signup code when user signs up.

        responseMessages:
            - code: 400
              message: 'Different User already exists with this phone. Please login to that.'
            - code: 500
              message: 'SMS sending/ OTP processing failed.'
            - code: 400
              message: 'User already exists. Please login.'
            - code: 400
              message: Input errors.
        """
        serializer = userSerializer.SendAuthCodeSerializer(data=request.data)
        if serializer.is_valid():
            data = serializer.validated_data
            user = request.user
            if data.get('is_scratch_finder'):
                data['group_name'] = "ScratchFinder"
            if not user.is_anonymous():
                if user.phone != data.get('phone'):
                    exists_user_by_phone = userManager.find_matching_users_by_phone(
                        data.get('phone'))
                    if exists_user_by_phone and not exists_user_by_phone.is_active:
                        return Response(
                            {
                                'status':
                                'Different User already exists with this phone but is inactive. '
                                'Please contact Bumper customer care.'
                            },
                            status=status.HTTP_400_BAD_REQUEST)
                    if exists_user_by_phone and exists_user_by_phone != user:
                        if exists_user_by_phone.is_otp_validated:
                            return Response(
                                {
                                    'status':
                                    'Different User already exists with this phone. Please login to that.'
                                },
                                status=status.HTTP_400_BAD_REQUEST)
                        else:
                            user = exists_user_by_phone

                # TODO check whether this is correct in overall process. ie replacing the number if already exists.
                create_rc = False  # Do we need to create referral code or not
                if not user.phone or user.phone != data.get('phone'):
                    user.phone = data.get('phone')
                    create_rc = True

                user.name = data.get('name')
                user.email = data.get('email')
                if data.get('city'):
                    user.city = data.get('city')
                user.save()
                # create user device
                user.save_user_device(data)
                if create_rc:
                    user.create_referral_code()
                    userManager.handle_referral_code(user, data)

                if user.send_auth_code(user.phone):
                    return Response({"user_id": user.id, 'status': 'OTP Sent'})
                else:
                    return Response(
                        {'status': 'SMS sending/ OTP processing failed.'},
                        status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            else:
                # Check for existing User
                #only phone number
                matching_user = userManager.find_matching_users_by_phone(
                    data.get('phone'))
                if matching_user:
                    # check if user exists with email or phone
                    #if matching_user.email == data.get('email') and not matching_user.phone:
                    if not matching_user.is_otp_validated:
                        # if not phone number then just update number and move ahead.
                        matching_user.phone = data.get('phone')
                        matching_user.name = data.get('name')
                        matching_user.email = data.get('email')
                        if data.get('city'):
                            matching_user.city = data.get('city')
                        matching_user.save()
                        user = matching_user
                    else:
                        return Response(
                            {'status': 'User already exists. Please login.'},
                            status=status.HTTP_400_BAD_REQUEST)
                else:
                    # Create user if not there
                    data.update({
                        'city_id':
                        data.get('city').id if data.get('city') else None
                    })
                    source_str = data.get('source') or self.request.META.get(
                        'HTTP_SOURCE')
                    source = Source.objects.filter(source=source_str).first()
                    data.update({'source': source})
                    user = userManager.create_user(data)
                    userManager.handle_referral_code(user, data)

                # create user device
                user.save_user_device(data)

                # Send OTP
                if user.send_auth_code(user.phone):
                    # return Response({'token': token.key, 'status': 'OTP Sent'}, status=status.HTTP_200_OK)
                    return Response({'status': 'OTP Sent'},
                                    status=status.HTTP_200_OK)
                else:
                    return Response(
                        {'status': 'SMS sending/ OTP processing failed.'},
                        status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)