summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/leap/mx/alias_resolver.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/leap/mx/alias_resolver.py b/src/leap/mx/alias_resolver.py
index 48e7a85..2a244d0 100644
--- a/src/leap/mx/alias_resolver.py
+++ b/src/leap/mx/alias_resolver.py
@@ -161,12 +161,11 @@ class StatusCodes(object):
class AliasResolver(postfix.PostfixTCPMapServer):
- """
- Resolve postfix aliases, similarly to using "$ postmap -q <alias>".
+ """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:
+ specifying an alias ``key`` to look up, which will be used to query the
+ local user database. You can test it with:
$ ./alias_resolver.py &
$ /usr/bin/postmap -q <key> tcp:localhost:1347
@@ -176,7 +175,12 @@ class AliasResolver(postfix.PostfixTCPMapServer):
https://www.iana.org/assignments/smtp-enhanced-status-codes/
"""
def __init__(self, *args, **kwargs):
- """Create a server which listens for Postfix aliases to resolve."""
+ """Create a server which listens for Postfix aliases to resolve.
+
+ :param int timeout: Number of seconds to wait for a response.
+ :param str delimiter: The delimiter to use for the EOL on responses.
+ (Default: '\n')
+ """
super(postfix.PostfixTCPMapServer, self).__init__(*args, **kwargs)
self.status_codes = StatusCodes()
@@ -198,7 +202,11 @@ class AliasResolver(postfix.PostfixTCPMapServer):
@defer.inlineCallbacks
def do_put(self, keyAndValue):
- """Add a key and value to the database, provided it does not exist."""
+ """Add a key and value to the database, provided it does not exist.
+
+ :param str keyAndValue: An alias and email address, separated by a
+ space, i.e. ``"isis isis@leap.se"``.
+ """
if keyAndValue is None:
self.sendCode(500)
log.warn("Command 'put' takes two parameters.")
@@ -219,20 +227,26 @@ class AliasResolver(postfix.PostfixTCPMapServer):
@defer.inlineCallbacks
def do_delete(self, key):
- """
- Delete an alias from the mapping database.
+ """Delete an alias from the CouchDB.
+
+ xxx I'm not sure if implementing this would be a good idea...
- xxx not sure if this is a good idea...
+ :param str key: An email address to delete from the CouchDB.
"""
raise NotImplemented
def check_recipient_access(self, key):
- """Make a query to resolve an alias."""
- self.do_get(self, key)
+ """Make a query to the CouchDB to resolve an alias.
- def virtual_alias_map(self, key):
+ If the ``key`` is an email address which the CouchDB has information
+ for that account, we should respond to Postfix with an '200%20\n".
+
+ :param str key: An email address to look up in the CouchDB.
"""
- Get the Universal Unique ID for the alias address. If
+ self.do_get(key)
+
+ def virtual_alias_map(self, key):
+ """Get the Universal Unique ID for the alias address. If
virtual_transport is True, then suffix the UUID with a domain.
xxx I don't think we actually need couchdb for this, the UUID is an
@@ -241,6 +255,11 @@ class AliasResolver(postfix.PostfixTCPMapServer):
querying a database, I would presume), it seems silly to do this.
Instead, we should query CouchDB with the UUID to get the GPG keyid.
+
+ xxx Or are we supposed to query Soledad for this?
+
+ :param str key: An email address to look up in the CouchDB.
+ :returns: The UUID of the user.
"""
## xxx need email address parser
client_id = createUUID(key)