Example #1
0
 def create_default_device(self,
                           user_profile: UserProfile,
                           number: str = "+12125550100") -> None:
     phone_device = PhoneDevice(user=user_profile,
                                name='default',
                                confirmed=True,
                                number=number,
                                key='abcd',
                                method='sms')
     phone_device.save()
Example #2
0
 def create_default_device(
     self, user_profile: UserProfile, number: str = "+12125550100"
 ) -> None:
     phone_device = PhoneDevice(
         user=user_profile,
         name="default",
         confirmed=True,
         number=number,
         key="abcd",
         method="sms",
     )
     phone_device.save()
Example #3
0
 def create_default_device(self, user_profile: UserProfile,
                           number: str="+12223334444") -> None:
     phone_device = PhoneDevice(user=user_profile, name='default',
                                confirmed=True, number=number,
                                key='abcd', method='sms')
     phone_device.save()
Example #4
0
    def post(self, request, *args, **kwargs):
        request_data = json.loads(request.body.decode("utf-8"))
        form = AuthenticationDeviceForm(request_data)
        if form.is_valid():
            device_type = form.cleaned_data.get('device_type')
            if device_type == 'authenticator':
                code = form.cleaned_data.get('code')
                if code:
                    try:
                        device = TOTPDevice.objects.get(user=request.user)
                        if device.verify_token(code):
                            device.confirmed = True
                            device.save()
                            return self.success_response()
                    except:
                        pass
                    return self.error_response(
                        general_errors=["Invalid code. Please try again."])
                else:
                    device = None
                    try:
                        device = TOTPDevice.objects.get(user=request.user)
                    except:
                        pass

                    if not device:
                        device_data = {
                            'user': request.user,
                            'name': 'authentication_app',
                            'confirmed': False
                        }
                        device = TOTPDevice.objects.create(**device_data)

                    import qrcode
                    import qrcode.image.svg
                    img = qrcode.make(device.config_url,
                                      image_factory=qrcode.image.svg.SvgImage)
                    img_response = HttpResponse(content_type='image/svg+xml')
                    img.save(img_response)
                    import base64

                    return self.success_response(
                        result={
                            'config_url':
                            device.config_url,
                            'svg_image':
                            base64.b64encode(img_response.content).decode(
                                "utf-8")
                        })
            elif device_type == 'sms':
                code = form.cleaned_data.get('code')
                if code:
                    try:
                        device = PhoneDevice.objects.get(user=request.user)
                        if device.verify_token(code):
                            device.confirmed = True
                            device.save()
                            return self.success_response()
                    except:
                        pass
                    return self.error_response(
                        general_errors=["Invalid code. Please try again."])
                else:
                    device = PhoneDevice(
                        user=request.user,
                        name='sms',
                        number='+1' + request_data.get('mobile'),
                        method='sms',
                        confirmed=False,
                    )
                    device.generate_challenge()
                    device.save()
                    return self.success_response()
            return self.error_response()
        return self.form_error_response(form)