def test_users_immortal_tokens_stay_immortal_when_OVERWRITE_NONE_TTL_setting_is_False( self): hash = TOKENS_CACHE.get(self.user.pk)[0] MultiToken.reset_tokens_ttl(self.user.pk) self.assertIsNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNone(TOKENS_CACHE.ttl(hash))
def test_immortal_tokens_stay_immortal_when_user_provided_timeout_is_None( self): hash = TOKENS_CACHE.get(self.user.pk)[0] self.assertIsNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNone(TOKENS_CACHE.ttl(hash)) MultiToken.reset_tokens_ttl(self.user.pk) self.assertIsNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNone(TOKENS_CACHE.ttl(hash))
def test_users_immortal_tokens_get_limited_ttl_when_OVERWRITE_NONE_TTL_setting_is_True( self): hash = TOKENS_CACHE.get(self.user.pk)[0] self.assertIsNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNone(TOKENS_CACHE.ttl(hash)) MultiToken.reset_tokens_ttl(self.user.pk) self.assertIsNotNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNotNone(TOKENS_CACHE.ttl(hash))
def test_other_users_tokens_are_not_affected(self): second_user = create_test_user('tester2') second_token, _ = MultiToken.create_token(second_user) import time time.sleep(1) MultiToken.reset_tokens_ttl(self.user.pk) self.assertEqual(TOKENS_CACHE.ttl(self.user.pk), 1000) self.assertNotEqual(TOKENS_CACHE.ttl(second_user.pk), 1000) hash = TOKENS_CACHE.get(second_user.pk)[0] self.assertNotEqual(hash, 1000)
def test_token_with_ttl_gets_new_ttl_when_user_changes_timeout_to_2000( self, mocked_settings): hash = TOKENS_CACHE.get(self.user.pk)[0] TOKENS_CACHE.expire(self.user.pk, 1000) TOKENS_CACHE.expire(TOKENS_CACHE.ttl(hash), 1000) settings = MockedSettings(timeout=2000) mocked_settings.CACHES.__getitem__.return_value = settings.CACHES[ 'default'] MultiToken.reset_tokens_ttl(self.user.pk) self.assertEqual(TOKENS_CACHE.ttl(self.user.pk), 2000) self.assertEqual(TOKENS_CACHE.ttl(hash), 2000)
def test_token_with_ttl_becomes_immortal_when_user_changes_timeout_to_None( self, mocked_settings): hash = TOKENS_CACHE.get(self.user.pk)[0] TOKENS_CACHE.expire(self.user.pk, 1000) TOKENS_CACHE.expire(TOKENS_CACHE.ttl(hash), 1000) settings = MockedSettings(timeout=None) mocked_settings.CACHES.__getitem__.return_value = settings.CACHES[ 'default'] MultiToken.reset_tokens_ttl(self.user.pk) self.assertIsNone(TOKENS_CACHE.ttl(self.user.pk)) self.assertIsNone(TOKENS_CACHE.ttl(hash))
def authenticate_credentials(self, key): try: user = MultiToken.get_user_from_token(key) if user._type == 'DOC': user.lastseen = time.time() user.save() if settings.DJFORGE_REDIS_MULTITOKENS.get( 'RESET_TOKEN_TTL_ON_USER_LOG_IN'): MultiToken.reset_tokens_ttl(user.pk) except get_user_model().DoesNotExist: raise exceptions.AuthenticationFailed('Invalid token.') if not user.is_active: raise exceptions.AuthenticationFailed('User inactive or deleted.') return (user, MultiToken(key, user))
def test_correct_ttl_is_set_for_renewed_tokens(self): hash = TOKENS_CACHE.get(self.user.pk)[0] MultiToken.reset_tokens_ttl(self.user.pk) self.assertAlmostEquals(TOKENS_CACHE.ttl(self.user.pk), 1000) self.assertAlmostEquals(TOKENS_CACHE.ttl(hash), 1000)