summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2016-06-28 17:50:13 +0200
committerRuben Pollan <meskio@sindominio.net>2016-07-03 16:04:41 +0200
commiteed534dcd28b2b85cf5e9c195c68d6d9c80bfb3e (patch)
treef50c962740ef15186f1d14b379f14e0c976a6aaf
parent34411693fb3f43080b98c51575e244c6d403399c (diff)
[feat] implement key export
-rwxr-xr-xsrc/leap/bitmask/cli/bitmask_cli.py27
-rw-r--r--src/leap/bitmask/core/dispatcher.py10
-rw-r--r--src/leap/bitmask/core/mail_services.py6
3 files changed, 41 insertions, 2 deletions
diff --git a/src/leap/bitmask/cli/bitmask_cli.py b/src/leap/bitmask/cli/bitmask_cli.py
index 9110f88a..0c1fe832 100755
--- a/src/leap/bitmask/cli/bitmask_cli.py
+++ b/src/leap/bitmask/cli/bitmask_cli.py
@@ -140,6 +140,8 @@ GENERAL COMMANDS:
help='List all known keys')
parser.add_argument('--export', action='store_true',
help='Export the given key')
+ parser.add_argument('address', nargs='?',
+ help='email address of the key')
args = parser.parse_args(sys.argv[2:])
self.subargs = args
@@ -192,6 +194,27 @@ def do_print_result(stuff):
print Fore.RED + 'ERROR:' + '%s' % obj['error'] + Fore.RESET
+def do_print_key(stuff):
+ obj = json.loads(stuff[0])
+ if obj['error']:
+ do_print_result(stuff)
+ return
+
+ key = obj['result']
+ 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']
+
+
def send_command(cli):
args = cli.args
@@ -314,12 +337,16 @@ def send_command(cli):
elif subargs.export:
data += ['export']
+ cb = do_print_key
else:
error('Use bitmask_cli keys --help to see available subcommands',
stop=True)
return
+ if subargs.address:
+ data.append(subargs.address)
+
s = get_zmq_connection()
d = s.sendMsg(*data, timeout=60)
diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py
index 47e1c2c2..db40a675 100644
--- a/src/leap/bitmask/core/dispatcher.py
+++ b/src/leap/bitmask/core/dispatcher.py
@@ -162,8 +162,14 @@ class KeysCmd(SubCommand):
@register_method('str')
def do_EXPORT(self, service, *parts, **kw):
- # TODO
- return defer.succeed("")
+ if len(parts) < 3:
+ return defer.fail("An email address is needed")
+ address = parts[2]
+
+ bonafide = kw['bonafide']
+ d = bonafide.do_get_active_user()
+ d.addCallback(service.do_export, address)
+ return d
class CommandDispatcher(object):
diff --git a/src/leap/bitmask/core/mail_services.py b/src/leap/bitmask/core/mail_services.py
index aebca9f1..8e64f997 100644
--- a/src/leap/bitmask/core/mail_services.py
+++ b/src/leap/bitmask/core/mail_services.py
@@ -354,6 +354,12 @@ class KeymanagerService(HookableService):
(key.address, key.fingerprint) for key in keys])
return d
+ def do_export(self, userid, address):
+ km = self._container.get_instance(userid)
+ d = km.get_key(address, fetch_remote=False)
+ d.addCallback(lambda key: dict(key))
+ return d
+
class StandardMailService(service.MultiService, HookableService):
"""