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')
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__'])
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')
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)
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)
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)
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)
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)
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)
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)
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))
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())
def test_empty(self): data = {} form = OTPAuthenticationForm(None, data) self.assertTrue(not form.is_valid()) self.assertEqual(form.get_user(), None)
def test_empty(self): data = {} form = OTPAuthenticationForm(None, data) self.assertFalse(form.is_valid()) self.assertEqual(form.get_user(), None)