summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rwxr-xr-xpkg/generate_wheels.sh12
-rw-r--r--pkg/leap-mx.init (renamed from pkg/leap_mx.init)11
-rw-r--r--pkg/leap-mx.service10
-rw-r--r--pkg/mx.conf.sample3
-rwxr-xr-xpkg/mx.tac27
-rwxr-xr-xpkg/pip_install_requirements.sh86
-rw-r--r--pkg/requirements-leap.pip3
-rw-r--r--pkg/requirements-testing.pip2
-rw-r--r--pkg/requirements.pip4
-rwxr-xr-xpkg/utils/get_authors.sh2
-rw-r--r--pkg/utils/reqs.py20
11 files changed, 160 insertions, 20 deletions
diff --git a/pkg/generate_wheels.sh b/pkg/generate_wheels.sh
new file mode 100755
index 0000000..e8096af
--- /dev/null
+++ b/pkg/generate_wheels.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Generate wheels for dependencies
+
+if [ "$WHEELHOUSE" = "" ]; then
+ WHEELHOUSE=$HOME/wheelhouse
+fi
+
+pip wheel --wheel-dir $WHEELHOUSE pip
+pip wheel --wheel-dir $WHEELHOUSE -r pkg/requirements.pip
+if [ -f pkg/requirements-testing.pip ]; then
+ pip wheel --wheel-dir $WHEELHOUSE -r pkg/requirements-testing.pip
+fi
diff --git a/pkg/leap_mx.init b/pkg/leap-mx.init
index 60dddc4..8093c22 100644
--- a/pkg/leap_mx.init
+++ b/pkg/leap-mx.init
@@ -12,9 +12,10 @@
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PIDFILE=/var/run/leap_mx.pid
RUNDIR=/var/lib/leap_mx/
-FILE=/usr/share/app/leap_mx.tac
-LOGFILE=/var/log/leap_mx.log
+FILE=/usr/share/app/mx.tac
TWISTD_PATH=/usr/bin/twistd
+USER=leap-mx
+GROUP=leap-mx
[ -r /etc/default/leap_mx ] && . /etc/default/leap_mx
@@ -32,8 +33,10 @@ case "$1" in
--pidfile=$PIDFILE \
--rundir=$RUNDIR \
--python=$FILE \
- --logfile=$LOGFILE \
- --syslog --prefix=leap-mx
+ --syslog \
+ --prefix=leap-mx \
+ --uid=$USER \
+ --gid=$GROUP
echo "."
;;
diff --git a/pkg/leap-mx.service b/pkg/leap-mx.service
new file mode 100644
index 0000000..5852ee8
--- /dev/null
+++ b/pkg/leap-mx.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Leap MX
+Before=postfix.service
+
+[Service]
+ExecStart=/usr/bin/python /usr/bin/twistd -n --rundir=/var/lib/leap_mx/ --python=/usr/share/app/mx.tac --syslog --prefix=leap-mx --pidfile=/tmp/leap-mx.pid
+User=leap-mx
+
+[Install]
+WantedBy=multi-user.target
diff --git a/pkg/mx.conf.sample b/pkg/mx.conf.sample
index c9ad0f8..a649b73 100644
--- a/pkg/mx.conf.sample
+++ b/pkg/mx.conf.sample
@@ -14,6 +14,9 @@ port=4242
[check recipient]
port=2244
+[fingerprint map]
+port=2424
+
[bounce]
from=<address for the From: of the bounce email without domain>
subject=Delivery failure \ No newline at end of file
diff --git a/pkg/mx.tac b/pkg/mx.tac
index 7da59cf..42d40a8 100755
--- a/pkg/mx.tac
+++ b/pkg/mx.tac
@@ -24,6 +24,7 @@ from leap.mx import couchdbhelper
from leap.mx.mail_receiver import MailReceiver
from leap.mx.alias_resolver import AliasResolverFactory
from leap.mx.check_recipient_access import CheckRecipientAccessFactory
+from leap.mx.fingerprint_resolver import FingerprintResolverFactory
try:
from twisted.application import service, internet
@@ -57,6 +58,7 @@ except ConfigParser.NoSectionError:
alias_port = config.getint("alias map", "port")
check_recipient_port = config.getint("check recipient", "port")
+fingerprint_port = config.getint("fingerprint map", "port")
cdb = couchdbhelper.ConnectedCouchDB(server,
port=port,
@@ -68,27 +70,32 @@ cdb = couchdbhelper.ConnectedCouchDB(server,
application = service.Application("LEAP MX")
# Alias map
-alias_map = internet.TCPServer(alias_port, AliasResolverFactory(couchdb=cdb))
+alias_map = internet.TCPServer(
+ alias_port, AliasResolverFactory(couchdb=cdb),
+ interface="localhost")
alias_map.setServiceParent(application)
# Check recipient access
-check_recipient = internet.TCPServer(check_recipient_port,
- CheckRecipientAccessFactory(couchdb=cdb))
+check_recipient = internet.TCPServer(
+ check_recipient_port, CheckRecipientAccessFactory(couchdb=cdb),
+ interface="localhost")
check_recipient.setServiceParent(application)
+# Fingerprint map
+fingerprint_map = internet.TCPServer(
+ fingerprint_port, FingerprintResolverFactory(couchdb=cdb),
+ interface="localhost")
+fingerprint_map.setServiceParent(application)
+
# Mail receiver
-mail_couch_url_prefix = "http://%s:%s@%s:%s" % (user,
- password,
- server,
- port)
directories = []
for section in config.sections():
- if section in ("couchdb", "alias map", "check recipient", "bounce"):
+ if section in ("couchdb", "alias map", "check recipient",
+ "fingerprint map", "bounce"):
continue
to_watch = config.get(section, "path")
recursive = config.getboolean(section, "recursive")
directories.append([to_watch, recursive])
-mr = MailReceiver(mail_couch_url_prefix, cdb, directories, bounce_from,
- bounce_subject)
+mr = MailReceiver(cdb, directories, bounce_from, bounce_subject)
mr.setServiceParent(application)
diff --git a/pkg/pip_install_requirements.sh b/pkg/pip_install_requirements.sh
new file mode 100755
index 0000000..57732e2
--- /dev/null
+++ b/pkg/pip_install_requirements.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+# Update pip and install LEAP base/testing requirements.
+# For convenience, $insecure_packages are allowed with insecure flags enabled.
+# Use at your own risk.
+# See $usage for help
+
+insecure_packages=""
+leap_wheelhouse=https://lizard.leap.se/wheels
+
+show_help() {
+ usage="Usage: $0 [--testing] [--use-leap-wheels]\n --testing\t\tInstall dependencies from requirements-testing.pip\n
+\t\t\tOtherwise, it will install requirements.pip\n
+--use-leap-wheels\tUse wheels from leap.se"
+ echo -e $usage
+
+ exit 1
+}
+
+process_arguments() {
+ testing=false
+ use_leap_wheels=false
+
+ while [ "$#" -gt 0 ]; do
+ # From http://stackoverflow.com/a/31443098
+ case "$1" in
+ --help) show_help;;
+ --testing) testing=true; shift 1;;
+ --use-leap-wheels) use_leap_wheels=true; shift 1;;
+
+ -h) show_help;;
+ -*) echo "unknown option: $1" >&2; exit 1;;
+ esac
+ done
+}
+
+return_wheelhouse() {
+ if $use_leap_wheels ; then
+ WHEELHOUSE=$leap_wheelhouse
+ elif [ "$WHEELHOUSE" = "" ]; then
+ WHEELHOUSE=$HOME/wheelhouse
+ fi
+
+ # Tested with bash and zsh
+ if [[ $WHEELHOUSE != http* && ! -d "$WHEELHOUSE" ]]; then
+ mkdir $WHEELHOUSE
+ fi
+
+ echo "$WHEELHOUSE"
+}
+
+return_install_options() {
+ wheelhouse=`return_wheelhouse`
+ install_options="-U --find-links=$wheelhouse"
+ if $use_leap_wheels ; then
+ install_options="$install_options --trusted-host lizard.leap.se"
+ fi
+
+ echo $install_options
+}
+
+return_insecure_flags() {
+ for insecure_package in $insecure_packages; do
+ flags="$flags --allow-external $insecure_package --allow-unverified $insecure_package"
+ done
+
+ echo $flags
+}
+
+return_packages() {
+ if $testing ; then
+ packages="-r pkg/requirements-testing.pip"
+ else
+ packages="-r pkg/requirements.pip"
+ fi
+
+ echo $packages
+}
+
+process_arguments $@
+install_options=`return_install_options`
+insecure_flags=`return_insecure_flags`
+packages=`return_packages`
+
+pip install -U wheel
+pip install $install_options pip
+pip install $install_options $insecure_flags $packages
diff --git a/pkg/requirements-leap.pip b/pkg/requirements-leap.pip
new file mode 100644
index 0000000..aab5fa5
--- /dev/null
+++ b/pkg/requirements-leap.pip
@@ -0,0 +1,3 @@
+leap.common>=0.5.1
+leap.soledad.common>=0.8.0
+leap.keymanager>=0.5.0
diff --git a/pkg/requirements-testing.pip b/pkg/requirements-testing.pip
new file mode 100644
index 0000000..94b8e9c
--- /dev/null
+++ b/pkg/requirements-testing.pip
@@ -0,0 +1,2 @@
+pep8
+setuptools-trial
diff --git a/pkg/requirements.pip b/pkg/requirements.pip
index ed3ad0d..328b1c3 100644
--- a/pkg/requirements.pip
+++ b/pkg/requirements.pip
@@ -7,7 +7,3 @@ paisley>=0.3.1
# in soledad-common, but we need to declare here
# for the time being.
couchdb
-
-leap.common>=0.3.5
-leap.soledad.common>=0.4.5
-leap.keymanager>=0.3.4
diff --git a/pkg/utils/get_authors.sh b/pkg/utils/get_authors.sh
new file mode 100755
index 0000000..0169bb1
--- /dev/null
+++ b/pkg/utils/get_authors.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+git log --format='%aN <%aE>' | awk '{arr[$0]++} END{for (i in arr){print arr[i], i;}}' | sort -rn | cut -d' ' -f2-
diff --git a/pkg/utils/reqs.py b/pkg/utils/reqs.py
index 5e2324f..251c7e9 100644
--- a/pkg/utils/reqs.py
+++ b/pkg/utils/reqs.py
@@ -22,6 +22,22 @@ import re
import sys
+def is_develop_mode():
+ """
+ Returns True if we're calling the setup script using the argument for
+ setuptools development mode.
+
+ This avoids messing up with dependency pinning and order, the
+ responsibility of installing the leap dependencies is left to the
+ developer.
+ """
+ args = sys.argv
+ devflags = "setup.py", "develop"
+ if (args[0], args[1]) == devflags:
+ return True
+ return False
+
+
def get_reqs_from_files(reqfiles):
"""
Returns the contents of the top requirement file listed as a
@@ -51,8 +67,8 @@ def parse_requirements(reqfiles=['requirements.txt',
if re.match(r'\s*-e\s+', line):
pass
# do not try to do anything with externals on vcs
- #requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1',
- #line))
+ # requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1',
+ # line))
# http://foo.bar/baz/foobar/zipball/master#egg=foobar
elif re.match(r'\s*https?:', line):
requirements.append(re.sub(r'\s*https?:.*#egg=(.*)$', r'\1',