Unverified Commit 2a39fcaf authored by Kali Kaneko's avatar Kali Kaneko
Browse files

[refactor] beautify cli output

parent 44bfc93d
......@@ -18,6 +18,7 @@
"""
Bitmask Command Line interface: zmq client.
"""
import json
import sys
from colorama import Fore
......@@ -31,30 +32,30 @@ from leap.bitmask.cli.user import User
class BitmaskCLI(Command):
usage = '''bitmask_cli <command> [<args>]
usage = '''bitmaskctl <command> [<args>]
Controls the Bitmask application.
SERVICE COMMANDS:
user Handles Bitmask accounts
mail Bitmask Encrypted Mail
eip Encrypted Internet Proxy
keys Bitmask Keymanager
user Handles Bitmask accounts
mail Bitmask Encrypted Mail
eip Encrypted Internet Proxy
keys Bitmask Keymanager
GENERAL COMMANDS:
version prints version number and exit
launch launch the Bitmask backend daemon
shutdown shutdown Bitmask backend daemon
status displays general status about the running Bitmask services
stats show some debug info about bitmask-core
help show this help message
version prints version number and exit
launch launch the Bitmask backend daemon
shutdown shutdown Bitmask backend daemon
status displays general status about the running Bitmask services
stats show some debug info about bitmask-core
help show this help message
'''
epilog = ("Use 'bitmask_cli <command> help' to learn more "
epilog = ("Use 'bitmaskctl <command> help' to learn more "
"about each command.")
commands = ['shutdown', 'status', 'stats']
commands = ['shutdown', 'stats']
def user(self, raw_args):
user = User()
......@@ -82,9 +83,26 @@ GENERAL COMMANDS:
return defer.succeed(None)
def version(self, raw_args):
print Fore.GREEN + 'bitmask_cli: 0.0.1' + Fore.RESET
print(Fore.GREEN + 'bitmask_cli: ' + Fore.RESET + '0.0.1')
self.data = ['version']
return self._send()
return self._send(printer=self._print_version)
def _print_version(self, version):
corever = version['version_core']
print(Fore.GREEN + 'bitmask_core: ' + Fore.RESET + corever)
def status(self, raw_args):
self.data = ['status']
return self._send(printer=self._print_status)
def _print_status(self, status):
statusdict = json.loads(status)
for key, value in statusdict.items():
color = Fore.GREEN
if value == 'stopped':
color = Fore.RED
print(key.ljust(10) + ': ' + color +
value + Fore.RESET)
def execute():
......
......@@ -31,15 +31,28 @@ from txzmq import ZmqRequestTimeoutError
from leap.bitmask.core import ENDPOINT
appname = 'bitmaskctl'
def _print_result(result):
print Fore.GREEN + '%s' % result + Fore.RESET
def default_dict_printer(result):
for key, value in result.items():
if value is None:
value = str(value)
print(Fore.RESET + key.ljust(10) + Fore.GREEN + value + Fore.RESET)
class Command(object):
"""A generic command dispatcher.
Any command in the class attribute `commands` will be dispached and
represented with a generic printer."""
service = ''
usage = '''%s %s <subcommand>''' % tuple(sys.argv[:2])
epilog = ("Use '%s %s <subcommand> --help' to learn more "
"about each command." % tuple(sys.argv[:2]))
usage = '''{name} <subcommand>'''.format(name=appname)
epilog = ("Use bitmaskctl <subcommand> --help' to learn more "
"about each command.")
commands = []
def __init__(self):
......@@ -61,9 +74,11 @@ class Command(object):
except SystemExit:
return defer.succeed(None)
# if command is in the default list, send the bare command
# and use the default printer
if args.command in self.commands:
self.data += [args.command]
return self._send()
return self._send(printer=default_dict_printer)
elif (args.command == 'execute' or
args.command.startswith('_') or
......
......@@ -17,16 +17,14 @@
"""
Bitmask Command Line interface: eip
"""
import sys
from leap.bitmask.cli.command import Command
from leap.bitmask.cli.command import appname, Command
class Eip(Command):
service = 'eip'
usage = '''%s eip <subcommand>
usage = '''{name} eip <subcommand>
Bitmask encrypted internet service
Bitmask Encrypted Internet Service
SUBCOMMANDS:
......@@ -34,6 +32,6 @@ SUBCOMMANDS:
stop Stop service
status Display status about service
''' % sys.argv[0]
'''.format(name=appname)
commands = ['start', 'stop', 'status']
......@@ -22,13 +22,13 @@ import sys
from colorama import Fore
from leap.bitmask.cli.command import Command
from leap.bitmask.cli.command import appname, Command
from leap.keymanager.validation import ValidationLevels
class Keys(Command):
service = 'keys'
usage = '''%s keys <subcommand>
usage = '''{name} keys <subcommand>
Bitmask Keymanager management service
......@@ -38,8 +38,7 @@ SUBCOMMANDS:
export Export a given key
insert Insert a key to the key storage
delete Delete a key from the key storage
''' % sys.argv[0]
'''.format(name=appname)
def list(self, raw_args):
parser = argparse.ArgumentParser(
......@@ -104,21 +103,22 @@ SUBCOMMANDS:
return self._send()
def _print_key_list(self, keys):
print Fore.GREEN
for key in keys:
print key["fingerprint"] + " " + key['address']
print Fore.RESET
print(Fore.GREEN +
key["fingerprint"] + " " + key['address'] +
Fore.RESET)
def _print_key(self, key):
print Fore.GREEN
print "Uids: " + ', '.join(key['uids'])
print "Fingerprint: " + key['fingerprint']
print "Length: " + str(key['length'])
print "Expiration: " + key['expiry_date']
print "Validation: " + key['validation']
print("Used: " + "sig:" + str(key['sign_used']) +
", encr:" + str(key['encr_used']))
print "Refresed: " + key['refreshed_at']
print Fore.RESET
print ""
print key['key_data']
print(Fore.GREEN)
print("Uids: " + ', '.join(key['uids']))
print("Fingerprint:" + key['fingerprint'])
print("Length: " + str(key['length']))
print("Expiration: " + key['expiry_date'])
print("Validation: " + key['validation'])
print("Used: " + "sig:" +
str(key['sign_used']) + ", encr:" +
str(key['encr_used']))
print("Refreshed: " + key['refreshed_at'])
print(Fore.RESET)
print("")
print(key['key_data'])
......@@ -17,16 +17,14 @@
"""
Bitmask Command Line interface: mail
"""
import sys
from leap.bitmask.cli.command import Command
from leap.bitmask.cli.command import appname, Command
class Mail(Command):
service = 'mail'
usage = '''%s mail <subcommand>
usage = '''{name} mail <subcommand>
Bitmask encrypted internet service
Bitmask Encrypted Email service
SUBCOMMANDS:
......@@ -36,7 +34,7 @@ SUBCOMMANDS:
get-token Returns token for the mail service
get-smtp-certificate Downloads a new smtp certificate
''' % sys.argv[0]
'''.format(name=appname)
commands = ['enable', 'disable', 'status', 'get-token',
'get-smtp-certificate']
......@@ -21,23 +21,23 @@ import argparse
import getpass
import sys
from leap.bitmask.cli.command import Command
from leap.bitmask.cli import command
class User(Command):
class User(command.Command):
service = 'user'
usage = '''%s user <subcommand>
usage = '''{name} user <subcommand>
Bitmask account service
SUBCOMMANDS:
create Register a new user, if possible
auth Logs in gainst the provider
create Registers new user, if possible
auth Logs in against the provider
logout Ends any active session with the provider
active Shows the active user, if any
''' % sys.argv[0]
'''.format(name=command.appname)
commands = ['active']
......@@ -45,23 +45,24 @@ SUBCOMMANDS:
username = self.username(raw_args)
passwd = getpass.getpass()
self.data += ['signup', username, passwd]
return self._send()
return self._send(printer=command.default_dict_printer)
def auth(self, raw_args):
username = self.username(raw_args)
passwd = getpass.getpass()
self.data += ['authenticate', username, passwd]
return self._send()
return self._send(printer=command.default_dict_printer)
def logout(self, raw_args):
username = self.username(raw_args)
self.data += ['logout', username]
return self._send()
return self._send(printer=command.default_dict_printer)
def username(self, raw_args):
args = tuple([command.appname] + sys.argv[1:3])
parser = argparse.ArgumentParser(
description='Bitmask user',
prog='%s %s %s' % tuple(sys.argv[:3]))
prog='%s %s %s' % args)
parser.add_argument('username', nargs=1,
help='username ID, in the form <user@example.org>')
subargs = parser.parse_args(raw_args)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment