diff options
author | Tulio Casagrande <tcasagra@thoughtworks.com> | 2016-09-13 18:21:41 -0300 |
---|---|---|
committer | Tulio Casagrande <tcasagra@thoughtworks.com> | 2016-09-13 18:21:41 -0300 |
commit | 3d9c13a9c4b2db3caa1d6085e0436263902bcce8 (patch) | |
tree | b083614c3fcdb9e808c49c3df5bfe2fdbde19fab /service/pixelated/bitmask_libraries | |
parent | 3e9a32625a9adbf557d6b3b1d3954e455fb75356 (diff) |
[#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.
Diffstat (limited to 'service/pixelated/bitmask_libraries')
-rw-r--r-- | service/pixelated/bitmask_libraries/keymanager.py | 18 |
1 files changed, 17 insertions, 1 deletions
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) |