Merge "Allow fetching user_id/project_id from auth"
This commit is contained in:
@@ -108,6 +108,36 @@ class BaseAuthPlugin(object):
|
||||
"""
|
||||
return False
|
||||
|
||||
def get_user_id(self, session, **kwargs):
|
||||
"""Return a unique user identifier of the plugin.
|
||||
|
||||
Wherever possible the user id should be inferred from the token however
|
||||
there are certain URLs and other places that require access to the
|
||||
currently authenticated user id.
|
||||
|
||||
:param session: A session object so the plugin can make HTTP calls.
|
||||
:type session: keystoneclient.session.Session
|
||||
|
||||
:returns: A user identifier or None if one is not available.
|
||||
:rtype: str
|
||||
"""
|
||||
return None
|
||||
|
||||
def get_project_id(self, session, **kwargs):
|
||||
"""Return the project id that we are authenticated to.
|
||||
|
||||
Wherever possible the project id should be inferred from the token
|
||||
however there are certain URLs and other places that require access to
|
||||
the currently authenticated project id.
|
||||
|
||||
:param session: A session object so the plugin can make HTTP calls.
|
||||
:type session: keystoneclient.session.Session
|
||||
|
||||
:returns: A project identifier or None if one is not available.
|
||||
:rtype: str
|
||||
"""
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_options(cls):
|
||||
"""Return the list of parameters associated with the auth plugin.
|
||||
|
@@ -236,6 +236,12 @@ class BaseIdentityPlugin(base.BaseAuthPlugin):
|
||||
|
||||
return url
|
||||
|
||||
def get_user_id(self, session, **kwargs):
|
||||
return self.get_access(session).user_id
|
||||
|
||||
def get_project_id(self, session, **kwargs):
|
||||
return self.get_access(session).project_id
|
||||
|
||||
@utils.positional()
|
||||
def get_discovery(self, session, url, authenticated=None):
|
||||
"""Return the discovery object for a URL.
|
||||
|
@@ -362,6 +362,12 @@ class HTTPClient(baseclient.Client, base.BaseAuthPlugin):
|
||||
else:
|
||||
return self.management_url
|
||||
|
||||
def get_user_id(self, session, **kwargs):
|
||||
return self.auth_ref.user_id
|
||||
|
||||
def get_project_id(self, session, **kwargs):
|
||||
return self.auth_ref.project_id
|
||||
|
||||
@auth_token.setter
|
||||
def auth_token(self, value):
|
||||
"""Override the auth_token.
|
||||
|
@@ -65,6 +65,13 @@ class CommonIdentityTests(object):
|
||||
|
||||
def stub_auth_data(self, **kwargs):
|
||||
token = self.get_auth_data(**kwargs)
|
||||
self.user_id = token.user_id
|
||||
|
||||
try:
|
||||
self.project_id = token.project_id
|
||||
except AttributeError:
|
||||
self.project_id = token.tenant_id
|
||||
|
||||
self.stub_auth(json=token)
|
||||
|
||||
@abc.abstractproperty
|
||||
@@ -221,6 +228,13 @@ class CommonIdentityTests(object):
|
||||
self.assertIsNone(a.auth_ref)
|
||||
self.assertFalse(a.invalidate())
|
||||
|
||||
def test_get_auth_properties(self):
|
||||
a = self.create_auth_plugin()
|
||||
s = session.Session()
|
||||
|
||||
self.assertEqual(self.user_id, a.get_user_id(s))
|
||||
self.assertEqual(self.project_id, a.get_project_id(s))
|
||||
|
||||
|
||||
class V3(CommonIdentityTests, utils.TestCase):
|
||||
|
||||
|
@@ -53,3 +53,11 @@ class TokenEndpointTest(utils.TestCase):
|
||||
|
||||
self.assertIn('token', opt_names)
|
||||
self.assertIn('endpoint', opt_names)
|
||||
|
||||
def test_token_endpoint_user_id(self):
|
||||
a = token_endpoint.Token(self.TEST_URL, self.TEST_TOKEN)
|
||||
s = session.Session()
|
||||
|
||||
# we can't know this information about this sort of plugin
|
||||
self.assertIsNone(a.get_user_id(s))
|
||||
self.assertIsNone(a.get_project_id(s))
|
||||
|
@@ -27,7 +27,8 @@ from keystoneclient.v2_0 import client
|
||||
class KeystoneClientTest(utils.TestCase):
|
||||
|
||||
def test_unscoped_init(self):
|
||||
self.stub_auth(json=client_fixtures.unscoped_token())
|
||||
token = client_fixtures.unscoped_token()
|
||||
self.stub_auth(json=token)
|
||||
|
||||
c = client.Client(username='exampleuser',
|
||||
password='password',
|
||||
@@ -38,9 +39,12 @@ class KeystoneClientTest(utils.TestCase):
|
||||
self.assertFalse(c.auth_ref.project_scoped)
|
||||
self.assertIsNone(c.auth_ref.trust_id)
|
||||
self.assertFalse(c.auth_ref.trust_scoped)
|
||||
self.assertIsNone(c.get_project_id(session=None))
|
||||
self.assertEqual(token.user_id, c.get_user_id(session=None))
|
||||
|
||||
def test_scoped_init(self):
|
||||
self.stub_auth(json=client_fixtures.project_scoped_token())
|
||||
token = client_fixtures.project_scoped_token()
|
||||
self.stub_auth(json=token)
|
||||
|
||||
c = client.Client(username='exampleuser',
|
||||
password='password',
|
||||
@@ -53,6 +57,9 @@ class KeystoneClientTest(utils.TestCase):
|
||||
self.assertIsNone(c.auth_ref.trust_id)
|
||||
self.assertFalse(c.auth_ref.trust_scoped)
|
||||
|
||||
self.assertEqual(token.tenant_id, c.get_project_id(session=None))
|
||||
self.assertEqual(token.user_id, c.get_user_id(session=None))
|
||||
|
||||
def test_auth_ref_load(self):
|
||||
self.stub_auth(json=client_fixtures.project_scoped_token())
|
||||
|
||||
|
@@ -40,6 +40,10 @@ class KeystoneClientTest(utils.TestCase):
|
||||
'c4da488862bd435c9e6c0275a0d0e49a')
|
||||
self.assertFalse(c.has_service_catalog())
|
||||
|
||||
self.assertEqual('c4da488862bd435c9e6c0275a0d0e49a',
|
||||
c.get_user_id(session=None))
|
||||
self.assertIsNone(c.get_project_id(session=None))
|
||||
|
||||
def test_domain_scoped_init(self):
|
||||
self.stub_auth(json=client_fixtures.domain_scoped_token())
|
||||
|
||||
@@ -70,6 +74,10 @@ class KeystoneClientTest(utils.TestCase):
|
||||
'c4da488862bd435c9e6c0275a0d0e49a')
|
||||
self.assertEqual(c.auth_tenant_id,
|
||||
'225da22d3ce34b15877ea70b2a575f58')
|
||||
self.assertEqual('c4da488862bd435c9e6c0275a0d0e49a',
|
||||
c.get_user_id(session=None))
|
||||
self.assertEqual('225da22d3ce34b15877ea70b2a575f58',
|
||||
c.get_project_id(session=None))
|
||||
|
||||
def test_auth_ref_load(self):
|
||||
self.stub_auth(json=client_fixtures.project_scoped_token())
|
||||
|
Reference in New Issue
Block a user