From 5243c7eb4c58a4419da2103af8c1e4004f01053b Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Tue, 24 Oct 2017 11:53:10 +0200 Subject: [feat] add fetch key by fingerprint to keymanager - Resolves: #9023 --- src/leap/bitmask/core/dispatcher.py | 10 ++++++++++ src/leap/bitmask/core/mail_services.py | 9 +++++++++ 2 files changed, 19 insertions(+) (limited to 'src/leap/bitmask/core') diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py index 91168d87..f2b3e8ca 100644 --- a/src/leap/bitmask/core/dispatcher.py +++ b/src/leap/bitmask/core/dispatcher.py @@ -362,6 +362,16 @@ class KeysCmd(SubCommand): return service.do_export(uid, address, private, fetch_remote) + @register_method('dict') + def do_FETCH(self, service, *parts, **kw): + if len(parts) < 5: + raise ValueError("An email address is needed") + uid = parts[2] + address = parts[3] + fingerprint = parts[4] + + return service.do_fetch(uid, address, fingerprint) + @register_method('dict') def do_INSERT(self, service, *parts, **kw): if len(parts) < 6: diff --git a/src/leap/bitmask/core/mail_services.py b/src/leap/bitmask/core/mail_services.py index 31c27364..23105c7a 100644 --- a/src/leap/bitmask/core/mail_services.py +++ b/src/leap/bitmask/core/mail_services.py @@ -422,6 +422,15 @@ class KeymanagerService(HookableService): d.addCallback(lambda key: dict(key)) return d + def do_fetch(self, userid, address, fingerprint): + km = self._container.get_instance(userid) + if km is None: + return defer.fail(ValueError("User " + userid + " has no active " + "keymanager")) + d = km.fetch_key_fingerprint(address, fingerprint) + d.addCallback(lambda key: dict(key)) + return d + def do_insert(self, userid, address, rawkey, validation='Fingerprint'): km = self._container.get_instance(userid) if km is None: -- cgit v1.2.3