From 150413cc4ba8ec854cf6fa30efeb7a653ad5e17a Mon Sep 17 00:00:00 2001 From: Adam Young Date: Thu, 6 Sep 2012 11:54:04 -0400 Subject: List tokens for memcached backend Creates and updates an index of tokens in a memcache entry keyed by the user id Bug 1046905 Change-Id: If11d6b87b0a8ae5f8349f1ebb31790e943c70fbf --- keystone/token/backends/memcache.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'keystone') diff --git a/keystone/token/backends/memcache.py b/keystone/token/backends/memcache.py index b5cae2a0..437431bc 100644 --- a/keystone/token/backends/memcache.py +++ b/keystone/token/backends/memcache.py @@ -67,6 +67,15 @@ class Token(token.Driver): expires_ts = utils.unixtime(data_copy['expires']) kwargs['time'] = expires_ts self.client.set(ptk, data_copy, **kwargs) + if 'id' in data['user']: + token_data = jsonutils.dumps(token_id) + user_id = data['user']['id'] + user_key = 'usertokens-%s' % user_id + if not self.client.append(user_key, ',%s' % token_data): + if not self.client.add(user_key, token_data): + if not self.client.append(user_key, ',%s' % token_data): + msg = _('Unable to add token user list.') + raise exception.UnexpectedError(msg) return copy.deepcopy(data_copy) def _add_to_revocation_list(self, data): @@ -86,6 +95,17 @@ class Token(token.Driver): self._add_to_revocation_list(data) return result + def list_tokens(self, user_id): + tokens = [] + user_record = self.client.get('usertokens-%s' % user_id) or "" + token_list = jsonutils.loads('[%s]' % user_record) + for token_id in token_list: + ptk = self._prefix_token_id(token_id) + token = self.client.get(ptk) + if token: + tokens.append(token_id) + return tokens + def list_revoked_tokens(self): list_json = self.client.get(self.revocation_key) if list_json: -- cgit