Merge "Allow fetching user_id/project_id from auth"
This commit is contained in:
@@ -108,6 +108,36 @@ class BaseAuthPlugin(object):
|
|||||||
"""
|
"""
|
||||||
return False
|
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
|
@classmethod
|
||||||
def get_options(cls):
|
def get_options(cls):
|
||||||
"""Return the list of parameters associated with the auth plugin.
|
"""Return the list of parameters associated with the auth plugin.
|
||||||
|
@@ -236,6 +236,12 @@ class BaseIdentityPlugin(base.BaseAuthPlugin):
|
|||||||
|
|
||||||
return url
|
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()
|
@utils.positional()
|
||||||
def get_discovery(self, session, url, authenticated=None):
|
def get_discovery(self, session, url, authenticated=None):
|
||||||
"""Return the discovery object for a URL.
|
"""Return the discovery object for a URL.
|
||||||
|
@@ -362,6 +362,12 @@ class HTTPClient(baseclient.Client, base.BaseAuthPlugin):
|
|||||||
else:
|
else:
|
||||||
return self.management_url
|
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
|
@auth_token.setter
|
||||||
def auth_token(self, value):
|
def auth_token(self, value):
|
||||||
"""Override the auth_token.
|
"""Override the auth_token.
|
||||||
|
@@ -65,6 +65,13 @@ class CommonIdentityTests(object):
|
|||||||
|
|
||||||
def stub_auth_data(self, **kwargs):
|
def stub_auth_data(self, **kwargs):
|
||||||
token = self.get_auth_data(**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)
|
self.stub_auth(json=token)
|
||||||
|
|
||||||
@abc.abstractproperty
|
@abc.abstractproperty
|
||||||
@@ -221,6 +228,13 @@ class CommonIdentityTests(object):
|
|||||||
self.assertIsNone(a.auth_ref)
|
self.assertIsNone(a.auth_ref)
|
||||||
self.assertFalse(a.invalidate())
|
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):
|
class V3(CommonIdentityTests, utils.TestCase):
|
||||||
|
|
||||||
|
@@ -53,3 +53,11 @@ class TokenEndpointTest(utils.TestCase):
|
|||||||
|
|
||||||
self.assertIn('token', opt_names)
|
self.assertIn('token', opt_names)
|
||||||
self.assertIn('endpoint', 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):
|
class KeystoneClientTest(utils.TestCase):
|
||||||
|
|
||||||
def test_unscoped_init(self):
|
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',
|
c = client.Client(username='exampleuser',
|
||||||
password='password',
|
password='password',
|
||||||
@@ -38,9 +39,12 @@ class KeystoneClientTest(utils.TestCase):
|
|||||||
self.assertFalse(c.auth_ref.project_scoped)
|
self.assertFalse(c.auth_ref.project_scoped)
|
||||||
self.assertIsNone(c.auth_ref.trust_id)
|
self.assertIsNone(c.auth_ref.trust_id)
|
||||||
self.assertFalse(c.auth_ref.trust_scoped)
|
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):
|
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',
|
c = client.Client(username='exampleuser',
|
||||||
password='password',
|
password='password',
|
||||||
@@ -53,6 +57,9 @@ class KeystoneClientTest(utils.TestCase):
|
|||||||
self.assertIsNone(c.auth_ref.trust_id)
|
self.assertIsNone(c.auth_ref.trust_id)
|
||||||
self.assertFalse(c.auth_ref.trust_scoped)
|
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):
|
def test_auth_ref_load(self):
|
||||||
self.stub_auth(json=client_fixtures.project_scoped_token())
|
self.stub_auth(json=client_fixtures.project_scoped_token())
|
||||||
|
|
||||||
|
@@ -40,6 +40,10 @@ class KeystoneClientTest(utils.TestCase):
|
|||||||
'c4da488862bd435c9e6c0275a0d0e49a')
|
'c4da488862bd435c9e6c0275a0d0e49a')
|
||||||
self.assertFalse(c.has_service_catalog())
|
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):
|
def test_domain_scoped_init(self):
|
||||||
self.stub_auth(json=client_fixtures.domain_scoped_token())
|
self.stub_auth(json=client_fixtures.domain_scoped_token())
|
||||||
|
|
||||||
@@ -70,6 +74,10 @@ class KeystoneClientTest(utils.TestCase):
|
|||||||
'c4da488862bd435c9e6c0275a0d0e49a')
|
'c4da488862bd435c9e6c0275a0d0e49a')
|
||||||
self.assertEqual(c.auth_tenant_id,
|
self.assertEqual(c.auth_tenant_id,
|
||||||
'225da22d3ce34b15877ea70b2a575f58')
|
'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):
|
def test_auth_ref_load(self):
|
||||||
self.stub_auth(json=client_fixtures.project_scoped_token())
|
self.stub_auth(json=client_fixtures.project_scoped_token())
|
||||||
|
Reference in New Issue
Block a user