From dd63db87fdbb9667c1027edd700b4047b6983d1f Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Wed, 18 Feb 2015 13:40:41 -0200 Subject: #294 - not failing service startup if smtp fails to start --- service/pixelated/bitmask_libraries/session.py | 9 ++++++--- service/pixelated/bitmask_libraries/smtp.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) (limited to 'service/pixelated/bitmask_libraries') diff --git a/service/pixelated/bitmask_libraries/session.py b/service/pixelated/bitmask_libraries/session.py index 158d6605..9f21fbe6 100644 --- a/service/pixelated/bitmask_libraries/session.py +++ b/service/pixelated/bitmask_libraries/session.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . import errno +import logging import traceback import sys @@ -65,7 +66,7 @@ class LeapSession(object): - ``incoming_mail_fetcher`` Background job for fetching incoming mails from LEAP server (LeapIncomingMail) """ - def __init__(self, provider, srp_session, soledad_session, nicknym, soledad_account, incoming_mail_fetcher): + def __init__(self, provider, srp_session, soledad_session, nicknym, soledad_account, incoming_mail_fetcher, smtp): """ Constructor. @@ -73,6 +74,7 @@ class LeapSession(object): :type leap_config: LeapConfig """ + self.smtp = smtp self.config = provider.config self.provider = provider self.srp_session = srp_session @@ -133,9 +135,10 @@ class LeapSessionFactory(object): account, auth) smtp = LeapSmtp(self._provider, nicknym.keymanager, auth) - smtp.start() - return LeapSession(self._provider, auth, soledad, nicknym, account, incoming_mail_fetcher) + smtp.ensure_running() + + return LeapSession(self._provider, auth, soledad, nicknym, account, incoming_mail_fetcher, smtp) def _lookup_session(self, key): global SESSIONS diff --git a/service/pixelated/bitmask_libraries/smtp.py b/service/pixelated/bitmask_libraries/smtp.py index 6bbe0051..d5236e8e 100644 --- a/service/pixelated/bitmask_libraries/smtp.py +++ b/service/pixelated/bitmask_libraries/smtp.py @@ -13,12 +13,16 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . +import logging import os import requests from .certs import which_bundle from leap.mail.smtp import setup_smtp_gateway +logger = logging.getLogger(__name__) + + class LeapSmtp(object): TWISTED_PORT = 4650 @@ -86,6 +90,15 @@ class LeapSmtp(object): encrypted_only=False ) + def ensure_running(self): + if not self._smtp_service: + try: + self.start() + except Exception as e: + logger.warning("Couldn't start the SMTP server now, will try again when the user tries to use it") + return False + return True + def stop(self): if self._smtp_service is not None: self._smtp_port.stopListening() -- cgit v1.2.3