summaryrefslogtreecommitdiff
path: root/keystoneclient/access.py
diff options
context:
space:
mode:
authorJamie Lennox <jlennox@redhat.com>2013-08-22 11:09:49 +1000
committerMorgan Fainberg <m@metacloud.com>2013-08-26 03:20:23 -0700
commitb43349a1ad8a5353ec415577723bfa3802582c14 (patch)
tree3869458b3364b9e637e486fa3d96ddcc26a91cdf /keystoneclient/access.py
parent7eb6f805177d429d6e07e26a6c1ea98ef4d83577 (diff)
downloadpython-keystoneclient-b43349a1ad8a5353ec415577723bfa3802582c14.tar.gz
Support older token formats for projects in accessinfo
Older token formats get decoded as a v2 token so we should support reading project information from these tokens. Change-Id: I31473a00b294bd0d7b535cfab8d2eaf09db97ff5
Diffstat (limited to 'keystoneclient/access.py')
-rw-r--r--keystoneclient/access.py45
1 files changed, 37 insertions, 8 deletions
diff --git a/keystoneclient/access.py b/keystoneclient/access.py
index 8be7a5c..5a10c79 100644
--- a/keystoneclient/access.py
+++ b/keystoneclient/access.py
@@ -222,7 +222,7 @@ class AccessInfo(dict):
request, or None if the authentication request wasn't scoped to a
project.
- :returns: str or None ((if no project associated with the token)
+ :returns: str or None (if no project associated with the token)
"""
raise NotImplementedError()
@@ -327,9 +327,24 @@ class AccessInfoV2(AccessInfo):
@property
def project_name(self):
- tenant_dict = self['token'].get('tenant', None)
- if tenant_dict:
- return tenant_dict.get('name', None)
+ try:
+ tenant_dict = self['token']['tenant']
+ except KeyError:
+ pass
+ else:
+ return tenant_dict.get('name')
+
+ # pre grizzly
+ try:
+ return self['user']['tenantName']
+ except KeyError:
+ pass
+
+ # pre diablo, keystone only provided a tenantId
+ try:
+ return self['token']['tenantId']
+ except KeyError:
+ pass
@property
def scoped(self):
@@ -357,10 +372,24 @@ class AccessInfoV2(AccessInfo):
@property
def project_id(self):
- tenant_dict = self['token'].get('tenant', None)
- if tenant_dict:
- return tenant_dict.get('id', None)
- return None
+ try:
+ tenant_dict = self['token']['tenant']
+ except KeyError:
+ pass
+ else:
+ return tenant_dict.get('id')
+
+ # pre grizzly
+ try:
+ return self['user']['tenantId']
+ except KeyError:
+ pass
+
+ # pre diablo
+ try:
+ return self['token']['tenantId']
+ except KeyError:
+ pass
@property
def project_domain_id(self):