From 3d9c13a9c4b2db3caa1d6085e0436263902bcce8 Mon Sep 17 00:00:00 2001 From: Tulio Casagrande Date: Tue, 13 Sep 2016 18:21:41 -0300 Subject: [#778] Handling case of failed key upload If we get any problem with the upload of the user's public key, we are deleting the key pair from the local database and denying login. That way, a new login will have a chance to regenerate the key and upload it properly. --- service/pixelated/bitmask_libraries/keymanager.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'service/pixelated/bitmask_libraries') diff --git a/service/pixelated/bitmask_libraries/keymanager.py b/service/pixelated/bitmask_libraries/keymanager.py index 4cb3e80e..dddc744e 100644 --- a/service/pixelated/bitmask_libraries/keymanager.py +++ b/service/pixelated/bitmask_libraries/keymanager.py @@ -21,6 +21,10 @@ import logging logger = logging.getLogger(__name__) +class UploadKeyError(Exception): + pass + + class Keymanager(object): def __init__(self, provider, soledad, email_address, token, uuid): nicknym_url = provider._discover_nicknym_server() @@ -38,7 +42,11 @@ class Keymanager(object): if not key_present: logger.info("Generating keys - this could take a while...") yield self._gen_key() - yield self._send_key_to_leap() + try: + yield self._send_key_to_leap() + except Exception as e: + yield self.delete_key_pair(self._email) + raise UploadKeyError(e.message) @defer.inlineCallbacks def _key_exists(self, email): @@ -56,3 +64,11 @@ class Keymanager(object): def _send_key_to_leap(self): return self.keymanager.send_key() + + @defer.inlineCallbacks + def delete_key_pair(self, key): + private_key = yield self.get_key(self._email, private=True, fetch_remote=False) + public_key = yield self.get_key(self._email, private=False, fetch_remote=False) + + self.keymanager.delete_key(private_key) + self.keymanager.delete_key(public_key) -- cgit v1.2.3