def setUp(self):
        self.vumi_helper = self.add_helper(DjangoVumiApiHelper())
        self.user_helper = self.vumi_helper.make_django_user()
        self.user_pk = self.user_helper.get_django_user().pk
        self.client = Client()

        self.tm = DjangoTokenManager(TokenManager(
            self.vumi_helper.get_redis_manager().sub_manager('token_manager')))
Example #2
0
    def __init__(self, manager, redis, sender=None, metric_publisher=None):
        # local import to avoid circular import since
        # go.api.go_api needs to access VumiApi
        from go.api.go_api.session_manager import SessionManager

        self.manager = manager
        self.redis = redis

        self.tpm = TagpoolManager(self.redis.sub_manager('tagpool_store'))
        self.mdb = MessageStore(self.manager,
                                self.redis.sub_manager('message_store'))
        self.account_store = AccountStore(self.manager)
        self.token_manager = TokenManager(
            self.redis.sub_manager('token_manager'))
        self.session_manager = SessionManager(
            self.redis.sub_manager('session_manager'))
        self.mapi = sender
        self.metric_publisher = metric_publisher
Example #3
0
 def setUp(self):
     self.persistence_helper = self.add_helper(PersistenceHelper())
     self.redis = yield self.persistence_helper.get_redis_manager()
     self.tm = TokenManager(self.redis.sub_manager('token_manager'))
Example #4
0
class TestTokenManager(VumiTestCase):
    @inlineCallbacks
    def setUp(self):
        self.persistence_helper = self.add_helper(PersistenceHelper())
        self.redis = yield self.persistence_helper.get_redis_manager()
        self.tm = TokenManager(self.redis.sub_manager('token_manager'))

    @inlineCallbacks
    def test_token_generation(self):
        token = yield self.tm.generate('/some/path/', lifetime=10)
        token_data = yield self.tm.get(token)
        self.assertEqual(len(token), 6)
        self.assertEqual(token_data['user_id'], '')
        self.assertEqual(token_data['redirect_to'], '/some/path/')
        self.assertTrue(token_data['system_token'])
        self.assertEqual(token_data['extra_params'], {})

    @inlineCallbacks
    def test_token_provided(self):
        token = yield self.tm.generate('/some/path/',
                                       lifetime=10,
                                       token=('to', 'ken'))
        self.assertEqual(token, 'to')
        token_data = yield self.tm.get(token)
        self.assertEqual(token_data['system_token'], 'ken')

    @inlineCallbacks
    def test_unknown_token(self):
        self.assertEqual((yield self.tm.get('foo')), None)

    def test_malformed_token(self):
        return self.assertFailure(
            self.tm.verify_get('A-token-starting-with-a-digit'),
            MalformedToken)

    @inlineCallbacks
    def test_token_verify(self):
        token = yield self.tm.generate('/foo/', token=('to', 'ken'))
        yield self.assertFailure(self.tm.get(token, verify='bar'),
                                 InvalidToken)
        self.assertEqual(
            (yield self.tm.get(token, verify='ken')), {
                'user_id': '',
                'system_token': 'ken',
                'redirect_to': '/foo/',
                'extra_params': {},
            })

    @inlineCallbacks
    def test_token_delete(self):
        token = yield self.tm.generate('/foo/')
        self.assertTrue((yield self.tm.get(token)))
        self.assertTrue((yield self.tm.delete(token)))
        self.assertFalse((yield self.tm.get(token)))

    @inlineCallbacks
    def test_token_extra_params(self):
        extra_params = {'one': 'two', 'three': 4}
        token = yield self.tm.generate('/foo/', extra_params=extra_params)
        token_data = yield self.tm.get(token)
        self.assertEqual(token_data['extra_params'], extra_params)

    @inlineCallbacks
    def test_reuse_existing_token(self):
        token = ('to', 'ken')
        yield self.tm.generate('/foo/', token=token)
        yield self.assertFailure(self.tm.generate('/foo/', token=token),
                                 TokenManagerException)

    def test_parse_full_token(self):
        user_token, sys_token = self.tm.parse_full_token('1-ab')
        self.assertEqual(user_token, 'a')
        self.assertEqual(sys_token, 'b')
        self.assertRaises(MalformedToken, self.tm.parse_full_token, 'a-bc')

    @inlineCallbacks
    def test_race_condition(self):
        # claim these
        yield self.tm.generate('/foo/', token=('to1', 'ken'))
        yield self.tm.generate('/foo/', token=('to2', 'ken'))
        # patch the generate command to first return the ones that already
        # exist it should, continue trying until an un-used token is found
        with patch.object(TokenManager, 'generate_token') as mock:
            mock.side_effect = [('to1', 'ken'), ('to2', 'ken'), ('to3', 'ken')]
            user_token = yield self.tm.generate('/foo/')
        self.assertEqual(user_token, 'to3')
Example #5
0
 def setUp(self):
     self.persistence_helper = self.add_helper(PersistenceHelper())
     self.redis = yield self.persistence_helper.get_redis_manager()
     self.tm = TokenManager(self.redis.sub_manager('token_manager'))
Example #6
0
class TestTokenManager(VumiTestCase):

    @inlineCallbacks
    def setUp(self):
        self.persistence_helper = self.add_helper(PersistenceHelper())
        self.redis = yield self.persistence_helper.get_redis_manager()
        self.tm = TokenManager(self.redis.sub_manager('token_manager'))

    @inlineCallbacks
    def test_token_generation(self):
        token = yield self.tm.generate('/some/path/', lifetime=10)
        token_data = yield self.tm.get(token)
        self.assertEqual(len(token), 6)
        self.assertEqual(token_data['user_id'], '')
        self.assertEqual(token_data['redirect_to'], '/some/path/')
        self.assertTrue(token_data['system_token'])
        self.assertEqual(token_data['extra_params'], {})

    @inlineCallbacks
    def test_token_provided(self):
        token = yield self.tm.generate('/some/path/', lifetime=10,
                                    token=('to', 'ken'))
        self.assertEqual(token, 'to')
        token_data = yield self.tm.get(token)
        self.assertEqual(token_data['system_token'], 'ken')

    @inlineCallbacks
    def test_unknown_token(self):
        self.assertEqual((yield self.tm.get('foo')), None)

    def test_malformed_token(self):
        return self.assertFailure(
            self.tm.verify_get('A-token-starting-with-a-digit'),
            MalformedToken)

    @inlineCallbacks
    def test_token_verify(self):
        token = yield self.tm.generate('/foo/', token=('to', 'ken'))
        yield self.assertFailure(self.tm.get(token, verify='bar'),
            InvalidToken)
        self.assertEqual((yield self.tm.get(token, verify='ken')), {
            'user_id': '',
            'system_token': 'ken',
            'redirect_to': '/foo/',
            'extra_params': {},
            })

    @inlineCallbacks
    def test_token_delete(self):
        token = yield self.tm.generate('/foo/')
        self.assertTrue((yield self.tm.get(token)))
        self.assertTrue((yield self.tm.delete(token)))
        self.assertFalse((yield self.tm.get(token)))

    @inlineCallbacks
    def test_token_extra_params(self):
        extra_params = {'one': 'two', 'three': 4}
        token = yield self.tm.generate('/foo/', extra_params=extra_params)
        token_data = yield self.tm.get(token)
        self.assertEqual(token_data['extra_params'], extra_params)

    @inlineCallbacks
    def test_reuse_existing_token(self):
        token = ('to', 'ken')
        yield self.tm.generate('/foo/', token=token)
        yield self.assertFailure(self.tm.generate('/foo/', token=token),
            TokenManagerException)

    def test_parse_full_token(self):
        user_token, sys_token = self.tm.parse_full_token('1-ab')
        self.assertEqual(user_token, 'a')
        self.assertEqual(sys_token, 'b')
        self.assertRaises(MalformedToken, self.tm.parse_full_token, 'a-bc')

    @inlineCallbacks
    def test_race_condition(self):
        # claim these
        yield self.tm.generate('/foo/', token=('to1', 'ken'))
        yield self.tm.generate('/foo/', token=('to2', 'ken'))
        # patch the generate command to first return the ones that already
        # exist it should, continue trying until an un-used token is found
        with patch.object(TokenManager, 'generate_token') as mock:
            mock.side_effect = [('to1', 'ken'), ('to2', 'ken'), ('to3', 'ken')]
            user_token = yield self.tm.generate('/foo/')
        self.assertEqual(user_token, 'to3')