summaryrefslogtreecommitdiff
path: root/keystoneclient
diff options
context:
space:
mode:
Diffstat (limited to 'keystoneclient')
-rw-r--r--keystoneclient/access.py32
-rw-r--r--keystoneclient/fixture/v3.py27
-rw-r--r--keystoneclient/tests/v3/test_access.py20
3 files changed, 78 insertions, 1 deletions
diff --git a/keystoneclient/access.py b/keystoneclient/access.py
index 8e123a3..354ccec 100644
--- a/keystoneclient/access.py
+++ b/keystoneclient/access.py
@@ -337,6 +337,22 @@ class AccessInfo(dict):
"""
return self.get('version')
+ @property
+ def oauth_access_token_id(self):
+ """Return the access token ID if OAuth authentication used.
+
+ :returns: str or None.
+ """
+ raise NotImplementedError()
+
+ @property
+ def oauth_consumer_id(self):
+ """Return the consumer ID if OAuth authentication used.
+
+ :returns: str or None.
+ """
+ raise NotImplementedError()
+
class AccessInfoV2(AccessInfo):
"""An object for encapsulating a raw v2 auth token from identity
@@ -505,6 +521,14 @@ class AccessInfoV2(AccessInfo):
else:
return None
+ @property
+ def oauth_access_token_id(self):
+ return None
+
+ @property
+ def oauth_consumer_id(self):
+ return None
+
class AccessInfoV3(AccessInfo):
"""An object for encapsulating a raw v3 auth token from identity
@@ -647,3 +671,11 @@ class AccessInfoV3(AccessInfo):
else:
return None
+
+ @property
+ def oauth_access_token_id(self):
+ return self.get('OS-OAUTH1', {}).get('access_token_id')
+
+ @property
+ def oauth_consumer_id(self):
+ return self.get('OS-OAUTH1', {}).get('consumer_id')
diff --git a/keystoneclient/fixture/v3.py b/keystoneclient/fixture/v3.py
index a0896f0..87e0b7b 100644
--- a/keystoneclient/fixture/v3.py
+++ b/keystoneclient/fixture/v3.py
@@ -59,7 +59,8 @@ class Token(dict):
project_id=None, project_name=None, project_domain_id=None,
project_domain_name=None, domain_id=None, domain_name=None,
trust_id=None, trust_impersonation=None, trustee_user_id=None,
- trustor_user_id=None):
+ trustor_user_id=None, oauth_access_token_id=None,
+ oauth_consumer_id=None):
super(Token, self).__init__()
self.user_id = user_id or uuid.uuid4().hex
@@ -106,6 +107,10 @@ class Token(dict):
trustee_user_id=trustee_user_id,
trustor_user_id=trustor_user_id)
+ if oauth_access_token_id or oauth_consumer_id:
+ self.set_oauth(access_token_id=oauth_access_token_id,
+ consumer_id=oauth_consumer_id)
+
@property
def root(self):
return self.setdefault('token', {})
@@ -272,6 +277,22 @@ class Token(dict):
trust = self.root.setdefault('OS-TRUST:trust', {})
trust.setdefault('trustor_user', {})['id'] = value
+ @property
+ def oauth_access_token_id(self):
+ return self.root.get('OS-OAUTH1', {}).get('access_token_id')
+
+ @oauth_access_token_id.setter
+ def oauth_access_token_id(self, value):
+ self.root.setdefault('OS-OAUTH1', {})['access_token_id'] = value
+
+ @property
+ def oauth_consumer_id(self):
+ return self.root.get('OS-OAUTH1', {}).get('consumer_id')
+
+ @oauth_consumer_id.setter
+ def oauth_consumer_id(self, value):
+ self.root.setdefault('OS-OAUTH1', {})['consumer_id'] = value
+
def validate(self):
project = self.root.get('project')
domain = self.root.get('domain')
@@ -327,3 +348,7 @@ class Token(dict):
self.trust_impersonation = impersonation
self.trustee_user_id = trustee_user_id or uuid.uuid4().hex
self.trustor_user_id = trustor_user_id or uuid.uuid4().hex
+
+ def set_oauth(self, access_token_id=None, consumer_id=None):
+ self.oauth_access_token_id = access_token_id or uuid.uuid4().hex
+ self.oauth_consumer_id = consumer_id or uuid.uuid4().hex
diff --git a/keystoneclient/tests/v3/test_access.py b/keystoneclient/tests/v3/test_access.py
index 6dc5a70..4353af7 100644
--- a/keystoneclient/tests/v3/test_access.py
+++ b/keystoneclient/tests/v3/test_access.py
@@ -11,8 +11,10 @@
# under the License.
import datetime
+import uuid
from keystoneclient import access
+from keystoneclient import fixture
from keystoneclient.openstack.common import timeutils
from keystoneclient.tests.v3 import client_fixtures
from keystoneclient.tests.v3 import utils
@@ -152,3 +154,21 @@ class AccessInfoTest(utils.TestCase):
self.assertFalse(auth_ref.domain_scoped)
self.assertTrue(auth_ref.project_scoped)
+
+ def test_oauth_access(self):
+ consumer_id = uuid.uuid4().hex
+ access_token_id = uuid.uuid4().hex
+
+ token = fixture.V3Token()
+ token.set_project_scope()
+ token.set_oauth(access_token_id=access_token_id,
+ consumer_id=consumer_id)
+
+ auth_ref = access.AccessInfo.factory(body=token)
+
+ self.assertEqual(consumer_id, auth_ref.oauth_consumer_id)
+ self.assertEqual(access_token_id, auth_ref.oauth_access_token_id)
+
+ self.assertEqual(consumer_id, auth_ref['OS-OAUTH1']['consumer_id'])
+ self.assertEqual(access_token_id,
+ auth_ref['OS-OAUTH1']['access_token_id'])