From 2bcfe0b4c82ed3a333e3ffcf1d11423d57c2b761 Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Thu, 14 Jun 2012 14:28:09 +0000 Subject: [PATCH] Allow specify tenant:user in user. We allow having the syntax tenant:user in user since this would make things easier when switching from auth 1.0 to auth 2.0 and not having to specify a tenant_name. In the feature we should use the auth functions from keystoneclient and be done with those changes, we could then auth by user/tenant-ID. Change-Id: Ie49748105a678fb9369494e77d41d934d57a39a7 --- swiftclient/client.py | 2 ++ tests/__init__.py | 0 tests/test_swiftclient.py | 14 ++++++++++++++ 3 files changed, 16 insertions(+) create mode 100644 tests/__init__.py diff --git a/swiftclient/client.py b/swiftclient/client.py index 2b780605..79e6594f 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -282,6 +282,8 @@ def get_auth(url, user, key, snet=False, tenant_name=None, auth_version="1.0"): if auth_version in ["1.0", "1"]: return _get_auth_v1_0(url, user, key, snet) elif auth_version in ["2.0", "2"]: + if not tenant_name and ':' in user: + (tenant_name, user) = user.split(':') if not tenant_name: raise ClientException('No tenant specified') return _get_auth_v2_0(url, user, tenant_name, key, snet) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_swiftclient.py b/tests/test_swiftclient.py index bf8adb90..b165dee3 100644 --- a/tests/test_swiftclient.py +++ b/tests/test_swiftclient.py @@ -201,6 +201,20 @@ class TestGetAuth(MockHttpTest): 'http://www.tests.com', 'asdf', 'asdf', auth_version='2.0') + def test_auth_v2_with_tenant_user_in_user(self): + def read(*args, **kwargs): + acct_url = 'http://127.0.01/AUTH_FOO' + body = {'access': {'serviceCatalog': + [{u'endpoints': [{'publicURL': acct_url}], + 'type': 'object-store'}], + 'token': {'id': 'XXXXXXX'}}} + return c.json_dumps(body) + c.http_connection = self.fake_http_connection(200, return_read=read) + url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf', + auth_version="2.0") + self.assertTrue(url.startswith("http")) + self.assertTrue(token) + class TestGetAccount(MockHttpTest):