summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/mail/smtp
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/bitmask/mail/smtp')
-rw-r--r--src/leap/bitmask/mail/smtp/__init__.py71
-rw-r--r--src/leap/bitmask/mail/smtp/gateway.py17
-rw-r--r--src/leap/bitmask/mail/smtp/service.py10
3 files changed, 14 insertions, 84 deletions
diff --git a/src/leap/bitmask/mail/smtp/__init__.py b/src/leap/bitmask/mail/smtp/__init__.py
index 90baf668..e69de29b 100644
--- a/src/leap/bitmask/mail/smtp/__init__.py
+++ b/src/leap/bitmask/mail/smtp/__init__.py
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-# __init__.py
-# Copyright (C) 2013-2016 LEAP
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-SMTP gateway helper function.
-"""
-import os
-
-from twisted.internet import reactor
-from twisted.internet.error import CannotListenError
-from twisted.logger import Logger
-
-from leap.common.events import emit_async, catalog
-from leap.bitmask.mail.smtp.gateway import SMTPFactory
-
-logger = Logger()
-
-SMTP_PORT = 2013
-
-
-def run_service(soledad_sessions, keymanager_sessions, sendmail_opts,
- port=SMTP_PORT, factory=None):
- """
- Main entry point to run the service from the client.
-
- :param soledad_sessions: a dict-like object, containing instances
- of a Store (soledad instances), indexed by userid.
- :param keymanager_sessions: a dict-like object, containing instances
- of Keymanager, indexed by userid.
- :param sendmail_opts: a dict-like object of sendmailOptions.
-
- :returns: the port as returned by the reactor when starts listening, and
- the factory for the protocol.
- :rtype: tuple
- """
- if not factory:
- factory = SMTPFactory(soledad_sessions, keymanager_sessions,
- sendmail_opts)
-
- try:
- interface = "localhost"
- # don't bind just to localhost if we are running on docker since we
- # won't be able to access smtp from the host
- if os.environ.get("LEAP_DOCKERIZED"):
- interface = ''
-
- # TODO Use Endpoints instead --------------------------------
- tport = reactor.listenTCP(port, factory, interface=interface)
- emit_async(catalog.SMTP_SERVICE_STARTED, str(port))
-
- return tport, factory
- except CannotListenError:
- logger.error("SMTP Service failed to start: "
- "cannot listen in port %s" % port)
- emit_async(catalog.SMTP_SERVICE_FAILED_TO_START, str(port))
- except Exception as exc:
- logger.error("Unhandled error while launching smtp gateway service")
- logger.error('%r' % exc)
diff --git a/src/leap/bitmask/mail/smtp/gateway.py b/src/leap/bitmask/mail/smtp/gateway.py
index b1fafadd..08d59e11 100644
--- a/src/leap/bitmask/mail/smtp/gateway.py
+++ b/src/leap/bitmask/mail/smtp/gateway.py
@@ -56,8 +56,6 @@ generator.Generator = RFC3156CompliantGenerator
LOCAL_FQDN = "bitmask.local"
-logger = Logger()
-
@implementer(IRealm)
class LocalSMTPRealm(object):
@@ -221,10 +219,13 @@ class SMTPFactory(protocol.ServerFactory):
@implementer(smtp.IMessageDelivery)
class SMTPDelivery(object):
+
"""
Validate email addresses and handle message delivery.
"""
+ log = Logger()
+
def __init__(self, userid, keymanager, encrypted_only, outgoing_mail):
"""
Initialize the SMTP delivery object.
@@ -298,7 +299,7 @@ class SMTPDelivery(object):
# verify if recipient key is available in keyring
def found(_):
- logger.debug("Accepting mail for %s..." % user.dest.addrstr)
+ self.log.debug('Accepting mail for %s...' % user.dest.addrstr)
emit_async(catalog.SMTP_RECIPIENT_ACCEPTED_ENCRYPTED,
self._userid, user.dest.addrstr)
@@ -310,7 +311,7 @@ class SMTPDelivery(object):
emit_async(catalog.SMTP_RECIPIENT_REJECTED, self._userid,
user.dest.addrstr)
raise smtp.SMTPBadRcpt(user.dest.addrstr)
- logger.warn(
+ self.log.warn(
'Warning: will send an unencrypted message (because '
'"encrypted_only" is set to False).')
emit_async(
@@ -344,7 +345,7 @@ class SMTPDelivery(object):
# accept mail from anywhere. To reject an address, raise
# smtp.SMTPBadSender here.
if str(origin) != str(self._userid):
- logger.error(
+ self.log.error(
"Rejecting sender {0}, expected {1}".format(origin,
self._userid))
raise smtp.SMTPBadSender(origin)
@@ -362,6 +363,7 @@ class EncryptedMessage(object):
recipient.
"""
implements(smtp.IMessage)
+ log = Logger()
def __init__(self, user, outgoing_mail):
"""
@@ -396,7 +398,7 @@ class EncryptedMessage(object):
:returns: a deferred
"""
- logger.debug("Message data complete.")
+ self.log.debug('Message data complete.')
self._lines.append('') # add a trailing newline
raw_mail = '\r\n'.join(self._lines)
@@ -406,8 +408,7 @@ class EncryptedMessage(object):
"""
Log an error when the connection is lost.
"""
- logger.error("Connection lost unexpectedly!")
- logger.error()
+ self.log.error('Connection lost unexpectedly!')
emit_async(catalog.SMTP_CONNECTION_LOST, self._userid,
self._user.dest.addrstr)
# unexpected loss of connection; don't save
diff --git a/src/leap/bitmask/mail/smtp/service.py b/src/leap/bitmask/mail/smtp/service.py
index 48e6865b..6fd000ce 100644
--- a/src/leap/bitmask/mail/smtp/service.py
+++ b/src/leap/bitmask/mail/smtp/service.py
@@ -26,7 +26,7 @@ from twisted.logger import Logger
from leap.common.events import emit_async, catalog
from leap.bitmask.mail.smtp.gateway import SMTPFactory
-logger = Logger()
+log = Logger()
SMTP_PORT = 2013
@@ -65,9 +65,9 @@ def run_service(soledad_sessions, keymanager_sessions, sendmail_opts,
return tport, factory
except CannotListenError:
- logger.error("STMP Service failed to start: "
- "cannot listen in port %s" % port)
+ log.error('STMP Service failed to start: '
+ 'cannot listen in port %s' % port)
emit_async(catalog.SMTP_SERVICE_FAILED_TO_START, str(port))
except Exception as exc:
- logger.error("Unhandled error while launching smtp gateway service")
- logger.error('%r' % exc)
+ log.error('Unhandled error while launching smtp gateway service')
+ log.error('%r' % exc)