From d5aaba9d8284ea1cafe137b367ef9c9297b31e75 Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Mon, 9 Dec 2013 17:50:07 -0600 Subject: Refactor oauth1 code for updates The keystoneclient code for oauth1 support has changed. As such, we should remove the delete, list and authenticate functions, since they are not in keystoneclient. Also, we must now pass in the project id when creating a request token. Additionally we must now pass in roles when authorizing a request token. Added functional tests to ensure output and input args are the same. bp add-oauth-support Change-Id: I559c18a73ad95a0c8b7a6a95f463b78334186f61 --- openstackclient/identity/v3/consumer.py | 23 ++--- openstackclient/identity/v3/token.py | 156 ++++++-------------------------- 2 files changed, 38 insertions(+), 141 deletions(-) (limited to 'openstackclient/identity') diff --git a/openstackclient/identity/v3/consumer.py b/openstackclient/identity/v3/consumer.py index 11814e5c..7f546035 100644 --- a/openstackclient/identity/v3/consumer.py +++ b/openstackclient/identity/v3/consumer.py @@ -43,7 +43,7 @@ class CreateConsumer(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - consumer = identity_client.consumers.create_consumer( + consumer = identity_client.oauth1.consumers.create( parsed_args.description ) info = {} @@ -69,8 +69,8 @@ class DeleteConsumer(command.Command): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity consumer = utils.find_resource( - identity_client.consumers, parsed_args.consumer) - identity_client.consumers.delete_consumer(consumer.id) + identity_client.oauth1.consumers, parsed_args.consumer) + identity_client.oauth1.consumers.delete(consumer.id) return @@ -82,7 +82,7 @@ class ListConsumer(lister.Lister): def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) columns = ('ID', 'Description') - data = self.app.client_manager.identity.consumers.list_consumers() + data = self.app.client_manager.identity.oauth1.consumers.list() return (columns, (utils.get_item_properties( s, columns, @@ -113,7 +113,7 @@ class SetConsumer(command.Command): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity consumer = utils.find_resource( - identity_client.consumers, parsed_args.consumer) + identity_client.oauth1.consumers, parsed_args.consumer) kwargs = {} if parsed_args.description: kwargs['description'] = parsed_args.description @@ -122,14 +122,9 @@ class SetConsumer(command.Command): sys.stdout.write("Consumer not updated, no arguments present") return - consumer = identity_client.consumers.update_consumer( - consumer.id, - **kwargs - ) - - info = {} - info.update(consumer._info) - return zip(*sorted(six.iteritems(info))) + consumer = identity_client.oauth1.consumers.update( + consumer.id, **kwargs) + return class ShowConsumer(show.ShowOne): @@ -150,7 +145,7 @@ class ShowConsumer(show.ShowOne): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity consumer = utils.find_resource( - identity_client.consumers, parsed_args.consumer) + identity_client.oauth1.consumers, parsed_args.consumer) info = {} info.update(consumer._info) diff --git a/openstackclient/identity/v3/token.py b/openstackclient/identity/v3/token.py index a84d724a..b038e3fe 100644 --- a/openstackclient/identity/v3/token.py +++ b/openstackclient/identity/v3/token.py @@ -18,55 +18,8 @@ import logging import six -from cliff import command -from cliff import lister from cliff import show -from openstackclient.common import utils - - -class AuthenticateAccessToken(show.ShowOne): - """Authenticate access token to receive keystone token""" - - api = 'identity' - log = logging.getLogger(__name__ + '.AuthenticateAccessToken') - - def get_parser(self, prog_name): - parser = super(AuthenticateAccessToken, self).get_parser(prog_name) - parser.add_argument( - '--consumer-key', - metavar='', - help='Consumer key', - required=True - ) - parser.add_argument( - '--consumer-secret', - metavar='', - help='Consumer secret', - required=True - ) - parser.add_argument( - '--access-key', - metavar='', - help='Access token key', - required=True - ) - parser.add_argument( - '--access-secret', - metavar='', - help='Access token secret', - required=True - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - token_client = self.app.client_manager.identity.tokens - keystone_token = token_client.authenticate_access_token( - parsed_args.consumer_key, parsed_args.consumer_secret, - parsed_args.access_key, parsed_args.access_secret) - return zip(*sorted(six.iteritems(keystone_token))) - class AuthorizeRequestToken(show.ShowOne): """Authorize request token command""" @@ -78,17 +31,28 @@ class AuthorizeRequestToken(show.ShowOne): parser.add_argument( '--request-key', metavar='', - help='Consumer key', + help='Request token key', + required=True + ) + parser.add_argument( + '--role-ids', + metavar='', + help='Requested role IDs', required=True ) return parser def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - token_client = self.app.client_manager.identity.tokens + self.log.debug('take_action(%s)' % parsed_args) + identity_client = self.app.client_manager.identity - verifier_pin = token_client.authorize_request_token( - parsed_args.request_key) + roles = [] + for r_id in parsed_args.role_ids.split(): + roles.append(r_id) + + verifier_pin = identity_client.oauth1.request_tokens.authorize( + parsed_args.request_key, + roles) info = {} info.update(verifier_pin._info) return zip(*sorted(six.iteritems(info))) @@ -134,13 +98,15 @@ class CreateAccessToken(show.ShowOne): return parser def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - token_client = self.app.client_manager.identity.tokens - access_token = token_client.create_access_token( + self.log.debug('take_action(%s)' % parsed_args) + token_client = self.app.client_manager.identity.oauth1.access_tokens + access_token = token_client.create( parsed_args.consumer_key, parsed_args.consumer_secret, parsed_args.request_key, parsed_args.request_secret, parsed_args.verifier) - return zip(*sorted(six.iteritems(access_token))) + info = {} + info.update(access_token._info) + return zip(*sorted(six.iteritems(info))) class CreateRequestToken(show.ShowOne): @@ -162,27 +128,24 @@ class CreateRequestToken(show.ShowOne): help='Consumer secret', required=True ) - parser.add_argument( - '--role-ids', - metavar='', - help='Requested role IDs', - ) parser.add_argument( '--project-id', metavar='', help='Requested project ID', + required=True ) return parser def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - token_client = self.app.client_manager.identity.tokens - request_token = token_client.create_request_token( + self.log.debug('take_action(%s)' % parsed_args) + token_client = self.app.client_manager.identity.oauth1.request_tokens + request_token = token_client.create( parsed_args.consumer_key, parsed_args.consumer_secret, - parsed_args.role_ids, parsed_args.project_id) - return zip(*sorted(six.iteritems(request_token))) + info = {} + info.update(request_token._info) + return zip(*sorted(six.iteritems(info))) class CreateToken(show.ShowOne): @@ -201,64 +164,3 @@ class CreateToken(show.ShowOne): if 'tenant_id' in token: token['project_id'] = token.pop('tenant_id') return zip(*sorted(six.iteritems(token))) - - -class DeleteAccessToken(command.Command): - """Delete access token command""" - - log = logging.getLogger(__name__ + '.DeleteAccessToken') - - def get_parser(self, prog_name): - parser = super(DeleteAccessToken, self).get_parser(prog_name) - parser.add_argument( - 'user', - metavar='', - help='Name or ID of user', - ) - parser.add_argument( - 'access_key', - metavar='', - help='Access token to be deleted', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - - identity_client = self.app.client_manager.identity - user = utils.find_resource( - identity_client.users, parsed_args.user).id - identity_client.tokens.delete_access_token(user, - parsed_args.access_key) - return - - -class ListAccessToken(lister.Lister): - """List access tokens command""" - - log = logging.getLogger(__name__ + '.ListAccessToken') - - def get_parser(self, prog_name): - parser = super(ListAccessToken, self).get_parser(prog_name) - parser.add_argument( - 'user', - metavar='', - help='Name or ID of user', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)', parsed_args) - - identity_client = self.app.client_manager.identity - user = utils.find_resource( - identity_client.users, parsed_args.user).id - - columns = ('ID', 'Consumer ID', 'Expires At', - 'Project Id', 'Authorizing User Id') - data = identity_client.tokens.list_access_tokens(user) - return (columns, - (utils.get_item_properties( - s, columns, - formatters={}, - ) for s in data)) -- cgit v1.2.1