summaryrefslogtreecommitdiff
path: root/service/pixelated/bitmask_libraries
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2016-02-24 11:06:08 +0100
committerFolker Bernitt <fbernitt@thoughtworks.com>2016-02-24 11:08:11 +0100
commit03855d3df78b4a71b880a068939e8708b0315be9 (patch)
tree50c9f071fc8aad44f24952b6fcc7b74755a8d1d7 /service/pixelated/bitmask_libraries
parent0f9c1e66c9ab6b8f037436ffcb45d71f92d9b613 (diff)
Recreate session on soledad problems
- Issue #615 - invalid token raised by soledad after timeout, if we see this, recreate the session on next login
Diffstat (limited to 'service/pixelated/bitmask_libraries')
-rw-r--r--service/pixelated/bitmask_libraries/session.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/service/pixelated/bitmask_libraries/session.py b/service/pixelated/bitmask_libraries/session.py
index f28d9f59..5d8b13af 100644
--- a/service/pixelated/bitmask_libraries/session.py
+++ b/service/pixelated/bitmask_libraries/session.py
@@ -53,18 +53,19 @@ class LeapSession(object):
self.fresh_account = False
self.incoming_mail_fetcher = None
self.account = None
- self._has_been_synced = False
+ self._has_been_initially_synced = False
self._sem_intial_sync = defer.DeferredLock()
+ self._is_closed = False
register(events.KEYMANAGER_FINISHED_KEY_GENERATION, self._set_fresh_account, uid=self.account_email())
@defer.inlineCallbacks
def initial_sync(self):
yield self._sem_intial_sync.acquire()
try:
- if not self._has_been_synced:
- yield self.sync()
+ yield self.sync()
+ if not self._has_been_initially_synced:
yield self.after_first_sync()
- self._has_been_synced = True
+ self._has_been_initially_synced = True
finally:
yield self._sem_intial_sync.release()
defer.returnValue(self)
@@ -94,12 +95,17 @@ class LeapSession(object):
return self.provider.address_for(name)
def close(self):
+ self._is_closed = True
self.stop_background_jobs()
unregister(events.KEYMANAGER_FINISHED_KEY_GENERATION, uid=self.account_email())
self.soledad.close()
self.remove_from_cache()
self._close_account()
+ @property
+ def is_closed(self):
+ return self._is_closed
+
def _close_account(self):
if self.account:
self.account.end_session()
@@ -284,7 +290,12 @@ class SessionCache(object):
@staticmethod
def lookup_session(key):
- return SessionCache.sessions.get(key, None)
+ session = SessionCache.sessions.get(key, None)
+ if session is not None and session.is_closed:
+ SessionCache.remove_session(key)
+ return None
+ else:
+ return session
@staticmethod
def remember_session(key, session):