summaryrefslogtreecommitdiff
path: root/leap
diff options
context:
space:
mode:
Diffstat (limited to 'leap')
-rw-r--r--leap/__init__.py9
-rw-r--r--leap/mx/alias_resolver.py118
-rw-r--r--leap/util/net.py109
-rw-r--r--leap/util/version.py69
4 files changed, 0 insertions, 305 deletions
diff --git a/leap/__init__.py b/leap/__init__.py
deleted file mode 100644
index 370676e..0000000
--- a/leap/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from . import mx
-from . import util
-from . import tests
-
-__author__ = util.version.authors
-__version__ = util.version.getVersion()
-__all__ = ['mx', 'util', 'tests']
diff --git a/leap/mx/alias_resolver.py b/leap/mx/alias_resolver.py
deleted file mode 100644
index 2263de5..0000000
--- a/leap/mx/alias_resolver.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-'''
-alias_resolver.py
-=================
-Classes for resolving postfix aliases.
-
-@authors: Isis Agora Lovecruft
-@version: 0.0.1-beta
-@license: WTFPL see included LICENSE file
-@copyright: copyright 2013 Isis Agora Lovecruft
-'''
-
-import os
-
-from twisted.internet import address
-from twisted.mail import maildir
-from twisted.protocols import postfix
-
-from leap.mx import net, log
-
-
-def checkIPaddress(addr):
- """
- Check that a given string is a valid IPv4 or IPv6 address.
-
- @param addr:
- Any string defining an IP address, i.e. '0.0.0.0', '::1', or '1.2.3.4'.
- @returns:
- True if :param:`addr` defines a valid IPAddress, False otherwise.
- """
- import ipaddr
-
- try:
- check = ipaddr.IPAddress(addr)
- except ValueError, ve:
- log.warn(ve.message)
- return False
- else:
- return True
-
-class PostfixAliasResolver(postfix.PostfixTCPMapServer):
- """
- Resolve postfix aliases, similarly to using "$ postmap -q <alias>".
-
- This class starts a simple LineReceiver server which listens for a string
- specifying an alias to look up, :param:`key`, and which will be used to
- query the local Postfix server. You can test it with:
-
- $ ./alias_resolver.py &
- $ /usr/bin/postmap -q <key> tcp:localhost:4242
-
- """
- def __init__(self, *args, **kwargs):
- """
- Create a local LineReceiver server which listens for Postfix aliases
- to resolve.
- """
- super(postfix.PostfixTCPMapServer, self).__init__(*args, **kwargs)
-
-class PostfixAliasResolverFactory(postfix.PostfixTCPMapDeferringDictServerFactory):
- """
- A Factory for creating PostfixAliasResolver servers, which handles inputs
- and outputs, and keeps an in-memory mapping of Postfix aliases in the form
- of a dict.
-
- xxx fill me in
-
- """
- protocol = PostfixAliasResolver
-
- def __init__(self, addr='127.0.0.1', port=4242, timeout=120, data=None):
- """
- Create a Factory which returns :class:`PostfixAliasResolver` servers.
-
- @param addr:
- (optional) A string giving the IP address of the Postfix server.
- Default: '127.0.0.1'
- @param port:
- (optional) An integer that specifies the port number of the
- Postfix server. Default: 4242
- @param timeout:
- (optional) An integer specifying the number of seconds to wait
- until we should time out. Default: 120
- @param data:
- (optional) A dict to use to initialise or update the alias
- mapping.
- """
- super(postfix.PostfixTCPMapDeferringDictServerFactory,
- self).__init__(data=data)
- self.timeout = timeout
- self.noisy = False ## xxx get config value
-
- try:
- assert isinstance(port, int), "Port number must be an integer"
- assert isinstance(timeout, int), "Timeout must be an integer"
- except AssertionError, ae:
- raise SystemExit(ae.message)
-
- if checkIPaddress(addr):
- self.addr = address._IPAddress('TCP', addr, int(port))
- else:
- log.debug("Using default address for Postfix: 127.0.0.1:%s" % port)
- self.addr = address._IPAddress('TCP', '127.0.0.1', int(port))
-
- def buildProtocol(self):
- """
- Create an instance of the :class:`PostfixAliasResolver` server.
- """
- proto = self.protocol()
- proto.timeout = self.timeout
- proto.factory = self
- return proto
-
-
-if __name__ == "__main__":
-
- print "To test alias_resolver.py, please use /test/test_alias_resolver.py"
diff --git a/leap/util/net.py b/leap/util/net.py
deleted file mode 100644
index 10e72a4..0000000
--- a/leap/util/net.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-'''
-net.py
--------
-Utilities for networking.
-
-@authors: Isis Agora Lovecruft, <isis@leap.se> 0x2cdb8b35
-@license: see included LICENSE file
-@copyright: 2013 Isis Agora Lovecruft
-'''
-
-import ipaddr
-import sys
-import socket
-
-from random import randint
-
-from leap.mx.utils import log
-
-
-PLATFORMS = {'LINUX': sys.platform.startswith("linux"),
- 'OPENBSD': sys.platform.startswith("openbsd"),
- 'FREEBSD': sys.platform.startswith("freebsd"),
- 'NETBSD': sys.platform.startswith("netbsd"),
- 'DARWIN': sys.platform.startswith("darwin"),
- 'SOLARIS': sys.platform.startswith("sunos"),
- 'WINDOWS': sys.platform.startswith("win32")}
-
-
-class UnsupportedPlatform(Exception):
- """Support for this platform is not currently available."""
-
-class IfaceError(Exception):
- """Could not find default network interface."""
-
-class PermissionsError(SystemExit):
- """This test requires admin or root privileges to run. Exiting..."""
-
-
-def getClientPlatform(platform_name=None):
- for name, test in PLATFORMS.items():
- if not platform_name or platform_name.upper() == name:
- if test:
- return name, test
-
-def getPosixIfaces():
- from twisted.internet.test import _posixifaces
- log.msg("Attempting to discover network interfaces...")
- ifaces = _posixifaces._interfaces()
- return ifaces
-
-def getWindowsIfaces():
- from twisted.internet.test import _win32ifaces
- log.msg("Attempting to discover network interfaces...")
- ifaces = _win32ifaces._interfaces()
- return ifaces
-
-def getIfaces(platform_name=None):
- client, test = getClientPlatform(platform_name)
- if client:
- if client == ('LINUX' or 'DARWIN') or client[-3:] == 'BSD':
- return getPosixIfaces()
- elif client == 'WINDOWS':
- return getWindowsIfaces()
- ## XXX fixme figure out how to get iface for Solaris
- else:
- raise UnsupportedPlatform
- else:
- raise UnsupportedPlatform
-
-def getRandomUnusedPort(addr=None):
- free = False
- while not free:
- port = randint(1024, 65535)
- s = socket.socket()
- try:
- s.bind((addr, port))
- free = True
- except:
- pass
- s.close()
- return port
-
-def getNonLoopbackIfaces(platform_name=None):
- try:
- ifaces = getIfaces(platform_name)
- except UnsupportedPlatform, up:
- log.err(up)
-
- if not ifaces:
- log.msg("Unable to discover network interfaces...")
- return None
- else:
- found = [{i[0]: i[2]} for i in ifaces if i[0] != 'lo']
- log.debug("Found non-loopback interfaces: %s" % found)
- for iface in ifaces:
- try:
- interface = checkInterfaces(found)
- except IfaceError, ie:
- log.err(ie)
- return None
- else:
- return interfaces
-
-
-def getLocalAddress():
- default_iface = getDefaultIface()
- return default_iface.ipaddr
diff --git a/leap/util/version.py b/leap/util/version.py
deleted file mode 100644
index ecf8a22..0000000
--- a/leap/util/version.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-'''
-version.py
-----------
-Version information for leap_mx.
-
-@authors: Isis Agora Lovecruft, <isis@leap.se> 0x2cdb8b35
-@licence: see included LICENSE file
-@copyright: 2013 Isis Agora Lovecruft
-'''
-
-import os
-
-from twisted.python import versions
-
-name = 'leap_mx'
-version = versions.Version(name, 0, 0, 1, None)
-authors = [('Isis Agora Lovecruft', '<isis@leap.se>', '0x2cdb8b35'),]
-git_url = 'https://github.com/isislovecruft/leap_mx/'
-website = 'https://leap.se'
-
-def getVersion():
- version.authors = authors
- version.git_url = git_url
- version.website = website
- return version
-
-def getRepoDir():
- here = os.getcwd()
- base = here.rsplit(name, 1)[0]
- repo = os.path.join(base, name)
- return repo
-
-def __make_text__(extra_text=None):
- splitter = "-" * len(version.__str__())
- header = ["\n%s\n" % version.__str__(), "%s\n" % splitter]
- footer = ["Website: \t%s\n" % website, "Github: \t%s\n" % git_url, "\n"]
- contacts = ["\t%s, %s %s\n" % (a[0], a[1], a[2]) for a in authors]
- contacts.insert(0, "Authors: ")
-
- with_contacts = header + contacts
-
- if extra_text is not None:
- if isinstance(extra_text, iter):
- with_contacts.extend((e for e in extra_text))
- elif isinstance(extra_text, str):
- with_contacts.append(extra_text)
- else:
- print "Couldn't add extra text..."
-
- text = with_contacts + footer
- return text
-
-def __update_version__():
- repo = getRepoDir()
- version_file = os.path.join(repo, 'VERSION')
- version_text = __make_text__()
-
- with open(version_file, 'w+') as fh:
- fh.writelines((line for line in version_text))
- fh.flush()
- fh.truncate()
-
-
-if __name__ == "__main__":
- print "Generating new VERSION file..."
- __update_version__()
- print "Done."