diff options
author | Josh Gachnang <josh@pcsforeducation.com> | 2014-06-25 13:28:42 -0700 |
---|---|---|
committer | Josh Gachnang <josh@pcsforeducation.com> | 2014-07-11 13:05:22 -0700 |
commit | def0e0a6435deee5c55b7859e1b132590ea0860c (patch) | |
tree | b4c458bab09104a47925edde2d794e6a5ebc48ea /swiftclient/shell.py | |
parent | 3d0de79e26e2aa6285742c60aca3c164e9c2fbb9 (diff) | |
download | python-swiftclient-def0e0a6435deee5c55b7859e1b132590ea0860c.tar.gz |
Adding Swift Temporary URL support
Temporary URLs allow a user to sign an object URL with a shared
secret to so that the object can be downloaded without auth for
a specified amount of time.
http://docs.openstack.org/trunk/config-reference/content/object-storage-tempurl.html
Change-Id: Ife0b6c98c975e074d4dad0a31145573b784747c5
Diffstat (limited to 'swiftclient/shell.py')
-rwxr-xr-x | swiftclient/shell.py | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/swiftclient/shell.py b/swiftclient/shell.py index d035388..12eeb63 100755 --- a/swiftclient/shell.py +++ b/swiftclient/shell.py @@ -38,7 +38,7 @@ except ImportError: from swiftclient import Connection, RequestException from swiftclient import command_helpers -from swiftclient.utils import config_true_value, prt_bytes +from swiftclient.utils import config_true_value, prt_bytes, generate_temp_url from swiftclient.multithreading import MultiThreadingManager from swiftclient.exceptions import ClientException from swiftclient import __version__ as client_version @@ -1240,6 +1240,45 @@ def st_capabilities(parser, args, thread_manager): st_info = st_capabilities +st_tempurl_options = '<method> <seconds> <path> <key>' + +st_tempurl_help = ''' +Generates a temporary URL for a Swift object. + +Positions arguments: + [method] An HTTP method to allow for this temporary URL. + Usually 'GET' or 'PUT'. + [seconds] The amount of time in seconds the temporary URL will + be valid for. + [path] The full path to the Swift object. Example: + /v1/AUTH_account/c/o. + [key] The secret temporary URL key set on the Swift cluster. + To set a key, run \'swift post -m + "Temp-URL-Key:b3968d0207b54ece87cccc06515a89d4"\' +'''.strip('\n') + + +def st_tempurl(parser, args, thread_manager): + (options, args) = parse_args(parser, args) + args = args[1:] + if len(args) < 4: + thread_manager.error('Usage: %s tempurl %s\n%s', BASENAME, + st_tempurl_options, st_tempurl_help) + return + method, seconds, path, key = args[:4] + try: + seconds = int(seconds) + except ValueError: + thread_manager.error('Seconds must be an integer') + return + if method.upper() not in ['GET', 'PUT', 'HEAD', 'POST', 'DELETE']: + thread_manager.print_msg('WARNING: Non default HTTP method %s for ' + 'tempurl specified, possibly an error' % + method.upper()) + url = generate_temp_url(path, seconds, key, method) + thread_manager.print_msg(url) + + def split_headers(options, prefix='', thread_manager=None): """ Splits 'Key: Value' strings and returns them as a dictionary. @@ -1269,6 +1308,10 @@ def parse_args(parser, args, enforce_requires=True): args = ['-h'] (options, args) = parser.parse_args(args) + # Short circuit for tempurl, which doesn't need auth + if len(args) > 0 and args[0] == 'tempurl': + return options, args + if (not (options.auth and options.user and options.key)): # Use 2.0 auth if none of the old args are present options.auth_version = '2.0' @@ -1351,6 +1394,7 @@ Positional arguments: or object. upload Uploads files or directories to the given container. capabilities List cluster capabilities. + tempurl Create a temporary URL Examples: @@ -1488,7 +1532,7 @@ Examples: parser.enable_interspersed_args() commands = ('delete', 'download', 'list', 'post', - 'stat', 'upload', 'capabilities', 'info') + 'stat', 'upload', 'capabilities', 'info', 'tempurl') if not args or args[0] not in commands: parser.print_usage() if args: |