From 880323e91d0a71fb599677304fe1a014399ec559 Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Wed, 21 Aug 2013 13:13:45 -0500 Subject: Re-order oauth commands and sync with keystoneclient 1) split out token and consumer 2) sync parameters with keystoneclient Change-Id: I2d529f0f9087f9939101e963af3d801497fc1171 --- openstackclient/identity/v3/consumer.py | 157 ++++++++++++++ openstackclient/identity/v3/oauth.py | 371 -------------------------------- openstackclient/identity/v3/token.py | 246 +++++++++++++++++++++ 3 files changed, 403 insertions(+), 371 deletions(-) create mode 100644 openstackclient/identity/v3/consumer.py delete mode 100644 openstackclient/identity/v3/oauth.py create mode 100644 openstackclient/identity/v3/token.py (limited to 'openstackclient') diff --git a/openstackclient/identity/v3/consumer.py b/openstackclient/identity/v3/consumer.py new file mode 100644 index 00000000..ddeae618 --- /dev/null +++ b/openstackclient/identity/v3/consumer.py @@ -0,0 +1,157 @@ +# Copyright 2012-2013 OpenStack Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +"""Identity v3 Consumer action implementations""" + +import logging +import six +import sys + +from cliff import command +from cliff import lister +from cliff import show + +from openstackclient.common import utils + + +class CreateConsumer(show.ShowOne): + """Create consumer command""" + + log = logging.getLogger(__name__ + '.CreateConsumer') + + def get_parser(self, prog_name): + parser = super(CreateConsumer, self).get_parser(prog_name) + parser.add_argument( + '--description', + metavar='', + help='New consumer description', + ) + return parser + + 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( + parsed_args.description + ) + info = {} + info.update(consumer._info) + return zip(*sorted(six.iteritems(info))) + + +class DeleteConsumer(command.Command): + """Delete consumer command""" + + log = logging.getLogger(__name__ + '.DeleteConsumer') + + def get_parser(self, prog_name): + parser = super(DeleteConsumer, self).get_parser(prog_name) + parser.add_argument( + 'consumer', + metavar='', + help='ID of consumer to delete', + ) + return parser + + def take_action(self, parsed_args): + 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) + return + + +class ListConsumer(lister.Lister): + """List consumer command""" + + log = logging.getLogger(__name__ + '.ListConsumer') + + 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() + return (columns, + (utils.get_item_properties( + s, columns, + formatters={}, + ) for s in data)) + + +class SetConsumer(command.Command): + """Set consumer command""" + + log = logging.getLogger(__name__ + '.SetConsumer') + + def get_parser(self, prog_name): + parser = super(SetConsumer, self).get_parser(prog_name) + parser.add_argument( + 'consumer', + metavar='', + help='ID of consumer to change', + ) + parser.add_argument( + '--description', + metavar='', + help='New consumer description', + ) + return parser + + def take_action(self, parsed_args): + 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) + kwargs = {} + if parsed_args.description: + kwargs['description'] = parsed_args.description + + if not len(kwargs): + 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))) + + +class ShowConsumer(show.ShowOne): + """Show consumer command""" + + log = logging.getLogger(__name__ + '.ShowConsumer') + + def get_parser(self, prog_name): + parser = super(ShowConsumer, self).get_parser(prog_name) + parser.add_argument( + 'consumer', + metavar='', + help='ID of consumer to display', + ) + return parser + + def take_action(self, parsed_args): + 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) + + info = {} + info.update(consumer._info) + return zip(*sorted(six.iteritems(info))) diff --git a/openstackclient/identity/v3/oauth.py b/openstackclient/identity/v3/oauth.py deleted file mode 100644 index a97f86c7..00000000 --- a/openstackclient/identity/v3/oauth.py +++ /dev/null @@ -1,371 +0,0 @@ -# Copyright 2012-2013 OpenStack Foundation -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# - -"""Identity v3 OAuth action implementations""" - -import logging -import six -import sys - -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) - oauth_client = self.app.client_manager.identity.oauth - keystone_token = oauth_client.authenticate( - 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""" - - log = logging.getLogger(__name__ + '.AuthorizeRequestToken') - - def get_parser(self, prog_name): - parser = super(AuthorizeRequestToken, self).get_parser(prog_name) - parser.add_argument( - '--request-key', - metavar='', - help='Consumer key', - required=True - ) - parser.add_argument( - '--roles', - metavar='', - help='Role to authorize', - required=True - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - oauth_client = self.app.client_manager.identity.oauth - - verifier_pin = oauth_client.authorize_request_token( - parsed_args.request_key, parsed_args.roles) - info = {} - info.update(verifier_pin._info) - return zip(*sorted(six.iteritems(info))) - - -class CreateAccessToken(show.ShowOne): - """Create access token command""" - - log = logging.getLogger(__name__ + '.CreateAccessToken') - - def get_parser(self, prog_name): - parser = super(CreateAccessToken, 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( - '--request-key', - metavar='', - help='Request token key', - required=True - ) - parser.add_argument( - '--request-secret', - metavar='', - help='Request token secret', - required=True - ) - parser.add_argument( - '--verifier', - metavar='', - help='Verifier Pin', - required=True - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - oauth_client = self.app.client_manager.identity.oauth - access_token = oauth_client.create_access_token( - 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))) - - -class CreateConsumer(show.ShowOne): - """Create consumer command""" - - log = logging.getLogger(__name__ + '.CreateConsumer') - - def get_parser(self, prog_name): - parser = super(CreateConsumer, self).get_parser(prog_name) - parser.add_argument( - 'name', - metavar='', - help='New consumer name', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - identity_client = self.app.client_manager.identity - consumer = identity_client.oauth.create_consumer( - parsed_args.name - ) - info = {} - info.update(consumer._info) - return zip(*sorted(six.iteritems(info))) - - -class CreateRequestToken(show.ShowOne): - """Create request token command""" - - log = logging.getLogger(__name__ + '.CreateRequestToken') - - def get_parser(self, prog_name): - parser = super(CreateRequestToken, 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( - '--roles', - metavar='', - help='Role requested', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - oauth_client = self.app.client_manager.identity.oauth - request_token = oauth_client.create_request_token( - parsed_args.consumer_key, - parsed_args.consumer_secret, - parsed_args.roles) - return zip(*sorted(six.iteritems(request_token))) - - -class DeleteConsumer(command.Command): - """Delete consumer command""" - - log = logging.getLogger(__name__ + '.DeleteConsumer') - - def get_parser(self, prog_name): - parser = super(DeleteConsumer, self).get_parser(prog_name) - parser.add_argument( - 'consumer', - metavar='', - help='Name or ID of consumer to delete', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - identity_client = self.app.client_manager.identity - consumer = utils.find_resource( - identity_client.oauth, parsed_args.consumer) - identity_client.oauth.delete_consumer(consumer.id) - return - - -class DeleteUserAuthorization(command.Command): - """Delete user authorization command""" - - log = logging.getLogger(__name__ + '.DeleteUserAuthorization') - - def get_parser(self, prog_name): - parser = super(DeleteUserAuthorization, self).get_parser(prog_name) - parser.add_argument( - 'user', - metavar='', - help='Name or Id of user', - ) - parser.add_argument( - 'access_id', - metavar='', - help='Access Id 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.oauth.delete_authorization(user, - parsed_args.access_id) - return - - -class ListConsumer(lister.Lister): - """List consumer command""" - - log = logging.getLogger(__name__ + '.ListConsumer') - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - columns = ('ID', 'Name', 'Consumer Key', 'Consumer Secret') - data = self.app.client_manager.identity.oauth.list_consumers() - return (columns, - (utils.get_item_properties( - s, columns, - formatters={}, - ) for s in data)) - - -class ListUserAuthorizations(lister.Lister): - """List user authorizations command""" - - log = logging.getLogger(__name__ + '.ListUserAuthorizations') - - def get_parser(self, prog_name): - parser = super(ListUserAuthorizations, 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 = ('Access Key', 'Consumer Key', 'Issued At', - 'Project Id', 'User Id', 'Requested Roles') - data = identity_client.oauth.list_authorizations(user) - return (columns, - (utils.get_item_properties( - s, columns, - formatters={}, - ) for s in data)) - - -class SetConsumer(command.Command): - """Set consumer command""" - - log = logging.getLogger(__name__ + '.SetConsumer') - - def get_parser(self, prog_name): - parser = super(SetConsumer, self).get_parser(prog_name) - parser.add_argument( - 'consumer', - metavar='', - help='Name or ID of consumer to change', - ) - parser.add_argument( - '--name', - metavar='', - help='New consumer name', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - identity_client = self.app.client_manager.identity - consumer = utils.find_resource( - identity_client.oauth, parsed_args.consumer) - kwargs = {} - if parsed_args.name: - kwargs['name'] = parsed_args.name - - if not len(kwargs): - sys.stdout.write("Consumer not updated, no arguments present") - return - identity_client.oauth.update_consumer(consumer.id, **kwargs) - return - - -class ShowConsumer(show.ShowOne): - """Show consumer command""" - - log = logging.getLogger(__name__ + '.ShowConsumer') - - def get_parser(self, prog_name): - parser = super(ShowConsumer, self).get_parser(prog_name) - parser.add_argument( - 'consumer', - metavar='', - help='Name or ID of consumer to display', - ) - return parser - - def take_action(self, parsed_args): - self.log.debug('take_action(%s)' % parsed_args) - identity_client = self.app.client_manager.identity - consumer = utils.find_resource( - identity_client.oauth, parsed_args.consumer) - - info = {} - info.update(consumer._info) - return zip(*sorted(six.iteritems(info))) diff --git a/openstackclient/identity/v3/token.py b/openstackclient/identity/v3/token.py new file mode 100644 index 00000000..ba667be3 --- /dev/null +++ b/openstackclient/identity/v3/token.py @@ -0,0 +1,246 @@ +# Copyright 2012-2013 OpenStack Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +"""Identity v3 Token action implementations""" + +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""" + + log = logging.getLogger(__name__ + '.AuthorizeRequestToken') + + def get_parser(self, prog_name): + parser = super(AuthorizeRequestToken, self).get_parser(prog_name) + parser.add_argument( + '--request-key', + metavar='', + help='Consumer key', + 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 + + verifier_pin = token_client.authorize_request_token( + parsed_args.request_key) + info = {} + info.update(verifier_pin._info) + return zip(*sorted(six.iteritems(info))) + + +class CreateAccessToken(show.ShowOne): + """Create access token command""" + + log = logging.getLogger(__name__ + '.CreateAccessToken') + + def get_parser(self, prog_name): + parser = super(CreateAccessToken, 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( + '--request-key', + metavar='', + help='Request token key', + required=True + ) + parser.add_argument( + '--request-secret', + metavar='', + help='Request token secret', + required=True + ) + parser.add_argument( + '--verifier', + metavar='', + help='Verifier Pin', + 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 + access_token = token_client.create_access_token( + 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))) + + +class CreateRequestToken(show.ShowOne): + """Create request token command""" + + log = logging.getLogger(__name__ + '.CreateRequestToken') + + def get_parser(self, prog_name): + parser = super(CreateRequestToken, 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( + '--role-ids', + metavar='', + help='Requested role IDs', + ) + parser.add_argument( + '--project-id', + metavar='', + help='Requested project ID', + ) + 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( + parsed_args.consumer_key, + parsed_args.consumer_secret, + parsed_args.role_ids, + parsed_args.project_id) + return zip(*sorted(six.iteritems(request_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