From d993d029d4c7b9a60e0e0711e3ed53fe27297247 Mon Sep 17 00:00:00 2001 From: "Ryan S. Brown" Date: Fri, 4 Dec 2015 17:58:55 -0500 Subject: [PATCH] Add CLI support for signed URLs Change-Id: Ibc251954399d37307f695b6bcd59f1eb8864cb5c --- setup.cfg | 1 + zaqarclient/queues/v2/cli.py | 62 ++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/setup.cfg b/setup.cfg index 77ce8e2c..2810dd8b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -89,6 +89,7 @@ openstack.messaging.v2 = subscription_delete = zaqarclient.queues.v2.cli:DeleteSubscription subscription_show = zaqarclient.queues.v2.cli:ShowSubscription subscription_list = zaqarclient.queues.v2.cli:ListSubscriptions + queue_signed_url = zaqarclient.queues.v2.cli:CreateSignedUrl openstack.cli.extension = messaging = zaqarclient.queues.cli diff --git a/zaqarclient/queues/v2/cli.py b/zaqarclient/queues/v2/cli.py index ab98bb0b..d6a7f298 100644 --- a/zaqarclient/queues/v2/cli.py +++ b/zaqarclient/queues/v2/cli.py @@ -311,3 +311,65 @@ class ListSubscriptions(lister.Lister): columns = ('ID', 'Subscriber', 'TTL', 'Options') return (columns, (utils.get_item_properties(s, columns) for s in data)) + + +class CreateSignedUrl(show.ShowOne): + """Create a queue""" + + log = logging.getLogger(__name__ + ".CreateSignedUrl") + + def get_parser(self, prog_name): + parser = super(CreateSignedUrl, self).get_parser(prog_name) + parser.add_argument( + "queue_name", + metavar="", + help="Name of the queue") + parser.add_argument( + "--paths", + metavar="", + default="messages", + help="Allowed paths in a comma-separated list. " + "Options: messages, subscriptions, claims") + parser.add_argument( + "--ttl-seconds", + metavar="", + type=int, + help="Length of time (in seconds) until the signature expires") + parser.add_argument( + "--methods", + metavar="", + default="GET", + help="HTTP methods to allow as a comma-separated list. " + "Options: GET, HEAD, OPTIONS, POST, PUT, DELETE") + return parser + + allowed_paths = ("messages", "subscriptions", "claims") + + def take_action(self, parsed_args): + client = self.app.client_manager.messaging + queue = client.queue(parsed_args.queue_name, auto_create=False) + + paths = parsed_args.paths.split(',') + if not all([p in self.allowed_paths for p in paths]): + print("Invalid path supplied! Received {}. " + "Valid paths are: messages, subscriptions, " + "claims".format(','.join(paths))) + + kwargs = { + 'methods': parsed_args.methods.split(','), + 'paths': paths, + } + + if parsed_args.ttl_seconds: + kwargs['ttl_seconds'] = parsed_args.ttl_seconds + + data = queue.signed_url(**kwargs) + + fields = ('Paths', 'Methods', 'Expires', 'Signature', 'Project ID') + return fields, ( + ','.join(data['paths']), + ','.join(data['methods']), + data['expires'], + data['signature'], + data['project'] + )