From b0305a6645138e12307c0cfb86461c6705b31664 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Sun, 7 Jun 2015 06:22:16 -0300 Subject: smtp with better variable naming and random port --- service/pixelated/adapter/services/mail_sender.py | 9 +++--- service/pixelated/bitmask_libraries/smtp.py | 34 +++++++++++------------ service/pixelated/config/app_factory.py | 3 +- 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) -- cgit v1.2.3