From bd57b024d014faea73e62c3d40f0608418e1f1b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padilla?= Date: Thu, 19 Mar 2015 09:10:34 -0400 Subject: [PATCH] Fix after removing jwt.header() --- bin/jwt | 89 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 28 deletions(-) diff --git a/bin/jwt b/bin/jwt index 2802ae06..2f8326ce 100755 --- a/bin/jwt +++ b/bin/jwt @@ -3,17 +3,19 @@ from __future__ import print_function import optparse -import jwt import sys import json import time +import jwt __prog__ = 'jwt' -__version__ = '0.1' +__version__ = '1.0.0' def fix_optionparser_whitespace(input): - """Hacks around whitespace hypersensitivity in OptionParser""" + """ + Hacks around whitespace hypersensitivity in OptionParser + """ newline = ' ' * 80 doublespace = '\033[8m.\033[0m' * 2 return input.replace(' ', doublespace).replace('\n', newline) @@ -35,18 +37,39 @@ separated by equals (=) as input. Examples: The exp key is special and can take an offset to current Unix time. """ - p = optparse.OptionParser(description=fix_optionparser_whitespace(main.__doc__), - prog=__prog__, - version='%s %s' % (__prog__, __version__), - usage='%prog [options] input') - p.add_option('-n', '--no-verify', action='store_false', dest='verify', default=True, - help='ignore signature verification on decode') - p.add_option('--key', dest='key', metavar='KEY', default=None, - help='set the secret key to sign with') - p.add_option('--alg', dest='algorithm', metavar='ALG', default='HS256', - help='set crypto algorithm to sign with. default=HS256') + p = optparse.OptionParser( + description=fix_optionparser_whitespace(main.__doc__), + prog=__prog__, + version='%s %s' % (__prog__, __version__), + usage='%prog [options] input' + ) + + p.add_option( + '-n', '--no-verify', + action='store_false', + dest='verify', + default=True, + help='ignore signature verification on decode' + ) + + p.add_option( + '--key', + dest='key', + metavar='KEY', + default=None, + help='set the secret key to sign with' + ) + + p.add_option( + '--alg', + dest='algorithm', + metavar='ALG', + default='HS256', + help='set crypto algorithm to sign with. default=HS256' + ) options, arguments = p.parse_args() + if len(arguments) > 0 or not sys.stdin.isatty(): # Try to decode try: @@ -54,31 +77,32 @@ The exp key is special and can take an offset to current Unix time. token = sys.stdin.read() else: token = arguments[0] + token = token.encode('utf-8') - valid_jwt = jwt.header(token) - if valid_jwt: - try: - print(json.dumps(jwt.decode(token, key=options.key, verify=options.verify))) - sys.exit(0) - except jwt.DecodeError as e: - print(e) - sys.exit(1) - except jwt.DecodeError: - pass + data = jwt.decode(token, key=options.key, verify=options.verify) + + print(json.dumps(data)) + sys.exit(0) + except jwt.DecodeError as e: + print(e) + sys.exit(1) # Try to encode if options.key is None: - print("Key is required when encoding. See --help for usage.") + print('Key is required when encoding. See --help for usage.') sys.exit(1) # Build payload object to encode payload = {} + for arg in arguments: try: - k,v = arg.split('=', 1) + k, v = arg.split('=', 1) + # exp +offset special case? if k == 'exp' and v[0] == '+' and len(v) > 1: v = str(int(time.time()+int(v[1:]))) + # Cast to integer? if v.isdigit(): v = int(v) @@ -88,17 +112,26 @@ The exp key is special and can take an offset to current Unix time. v = float(v) except ValueError: pass + # Cast to true, false, or null? constants = {'true': True, 'false': False, 'null': None} + if v in constants: v = constants[v] + payload[k] = v except ValueError: - print("Invalid encoding input at {}".format(arg)) + print('Invalid encoding input at {}'.format(arg)) sys.exit(1) try: - print(jwt.encode(payload, key=options.key, algorithm=options.algorithm)) + token = jwt.encode( + payload, + key=options.key, + algorithm=options.algorithm + ) + + print(token) sys.exit(0) except Exception as e: print(e) @@ -107,4 +140,4 @@ The exp key is special and can take an offset to current Unix time. p.print_help() if __name__ == '__main__': - main() + main()