summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTulio Casagrande <tuliocasagrande@gmail.com>2017-01-13 11:15:58 -0200
committerGitHub <noreply@github.com>2017-01-13 11:15:58 -0200
commitd1abd01290117aa957b24a9de3f343c296d7364e (patch)
treede65b866d800f7ac67c1122cee806c497c07fc2a
parente26490d52b7f5faafcd1b1595e07465c69ed1cc5 (diff)
parentea44f5e82edccc8f35245f5df305ec68a7ff8b79 (diff)
Merge pull request #906 from pixelated/key_expiry
Close session when UploadKeyError occurs
-rw-r--r--service/pixelated/config/sessions.py10
-rw-r--r--service/test/unit/config/test_sessions.py15
2 files changed, 21 insertions, 4 deletions
diff --git a/service/pixelated/config/sessions.py b/service/pixelated/config/sessions.py
index ec5e1c0e..439ca9b3 100644
--- a/service/pixelated/config/sessions.py
+++ b/service/pixelated/config/sessions.py
@@ -19,7 +19,7 @@ from leap.common.events import (
catalog as events
)
-from pixelated.bitmask_libraries.keymanager import Keymanager
+from pixelated.bitmask_libraries.keymanager import Keymanager, UploadKeyError
from pixelated.adapter.mailstore import LeapMailStore
from pixelated.config import leap_config
from pixelated.bitmask_libraries.certs import LeapCertificate
@@ -156,7 +156,13 @@ class LeapSession(object):
@defer.inlineCallbacks
def finish_bootstrap(self):
- yield self.keymanager.generate_openpgp_key()
+ try:
+ yield self.keymanager.generate_openpgp_key()
+ except UploadKeyError as e:
+ logger.warn('{0}: {1}. Closing session for user: {2}'.format(e.__class__.__name__, e, self.account_email()))
+ self.close()
+ raise
+
yield self._create_account(self.soledad, self.user_auth.uuid)
self.incoming_mail_fetcher = yield self._create_incoming_mail_fetcher(
self.keymanager,
diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py
index a7e62c7a..ad4dd590 100644
--- a/service/test/unit/config/test_sessions.py
+++ b/service/test/unit/config/test_sessions.py
@@ -14,12 +14,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-import os
from mock import patch
from mock import MagicMock
+from mockito import when
from twisted.internet import defer
-from twisted.trial import unittest
from pixelated.config.sessions import LeapSession, SessionCache
+from pixelated.bitmask_libraries.keymanager import UploadKeyError
from test.unit.bitmask_libraries.test_abstract_leap import AbstractLeapTest
from leap.common.events.catalog import KEYMANAGER_FINISHED_KEY_GENERATION
@@ -43,6 +43,17 @@ class SessionTest(AbstractLeapTest):
mail_fetcher_mock.startService.assert_called_once()
@patch('pixelated.config.sessions.register')
+ @defer.inlineCallbacks
+ def test_upload_key_error_closes_the_session(self, _):
+ when(self.keymanager).generate_openpgp_key().thenRaise(UploadKeyError('Could not upload key'))
+ session = self._create_session()
+ session.close = MagicMock()
+
+ with self.assertRaises(UploadKeyError):
+ yield session.finish_bootstrap()
+ session.close.assert_called_once()
+
+ @patch('pixelated.config.sessions.register')
@patch('pixelated.config.sessions.unregister')
@patch('pixelated.config.sessions.Account')
@defer.inlineCallbacks