summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-11-01 20:02:44 +0000
committerGerrit Code Review <review@openstack.org>2012-11-01 20:02:44 +0000
commit52df60f03e2203a7c94ab477b4fdfeed54f0cc9f (patch)
tree1a76987ad49600db1ffeb07ffb8eb66d2f3aa836
parentfaab62d22b79554fe9b8557453622d96148ed364 (diff)
parent23aa49ee3d5d71c0cca25c7e16fb5fc7771d5c02 (diff)
Merge "key all backends off of hash of pki token."
-rw-r--r--keystone/common/cms.py16
-rw-r--r--keystone/token/backends/kvs.py3
-rw-r--r--keystone/token/backends/memcache.py8
-rw-r--r--keystone/token/backends/sql.py10
-rw-r--r--keystone/token/core.py10
5 files changed, 34 insertions, 13 deletions
diff --git a/keystone/common/cms.py b/keystone/common/cms.py
index 554a6ee1..4340b897 100644
--- a/keystone/common/cms.py
+++ b/keystone/common/cms.py
@@ -1,3 +1,4 @@
+import hashlib
import subprocess
from keystone.common import logging
@@ -134,3 +135,18 @@ def cms_to_token(cms_text):
signed_text = signed_text.replace('\n', '')
return signed_text
+
+
+def cms_hash_token(token_id):
+ """
+ return: for ans1_token, returns the hash of the passed in token
+ otherwise, returns what it was passed in.
+ """
+ if token_id is None:
+ return None
+ if is_ans1_token(token_id):
+ hasher = hashlib.md5()
+ hasher.update(token_id)
+ return hasher.hexdigest()
+ else:
+ return token_id
diff --git a/keystone/token/backends/kvs.py b/keystone/token/backends/kvs.py
index 392e4852..d723e505 100644
--- a/keystone/token/backends/kvs.py
+++ b/keystone/token/backends/kvs.py
@@ -26,6 +26,7 @@ class Token(kvs.Base, token.Driver):
# Public interface
def get_token(self, token_id):
+ token_id = self.token_to_key(token_id)
try:
token = self.db.get('token-%s' % token_id)
except exception.NotFound:
@@ -36,6 +37,7 @@ class Token(kvs.Base, token.Driver):
raise exception.TokenNotFound(token_id=token_id)
def create_token(self, token_id, data):
+ token_id = self.token_to_key(token_id)
data_copy = copy.deepcopy(data)
if 'expires' not in data:
data_copy['expires'] = self._get_default_expire_time()
@@ -43,6 +45,7 @@ class Token(kvs.Base, token.Driver):
return copy.deepcopy(data_copy)
def delete_token(self, token_id):
+ token_id = self.token_to_key(token_id)
try:
token_ref = self.get_token(token_id)
self.db.delete('token-%s' % token_id)
diff --git a/keystone/token/backends/memcache.py b/keystone/token/backends/memcache.py
index 4efa3036..41a4e290 100644
--- a/keystone/token/backends/memcache.py
+++ b/keystone/token/backends/memcache.py
@@ -53,7 +53,7 @@ class Token(token.Driver):
def get_token(self, token_id):
if token_id is None:
- raise exception.TokenNotFound(token_id=token_id)
+ raise exception.TokenNotFound(token_id='')
ptk = self._prefix_token_id(token_id)
token = self.client.get(ptk)
if token is None:
@@ -63,7 +63,7 @@ class Token(token.Driver):
def create_token(self, token_id, data):
data_copy = copy.deepcopy(data)
- ptk = self._prefix_token_id(token_id)
+ ptk = self._prefix_token_id(self.token_to_key(token_id))
if 'expires' not in data_copy:
data_copy['expires'] = self._get_default_expire_time()
kwargs = {}
@@ -93,8 +93,8 @@ class Token(token.Driver):
def delete_token(self, token_id):
# Test for existence
- data = self.get_token(token_id)
- ptk = self._prefix_token_id(token_id)
+ data = self.get_token(self.token_to_key(token_id))
+ ptk = self._prefix_token_id(self.token_to_key(token_id))
result = self.client.delete(ptk)
self._add_to_revocation_list(data)
return result
diff --git a/keystone/token/backends/sql.py b/keystone/token/backends/sql.py
index b8a5bf30..be880f72 100644
--- a/keystone/token/backends/sql.py
+++ b/keystone/token/backends/sql.py
@@ -16,7 +16,7 @@
import copy
import datetime
-import hashlib
+
from keystone.common import cms
from keystone.common import sql
@@ -64,14 +64,6 @@ class Token(sql.Base, token.Driver):
else:
raise exception.TokenNotFound(token_id=token_id)
- def token_to_key(self, token_id):
- if cms.is_ans1_token(token_id):
- hash = hashlib.md5()
- hash.update(token_id)
- return hash.hexdigest()
- else:
- return token_id
-
def create_token(self, token_id, data):
data_copy = copy.deepcopy(data)
if 'expires' not in data_copy:
diff --git a/keystone/token/core.py b/keystone/token/core.py
index e10a4ddf..56ef13fe 100644
--- a/keystone/token/core.py
+++ b/keystone/token/core.py
@@ -19,6 +19,7 @@
import datetime
from keystone.common import manager
+from keystone.common import cms
from keystone import config
from keystone import exception
from keystone.openstack.common import timeutils
@@ -52,6 +53,15 @@ class Manager(manager.Manager):
class Driver(object):
"""Interface description for a Token driver."""
+ def token_to_key(self, token_id):
+ """ Converts PKI tokens to their short form used for keys in
+ Database tables, memcached, and other lookup tables.
+ returns: if given a PKI token, returns its hashed value
+ Otherwise, returns the passed-in value if given a UUID or
+ hash of a token.
+ """
+ return cms.cms_hash_token(token_id)
+
def get_token(self, token_id):
"""Get a token by id.