summaryrefslogtreecommitdiff
path: root/start_mx.py
diff options
context:
space:
mode:
Diffstat (limited to 'start_mx.py')
-rwxr-xr-xstart_mx.py217
1 files changed, 89 insertions, 128 deletions
diff --git a/start_mx.py b/start_mx.py
index d45209c..d2905c5 100755
--- a/start_mx.py
+++ b/start_mx.py
@@ -1,146 +1,107 @@
#!/usr/bin/env python
-#-*- coding: utf-8 -*-
-"""
- ____
- | MX |_________________________
- ___|____| An encrypting remailer |________
- | |__________________________| |
- | is designed for use on a mail exchange |
- | with OpenPGP implementations and Postfix, |
- | and is part of the Leap Encryption Access |
- | Project platform. |
- |___________________________________________|
-"""
- # authors: Isis Agora Lovecruft, <isis@leap.se> 0x2cdb8b35
- # license: AGPLv3, see included LICENCE file.
- # copyright: copyright (c) 2013 Isis Agora Lovecruft
-
-
-from __future__ import print_function
-from os import getcwd
-from os import path as ospath
-
+# -*- encoding: utf-8 -*-
+# start_mx.py
+# Copyright (C) 2013 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/>.
+
+import argparse
import sys
+import ConfigParser
+import logging
-
-application_name = "leap_mx"
-
-def __get_dirs__():
- """Get the absolute path of the top-level repository directory."""
- here = getcwd()
- base = here.rsplit(application_name, 1)[0]
- repo = ospath.join(base, application_name)
- leap = ospath.join(repo, 'src')
- ours = ospath.join(leap, application_name.replace('_', '/'))
- return repo, leap, ours
-
-## py3k check, snagged from python-gnupg-0.3.2 by Vinay Sajip
-try:
- unicode
- _py3k = False
-except NameError:
- _py3k = True
-
-## Set the $PYTHONPATH:
-repo, leap, ours = __get_dirs__()
-sys.path[:] = map(ospath.abspath, sys.path)
-sys.path.insert(0, leap)
-
-## Now we should be able to import ourselves without installation:
try:
- from leap.mx import runner
- from leap.mx.util import config, log, version
+ from leap.mx import couchdb
+ from leap.mx.alias_resolver import AliasResolverFactory
except ImportError, ie:
- print("%s \nExiting... \n" % ie.message)
+ print "%s \nExiting... \n" % ie.message
sys.exit(1)
try:
- from twisted.python import usage, runtime, failure
- from twisted.python.util import spewer
+ from twisted.internet import reactor
+ from twisted.internet.endpoints import TCP4ServerEndpoint
except ImportError, ie:
- print("This software requires Twisted>=12.0.2, please see the README for")
- print("help on using virtualenv and pip to obtain requirements.")
+ print "This software requires Twisted>=12.0.2, please see the README for"
+ print "help on using virtualenv and pip to obtain requirements."
+logger = logging.getLogger(__name__)
-class MXOptions(usage.Options):
- """Command line options for leap_mx."""
- optParameters = [
- ['config', 'c', 'mx.conf', 'Config file to use']]
- optFlags = [
- ['all-tests', 'a', 'Run all unittests'],
- ['verbose', 'v', 'Increase logging verbosity']]
+if __name__ == "__main__":
+ epilog = "Copyright 2012 The LEAP Encryption Access Project"
+ parser = argparse.ArgumentParser(description="""LEAP MX""",
+ epilog=epilog)
+ parser.add_argument('-d', '--debug', action="store_true",
+ help="Launches the LEAP MX mail receiver with debug output")
+ parser.add_argument('-l', '--logfile', metavar="LOG FILE", nargs='?',
+ action="store", dest="log_file",
+ help="Writes the logs to the specified file")
+ parser.add_argument('-c', '--config', metavar="CONFIG FILE", nargs='?',
+ action="store", dest="config",
+ help="Where to look for the configuration file. " \
+ "Default: mail_receiver.cfg")
+
+ opts, _ = parser.parse_known_args()
+
+ debug = opts.debug
+ config_file = opts.config
+
+ if debug:
+ level = logging.DEBUG
+ else:
+ level = logging.WARNING
- def opt_version(self):
- """Print leap_mx version and exit."""
- print("Authors: %s" % version.getAuthors())
- print("Licence: AGPLv3, see included LICENSE file")
- print("Copyright: © 2013 Isis Lovecruft, see included COPYLEFT file")
- print("Version: %s" % version.getVersion())
- sys.exit(0)
+ if config_file is None:
+ config_file = "mx.conf"
- def opt_spewer(self):
- """Print *all of the things*. Useful for debugging."""
- sys.settrace(spewer)
+ logger.setLevel(level)
+ console = logging.StreamHandler()
+ console.setLevel(level)
+ formatter = logging.Formatter(
+ '%(asctime)s '
+ '- %(name)s - %(levelname)s - %(message)s')
+ console.setFormatter(formatter)
+ logger.addHandler(console)
- def parseArgs(self):
- """Called with the remaining unrecognised commandline options."""
- log.warn("Couldn't recognise option: %s" % self)
+ logger.info("~~~~~~~~~~~~~~~~~~~")
+ logger.info(" LEAP MX")
+ logger.info("~~~~~~~~~~~~~~~~~~~")
+ logger.info("Reading configuration from %s" % (config_file,))
-if __name__ == "__main__":
- dependency_check = runner.CheckRequirements(version.getPackageName(),
- version.getPipfile())
- ## the following trickery is for printing the module docstring
- ## *before* the options help, and printing it only once:
- import __main__
- print("%s" % __main__.__doc__)
- __main__.__doc__ = ("""
-Example Usage:
- $ start_mx.py --config="./my-mx.conf" --spewer
-""")
-
- mx_options = MXOptions()
- if len(sys.argv) <= 1:
- mx_options.opt_help()
- sys.exit(0)
- try:
- mx_options.parseOptions()
- except usage.UsageError, ue:
- print("%s" % ue.message)
- sys.exit(1)
- options = mx_options.opts
-
- ## Get the config settings:
- config.filename = options['config']
- config.loadConfig()
-
- if config.basic.enable_logfile:
- ## Log to file:
- logfilename = config.basic.logfile
- logfilepath = ospath.join(repo, 'logs')
- log.start(logfilename, logfilepath)
- else:
- ## Otherwise just log to stdout:
- log.start()
+ config = ConfigParser.ConfigParser()
+ config.read(config_file)
- log.msg("Testing logging functionality")
- if runtime.platform.supportsThreads():
- thread_support = "with thread support."
- else:
- thread_support = "without thread support."
- log.debug("Running %s, with Python %s on %s platform %s"
- % (application_name, runtime.shortPythonVersion(),
- runtime.platform.getType(), thread_support))
-
- if options['verbose']:
- config.basic.debug = True
- failure.traceupLength = 7
- failure.startDebugMode()
-
- if options['all-tests']:
- from leap.mx import tests
- tests.run()
- else:
- mx_options.getUsage()
- sys.exit(1)
+ users_user = config.get("couchdb", "users_user")
+ users_password = config.get("couchdb", "users_password")
+
+ mail_user = config.get("couchdb", "mail_user")
+ mail_password = config.get("couchdb", "mail_password")
+
+ server = config.get("couchdb", "server")
+ port = config.get("couchdb", "port")
+
+ cdb = couchdb.ConnectedCouchDB(server,
+ port=port,
+ dbName="users",
+ username=users_user,
+ password=users_password)
+
+ # TODO: use the couchdb for mail
+
+ # TODO: make the listening ports configurable
+ alias_endpoint = TCP4ServerEndpoint(reactor, 4242)
+ alias_endpoint.listen(AliasResolverFactory(couchdb=cdb))
+
+ reactor.run()