summaryrefslogtreecommitdiff
path: root/service/pixelated/bitmask_libraries
diff options
context:
space:
mode:
authorTulio Casagrande <tcasagra@thoughtworks.com>2016-09-13 18:21:41 -0300
committerTulio Casagrande <tcasagra@thoughtworks.com>2016-09-13 18:21:41 -0300
commit3d9c13a9c4b2db3caa1d6085e0436263902bcce8 (patch)
treeb083614c3fcdb9e808c49c3df5bfe2fdbde19fab /service/pixelated/bitmask_libraries
parent3e9a32625a9adbf557d6b3b1d3954e455fb75356 (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.py18
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)