예제 #1
0
    def test_no_token(self):
        data = {
            'username': '******',
            'password': '******',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        self.assertTrue(form.get_user().get_username() == 'alice')
예제 #2
0
    def test_bad_password(self):
        data = {
            'username': '******',
            'password': '******',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        self.assertTrue(form.get_user() is None)
        self.assertEqual(list(form.errors.keys()), ['__all__'])
예제 #3
0
    def test_bad_password(self):
        data = {
            'username': '******',
            'password': '******',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        self.assertTrue(form.get_user() is None)
        self.assertEqual(list(form.errors.keys()), ['__all__'])
예제 #4
0
    def test_no_token(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': self.device.persistent_id,
        }
        form = OTPAuthenticationForm(None, data)

        self.assertFalse(form.is_valid())
        self.assertEqual(form.get_user().get_username(), 'alice')
예제 #5
0
    def test_specific_device(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'django_otp.plugins.otp_static.models.StaticDevice/1',
            'otp_token': 'alice1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        alice = form.get_user()
        self.assertTrue(alice.get_username() == 'alice')
        self.assertTrue(alice.otp_device is not None)
예제 #6
0
    def test_passive_token(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_token': 'alice1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        alice = form.get_user()
        self.assertTrue(alice.get_username() == 'alice')
        self.assertTrue(isinstance(alice.otp_device, StaticDevice))
        self.assertEqual(alice.otp_device.token_set.count(), 2)
예제 #7
0
    def test_specific_device(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'otp_static.staticdevice/1',
            'otp_token': 'alice1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        alice = form.get_user()
        self.assertEqual(alice.get_username(), 'alice')
        self.assertIsNotNone(alice.otp_device)
예제 #8
0
    def test_passive_token(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_token': 'alice1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        alice = form.get_user()
        self.assertEqual(alice.get_username(), 'alice')
        self.assertIsInstance(alice.otp_device, StaticDevice)
        self.assertEqual(alice.otp_device.token_set.count(), 2)
예제 #9
0
파일: tests.py 프로젝트: Jackson-saiba/venv
    def test_specific_device_fail(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'django_otp.plugins.otp_email.models.StaticDevice/1',
            'otp_token': 'bogus',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        alice = form.get_user()
        self.assertTrue(alice.get_username() == 'alice')
        self.assertTrue(alice.otp_device is None)
예제 #10
0
    def test_custom_user(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'django_otp.plugins.otp_static.models.StaticDevice/1',
            'otp_token': 'alice1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assert_(form.is_valid())
        alice = form.get_user()
        self.assert_(isinstance(alice, TestUser))
        if hasattr(alice, 'get_username'):
            self.assertEqual(alice.get_username(), 'alice')
        else:
            self.assertEqual(alice.username, 'alice')
        self.assert_(alice.otp_device is not None)
예제 #11
0
    def test_email_interaction(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'otp_email.emaildevice/1',
            'otp_token': '',
            'otp_challenge': '1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertFalse(form.is_valid())
        alice = form.get_user()
        self.assertEqual(alice.get_username(), 'alice')
        self.assertIsNone(alice.otp_device)
        self.assertEqual(len(mail.outbox), 1)

        data['otp_token'] = mail.outbox[0].body
        del data['otp_challenge']
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        self.assertIsInstance(form.get_user().otp_device, EmailDevice)
예제 #12
0
    def test_email_interaction(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'django_otp.plugins.otp_email.models.EmailDevice/1',
            'otp_token': '',
            'otp_challenge': '1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        alice = form.get_user()
        self.assertTrue(alice.get_username() == 'alice')
        self.assertTrue(alice.otp_device is None)
        self.assertEqual(len(mail.outbox), 1)

        data['otp_token'] = mail.outbox[0].body
        del data['otp_challenge']
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        self.assertTrue(isinstance(form.get_user().otp_device, EmailDevice))
예제 #13
0
    def test_email_interaction(self):
        data = {
            'username': '******',
            'password': '******',
            'otp_device': 'django_otp.plugins.otp_email.models.EmailDevice/1',
            'otp_token': '',
            'otp_challenge': '1',
        }
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        alice = form.get_user()
        self.assertTrue(alice.get_username() == 'alice')
        self.assertTrue(alice.otp_device is None)
        self.assertEqual(len(mail.outbox), 1)

        data['otp_token'] = mail.outbox[0].body
        del data['otp_challenge']
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(form.is_valid())
        self.assertTrue(isinstance(form.get_user().otp_device, EmailDevice))
예제 #14
0
    def test_attempt_after_fail(self):
        good_data = {
            'username': '******',
            'password': '******',
            'otp_token': self.tokens[0],
            'otp_device': self.device.persistent_id,
        }
        bad_data = {
            'username': '******',
            'password': '******',
            'otp_token': '123456',
            'otp_device': self.device.persistent_id,
        }

        with freeze_time() as frozen_time:
            form1 = OTPAuthenticationForm(None, bad_data)
            self.assertFalse(form1.is_valid())

            # Should fail even with good data:
            form2 = OTPAuthenticationForm(None, good_data)
            self.assertFalse(form2.is_valid())
            self.assertIn(
                'Verification temporarily disabled because of 1 failed attempt',
                form2.errors['__all__'][0])

            # Fail again after throttling expired:
            frozen_time.tick(timedelta(seconds=1.1))
            form3 = OTPAuthenticationForm(None, bad_data)
            self.assertFalse(form3.is_valid())
            self.assertIn('Invalid token', form3.errors['__all__'][0])

            # Test n=2 error message:
            form4 = OTPAuthenticationForm(None, bad_data)
            self.assertFalse(form4.is_valid())
            self.assertIn(
                'Verification temporarily disabled because of 2 failed attempts',
                form4.errors['__all__'][0])

            # Pass this time:
            frozen_time.tick(timedelta(seconds=2.1))
            form5 = OTPAuthenticationForm(None, good_data)
            self.assertTrue(form5.is_valid())
예제 #15
0
    def test_empty(self):
        data = {}
        form = OTPAuthenticationForm(None, data)

        self.assertTrue(not form.is_valid())
        self.assertEqual(form.get_user(), None)
예제 #16
0
    def test_empty(self):
        data = {}
        form = OTPAuthenticationForm(None, data)

        self.assertFalse(form.is_valid())
        self.assertEqual(form.get_user(), None)