From 8154492da3d8b6e0e71eb7dcb5e2e3b06ddb09a7 Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Tue, 25 Sep 2012 19:04:50 +0000 Subject: [PATCH] utf-8 encode user keys in memcache (bug 1056373) Change-Id: I026dd4282742213e69c7aa02e109439b07a73c8e (cherry picked from commit 431e50a7851d2e7dbb212d02647faeb958ed21e8) --- keystone/token/backends/memcache.py | 8 ++++++-- tests/test_backend_memcache.py | 14 +++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/keystone/token/backends/memcache.py b/keystone/token/backends/memcache.py index fc57cf4d2e..3f7d639485 100644 --- a/keystone/token/backends/memcache.py +++ b/keystone/token/backends/memcache.py @@ -48,6 +48,9 @@ class Token(token.Driver): def _prefix_token_id(self, token_id): return 'token-%s' % token_id.encode('utf-8') + def _prefix_user_id(self, user_id): + return 'usertokens-%s' % user_id.encode('utf-8') + def get_token(self, token_id): ptk = self._prefix_token_id(token_id) token = self.client.get(ptk) @@ -69,7 +72,7 @@ class Token(token.Driver): if 'id' in data['user']: token_data = jsonutils.dumps(token_id) user_id = data['user']['id'] - user_key = 'usertokens-%s' % user_id + user_key = self._prefix_user_id(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): @@ -96,7 +99,8 @@ class Token(token.Driver): def list_tokens(self, user_id, tenant_id=None): tokens = [] - user_record = self.client.get('usertokens-%s' % user_id) or "" + user_key = self._prefix_user_id(user_id) + user_record = self.client.get(user_key) or "" token_list = jsonutils.loads('[%s]' % user_record) for token_id in token_list: ptk = self._prefix_token_id(token_id) diff --git a/tests/test_backend_memcache.py b/tests/test_backend_memcache.py index 884a94ac74..b7f26b1dde 100644 --- a/tests/test_backend_memcache.py +++ b/tests/test_backend_memcache.py @@ -78,9 +78,21 @@ class MemcacheToken(test.TestCase, test_backend.TokenTests): fake_client = MemcacheClient() self.token_api = token_memcache.Token(client=fake_client) - def test_get_unicode(self): + def test_create_unicode_token_id(self): token_id = unicode(uuid.uuid4().hex) data = {'id': token_id, 'a': 'b', 'user': {'id': 'testuserid'}} self.token_api.create_token(token_id, data) self.token_api.get_token(token_id) + + def test_create_unicode_user_id(self): + token_id = uuid.uuid4().hex + user_id = unicode(uuid.uuid4().hex) + data = {'id': token_id, 'a': 'b', + 'user': {'id': user_id}} + self.token_api.create_token(token_id, data) + self.token_api.get_token(token_id) + + def test_list_tokens_unicode_user_id(self): + user_id = unicode(uuid.uuid4().hex) + self.token_api.list_tokens(user_id)