summaryrefslogtreecommitdiffstats
path: root/keystone/auth
diff options
context:
space:
mode:
authorGuang Yee <guang.yee@hp.com>2013-02-27 22:53:23 -0800
committerGerrit Code Review <review@openstack.org>2013-03-05 19:34:57 +0000
commitab6e5529513af656db512b888fed9b320391afbd (patch)
tree216e798a79e2549ccd3ee8028903805016f11844 /keystone/auth
parenta8992277cd7dcde27deb7d3863370fd6bc9fd5ae (diff)
downloadkeystone-ab6e5529513af656db512b888fed9b320391afbd.tar.gz
keystone-ab6e5529513af656db512b888fed9b320391afbd.tar.xz
keystone-ab6e5529513af656db512b888fed9b320391afbd.zip
bug 1134802: fix inconsistent format for expires_at and issued_at
Notice we have to use fraction of second precision to prevent PKI token ID overlap. Change-Id: Icfc192c08ab5b4db02547ef6f077fa7f32210835
Diffstat (limited to 'keystone/auth')
-rw-r--r--keystone/auth/methods/token.py6
-rw-r--r--keystone/auth/token_factory.py29
2 files changed, 20 insertions, 15 deletions
diff --git a/keystone/auth/methods/token.py b/keystone/auth/methods/token.py
index 05c5385d..10e99cfb 100644
--- a/keystone/auth/methods/token.py
+++ b/keystone/auth/methods/token.py
@@ -40,8 +40,10 @@ class Token(auth.AuthMethodHandler):
token_ref = self.token_api.get_token(context, token_id)
user_context.setdefault(
'user_id', token_ref['token_data']['token']['user']['id'])
- user_context.setdefault(
- 'expires', token_ref['token_data']['token']['expires'])
+ # to support Grizzly-3 to Grizzly-RC1 transition
+ expires_at = token_ref['token_data']['token'].get(
+ 'expires_at', token_ref['token_data']['token'].get('expires'))
+ user_context.setdefault('expires_at', expires_at)
user_context['extras'].update(
token_ref['token_data']['token']['extras'])
user_context['method_names'].extend(
diff --git a/keystone/auth/token_factory.py b/keystone/auth/token_factory.py
index 4b1bf637..d6dc68f9 100644
--- a/keystone/auth/token_factory.py
+++ b/keystone/auth/token_factory.py
@@ -129,10 +129,10 @@ class TokenDataHelper(object):
def _populate_token(self, token_data, expires=None):
if not expires:
expires = token_module.default_expire_time()
- if not isinstance(expires, unicode):
- expires = timeutils.isotime(expires)
- token_data['expires'] = expires
- token_data['issued_at'] = timeutils.strtime()
+ if not isinstance(expires, basestring):
+ expires = timeutils.isotime(expires, subsecond=True)
+ token_data['expires_at'] = expires
+ token_data['issued_at'] = timeutils.isotime(subsecond=True)
def get_token_data(self, user_id, method_names, extras,
domain_id=None, project_id=None, expires=None):
@@ -168,7 +168,10 @@ def recreate_token_data(context, token_data=None, expires=None,
project_id = (token_data['project']['id'] if 'project' in token_data
else None)
if not new_expires:
- new_expires = token_data['expires']
+ # support Grizzly-3 to Grizzly-RC1 transition
+ # tokens issued in G3 has 'expires' instead of 'expires_at'
+ new_expires = token_data.get('expires_at',
+ token_data.get('expires'))
user_id = token_data['user']['id']
methods = token_data['methods']
extras = token_data['extras']
@@ -189,13 +192,13 @@ def create_token(context, auth_context, auth_info):
(domain_id, project_id) = auth_info.get_scope()
method_names = list(set(auth_info.get_method_names() +
auth_context.get('method_names', [])))
- token_data = token_data_helper.get_token_data(auth_context['user_id'],
- method_names,
- auth_context['extras'],
- domain_id,
- project_id,
- auth_context.get('expires',
- None))
+ token_data = token_data_helper.get_token_data(
+ auth_context['user_id'],
+ method_names,
+ auth_context['extras'],
+ domain_id,
+ project_id,
+ auth_context.get('expires_at', None))
if CONF.signing.token_format == 'UUID':
token_id = uuid.uuid4().hex
elif CONF.signing.token_format == 'PKI':
@@ -209,7 +212,7 @@ def create_token(context, auth_context, auth_info):
CONF.signing.token_format)
token_api = token_module.Manager()
try:
- expiry = token_data['token']['expires']
+ expiry = token_data['token']['expires_at']
if isinstance(expiry, basestring):
expiry = timeutils.parse_isotime(expiry)
role_ids = []