def generate_otp(request):
    if request.method == 'POST':
        try:
            username = request.POST['username']
            user = User.objects.get(username=username)
            phone_number = ''
            user_profile_obj = models.UserProfile.objects.filter(user=user)
            if user_profile_obj:
                phone_number = user_profile_obj[0].phone_number
                logger.info('OTP request received . username: {0}'.format(username))
                token = otp_handler.get_otp(user=user)
                message = get_template('SEND_OTP').format(token)
                send_job_to_queue(send_otp, {'phone_number': phone_number, 'message': message,
                                         'sms_client': settings.SMS_CLIENT})
                logger.info('OTP sent to mobile {0}'.format(phone_number))
#             #Send email if email address exist
            if user.email:
                sent_otp_email(data=token, receiver=user.email, subject='Forgot Password')
        
            return HttpResponseRedirect('/aftersell/users/otp/validate?username='******'Invalid details, mobile {0}'.format(ex))
            return HttpResponseRedirect('/aftersell/users/otp/generate?details=invalid')    
    
    elif request.method == 'GET':
        return render(request, 'portal/get_otp.html')
    def sent_otp_user_phone_number(self, request, **kwargs):
        '''
        Send OTP to user's phone on successfull registration
        Args : phone number
        Returns : OTP is sent to user's phone number
        '''
        if request.method != 'POST':
            return HttpResponse(json.dumps({"message":"method not allowed"}), content_type="application/json",status=401)
        try:
            load = json.loads(request.body)
        except:
            return HttpResponse(content_type="application/json", status=404)
        phone_number = load.get('phone_number')
        if not phone_number:
            return HttpBadRequest("phone_number is required.")
        try:
            otp = otp_handler.get_otp(phone_number=phone_number)
            message = afterbuy_utils.get_template('SEND_OTP').format(otp)
            send_job_to_queue(send_otp, {'phone_number':phone_number, 'message':message, 'sms_client':settings.SMS_CLIENT})
            logger.info('OTP sent to mobile {0}'.format(phone_number))
            data = {'status': 1, 'message': "OTP sent_successfully"}

        except Exception as ex:
            logger.error('Invalid details, mobile {0} and exception {1}'.format(request.POST.get('phone_number', ''),ex))
            data = {'status': 0, 'message': ex}
        return HttpResponse(json.dumps(data), content_type="application/json")
 def user_registration_phone(self, request, **kwargs):
     '''
     Register user with valid phone number
     Args : phone number
     Returns : OTP is sent to user's phone on successful registration
     
     '''
     if request.method != 'POST':
         return HttpResponse(json.dumps({"message":"method not allowed"}), content_type="application/json",status=401)
     try:
         load = json.loads(request.body)
     except:
         return HttpResponse(content_type="application/json", status=404)
     phone_number = load.get('phone_number')
     if not phone_number:
         return HttpBadRequest("Enter phone number")
     try:
         consumer_obj = get_model('Consumer', settings.BRAND).objects.get(phone_number=phone_number,
                                                                          user__is_active=True)
         data = {'status': 1, 'message': 'phone number already registered'}
     except Exception as ObjectDoesNotExist:
         logger.info('Exception while registering user - {0}'.format(phone_number))
         try:
             user_obj = self.create_user(True, phone_number=phone_number)
             consumer_obj = user_obj['consumer_obj']
             data = {'status':1, 'message': 'Phone number registered successfully'}
         except Exception as ex:
             logger.info("Exception while registering user with phone number - {0}".format(ex))
             return HttpBadRequest("Phone number could not be registered")
     try:
         otp = otp_handler.get_otp(phone_number=phone_number)
         message = afterbuy_utils.get_template('SEND_OTP').format(otp)
         send_job_to_queue(send_otp, {'phone_number': phone_number,
                                          'message': message,'sms_client': settings.SMS_CLIENT})
         consumer_obj.is_phone_verified = False
         consumer_obj.save()
         logger.info('OTP sent to mobile {0}'.format(phone_number))
         return HttpResponse(json.dumps(data), content_type="application/json")
     except Exception as ex:
         logger.info('Exception while generating OTP - {0}'.format(ex))
         return HttpBadRequest("OTP could not be generated")
 def authenticate_user_send_otp(self, request, **kwargs):
     if request.method != 'POST':
         return HttpResponse(json.dumps({"message":"method not allowed"}), content_type="application/json",status=401)
     try:
         load = json.loads(request.body)
     except:
         return HttpResponse(content_type="application/json", status=404)
     email = load.get('email_id')
     phone_number = load.get('phone_number')
     if not phone_number and not email:
         return HttpBadRequest("phone_number or email is required")
     try:
         if phone_number:
             phone_number = format_phone_number(phone_number)
             logger.info('OTP request received. Mobile: {0}'.format(phone_number))
             user_obj = afterbuy_model.Consumer.objects.get(phone_number=phone_number).user
             otp = otp_handler.get_otp(user=user_obj)
             message = afterbuy_utils.get_template('SEND_OTP').format(otp)
             send_job_to_queue('send_otp', {'phone_number': phone_number,
                                            'message': message, "sms_client": settings.SMS_CLIENT})
             logger.info('OTP sent to mobile {0}'.format(phone_number))
             data = {'status': 1, 'message': "OTP sent_successfully"}
             #Send email if email address exist
         if email:
             try:
                 consumer_obj = afterbuy_model.Consumer.objects.get(user__email=email, is_email_verified=True)
                 site = RequestSite(request)
                 afterbuy_model.EmailToken.objects.create_email_token(consumer_obj, email, site, trigger_mail='forgot-password')
                 data = {'status': 1, 'message': "Password reset link sent successfully"}
                 return HttpResponse(json.dumps(data), content_type="application/json")
             except Exception as ex:
                     log_message = "new user :{0}".format(ex)
                     logger.info(log_message)
                     data = {'status': 0, 'message': "Either your email is not verified or its not exist"}
     except Exception as ex:
         logger.error('Invalid details, mobile {0} and exception {1}'.format(request.POST.get('phone_number', ''),ex))
         data = {'status': 0, 'message': "inavlid phone_number/email_id"}
     return HttpResponse(json.dumps(data), content_type="application/json")
 def send_otp_to_mail(self, phone_number, email):
     otp = otp_handler.get_otp(phone_number=phone_number, email=email)
     sent_otp_email(data=otp, receiver=email, subject='User registration')
     logger.info('OTP sent to email {0}'.format(email))
     return HttpResponse(json.dumps({'status':1, 'message' : 'OTP sent successfully'}),
                                     content_type='application/json')