No auth when token and endpoint are passed
The latest change to the auth_required logic introduced a bug were even when the token and endpoint were passed, authentication was being required. This patch fixes that issue and makes sure that authentication is not required when these 2 arguements are present. Closes-bug: #1499540 Change-Id: I4c9c15ba526378970da5461511ed922d42c5a9f9
This commit is contained in:
parent
586d40131d
commit
c31c136557
glanceclient
@ -443,18 +443,13 @@ class OpenStackImagesShell(object):
|
|||||||
return ks_session
|
return ks_session
|
||||||
|
|
||||||
def _get_endpoint_and_token(self, args):
|
def _get_endpoint_and_token(self, args):
|
||||||
image_url = self._get_image_url(args)
|
endpoint = self._get_image_url(args)
|
||||||
auth_token = args.os_auth_token
|
auth_token = args.os_auth_token
|
||||||
|
|
||||||
auth_reqd = (not (auth_token and image_url) or
|
auth_req = (hasattr(args, 'func') and
|
||||||
(hasattr(args, 'func') and
|
utils.is_authentication_required(args.func))
|
||||||
utils.is_authentication_required(args.func)))
|
|
||||||
|
|
||||||
if not auth_reqd:
|
|
||||||
endpoint = image_url
|
|
||||||
token = args.os_auth_token
|
|
||||||
else:
|
|
||||||
|
|
||||||
|
if auth_req and not (endpoint and auth_token):
|
||||||
if not args.os_username:
|
if not args.os_username:
|
||||||
raise exc.CommandError(
|
raise exc.CommandError(
|
||||||
_("You must provide a username via"
|
_("You must provide a username via"
|
||||||
@ -527,7 +522,7 @@ class OpenStackImagesShell(object):
|
|||||||
'key': args.os_key
|
'key': args.os_key
|
||||||
}
|
}
|
||||||
ks_session = self._get_keystone_session(**kwargs)
|
ks_session = self._get_keystone_session(**kwargs)
|
||||||
token = args.os_auth_token or ks_session.get_token()
|
auth_token = args.os_auth_token or ks_session.get_token()
|
||||||
|
|
||||||
endpoint_type = args.os_endpoint_type or 'public'
|
endpoint_type = args.os_endpoint_type or 'public'
|
||||||
service_type = args.os_service_type or 'image'
|
service_type = args.os_service_type or 'image'
|
||||||
@ -536,7 +531,7 @@ class OpenStackImagesShell(object):
|
|||||||
interface=endpoint_type,
|
interface=endpoint_type,
|
||||||
region_name=args.os_region_name)
|
region_name=args.os_region_name)
|
||||||
|
|
||||||
return endpoint, token
|
return endpoint, auth_token
|
||||||
|
|
||||||
def _get_versioned_client(self, api_version, args):
|
def _get_versioned_client(self, api_version, args):
|
||||||
endpoint, token = self._get_endpoint_and_token(args)
|
endpoint, token = self._get_endpoint_and_token(args)
|
||||||
|
@ -295,6 +295,25 @@ class ShellTest(testutils.TestCase):
|
|||||||
glance_shell.main(args.split())
|
glance_shell.main(args.split())
|
||||||
self._assert_auth_plugin_args()
|
self._assert_auth_plugin_args()
|
||||||
|
|
||||||
|
@mock.patch('glanceclient.Client')
|
||||||
|
def test_endpoint_token_no_auth_req(self, mock_client):
|
||||||
|
|
||||||
|
def verify_input(version=None, endpoint=None, *args, **kwargs):
|
||||||
|
self.assertIn('token', kwargs)
|
||||||
|
self.assertEqual(TOKEN_ID, kwargs['token'])
|
||||||
|
self.assertEqual(DEFAULT_IMAGE_URL, endpoint)
|
||||||
|
return mock.MagicMock()
|
||||||
|
|
||||||
|
mock_client.side_effect = verify_input
|
||||||
|
glance_shell = openstack_shell.OpenStackImagesShell()
|
||||||
|
args = ['--os-image-api-version', '2',
|
||||||
|
'--os-auth-token', TOKEN_ID,
|
||||||
|
'--os-image-url', DEFAULT_IMAGE_URL,
|
||||||
|
'image-list']
|
||||||
|
|
||||||
|
glance_shell.main(args)
|
||||||
|
self.assertEqual(1, mock_client.call_count)
|
||||||
|
|
||||||
@mock.patch('sys.stdin', side_effect=mock.MagicMock)
|
@mock.patch('sys.stdin', side_effect=mock.MagicMock)
|
||||||
@mock.patch('getpass.getpass', return_value='password')
|
@mock.patch('getpass.getpass', return_value='password')
|
||||||
@mock.patch('glanceclient.v2.client.Client')
|
@mock.patch('glanceclient.v2.client.Client')
|
||||||
|
Loading…
Reference in New Issue
Block a user