summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/adapter/services/mail_sender.py9
-rw-r--r--service/pixelated/bitmask_libraries/smtp.py34
-rw-r--r--service/pixelated/config/app_factory.py3
3 files changed, 23 insertions, 23 deletions
diff --git a/service/pixelated/adapter/services/mail_sender.py b/service/pixelated/adapter/services/mail_sender.py
index bbcc1721..262a6e18 100644
--- a/service/pixelated/adapter/services/mail_sender.py
+++ b/service/pixelated/adapter/services/mail_sender.py
@@ -29,12 +29,12 @@ class SMTPDownException(Exception):
class MailSender(object):
- def __init__(self, account_email_address, ensure_smtp_is_running_cb):
- self.ensure_smtp_is_running_cb = ensure_smtp_is_running_cb
+ def __init__(self, account_email_address, smtp):
+ self.smtp = smtp
self.account_email_address = account_email_address
def sendmail(self, mail):
- if self.ensure_smtp_is_running_cb():
+ if self.smtp.ensure_running():
recipients = flatten([mail.to, mail.cc, mail.bcc])
result_deferred = Deferred()
sender_factory = SMTPSenderFactory(
@@ -43,7 +43,8 @@ class MailSender(object):
file=StringIO(mail.to_smtp_format()),
deferred=result_deferred)
- reactor.connectTCP('localhost', 4650, sender_factory)
+ reactor.connectTCP('localhost', self.smtp.local_smtp_port_number,
+ sender_factory)
return result_deferred
return fail(SMTPDownException())
diff --git a/service/pixelated/bitmask_libraries/smtp.py b/service/pixelated/bitmask_libraries/smtp.py
index a0f9c6e4..c22601d2 100644
--- a/service/pixelated/bitmask_libraries/smtp.py
+++ b/service/pixelated/bitmask_libraries/smtp.py
@@ -16,6 +16,7 @@
import logging
import os
import requests
+import random
from .certs import which_api_CA_bundle
from leap.mail.smtp import setup_smtp_gateway
@@ -25,21 +26,20 @@ logger = logging.getLogger(__name__)
class LeapSmtp(object):
- TWISTED_PORT = 4650
-
def __init__(self, provider, username, session_id, keymanager=None):
+ self.local_smtp_port_number = random.randrange(12000, 16000)
self._provider = provider
self.username = username
self.session_id = session_id
self._keymanager = keymanager
- self._hostname, self._port = self._discover_smtp_server()
- self._smtp_port = None
- self._smtp_service = None
+ self._remote_hostname, self._remote_port = self._discover_remote_smtp_server()
+ self._local_smtp_service_socket = None
+ self._local_smtp_service = None
def smtp_info(self):
- return ('localhost', self.TWISTED_PORT)
+ return ('localhost', self.local_smtp_port_number)
- def _discover_smtp_server(self):
+ def _discover_remote_smtp_server(self):
json_data = self._provider.fetch_smtp_json()
hosts = json_data['hosts']
hostname = hosts.keys()[0]
@@ -79,19 +79,19 @@ class LeapSmtp(object):
cert_path = self._client_cert_path()
email = '%s@%s' % (self.username, self._provider.domain)
- self._smtp_service, self._smtp_port = setup_smtp_gateway(
- port=self.TWISTED_PORT,
+ self._local_smtp_service, self._local_smtp_service_socket = setup_smtp_gateway(
+ port=self.local_smtp_port_number,
userid=email,
keymanager=self._keymanager,
- smtp_host=self._hostname.encode('UTF-8'),
- smtp_port=self._port,
+ smtp_host=self._remote_hostname.encode('UTF-8'),
+ smtp_port=self._remote_port,
smtp_cert=cert_path,
smtp_key=cert_path,
encrypted_only=False
)
def ensure_running(self):
- if not self._smtp_service:
+ if not self._local_smtp_service:
try:
self.start()
except:
@@ -100,8 +100,8 @@ class LeapSmtp(object):
return True
def stop(self):
- if self._smtp_service is not None:
- self._smtp_port.stopListening()
- self._smtp_service.doStop()
- self._smtp_port = None
- self._smtp_service = None
+ if self._local_smtp_service is not None:
+ self._local_smtp_service_socket.stopListening()
+ self._local_smtp_service.doStop()
+ self._local_smtp_service_socket = None
+ self._local_smtp_service = None
diff --git a/service/pixelated/config/app_factory.py b/service/pixelated/config/app_factory.py
index ea0bb550..1c7fb8a1 100644
--- a/service/pixelated/config/app_factory.py
+++ b/service/pixelated/config/app_factory.py
@@ -31,8 +31,7 @@ def init_app(leap_home, leap_session):
soledad_querier = SoledadQuerier(soledad=leap_session.account._soledad)
search_engine = SearchEngine(soledad_querier, agent_home=leap_home)
- pixelated_mail_sender = MailSender(leap_session.account_email(),
- lambda: leap_session.smtp.ensure_running())
+ pixelated_mail_sender = MailSender(leap_session.account_email(), leap_session.smtp)
pixelated_mailboxes = Mailboxes(leap_session.account, soledad_querier, search_engine)