summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Touceda <chiiph@leap.se>2013-04-25 11:35:07 -0300
committerTomas Touceda <chiiph@leap.se>2013-05-07 14:01:11 -0300
commit833f5a3cb8352cf81962817ec7ed69b982891a80 (patch)
tree99c1d4928cf158caf30f671a8bb8022f040fb473
parentbe45dc148a3586149f58944788f3e9bceea4f410 (diff)
Add check recipient access
-rw-r--r--src/leap/mx/check_recipient_access.py59
-rwxr-xr-xstart_mx.py5
2 files changed, 64 insertions, 0 deletions
diff --git a/src/leap/mx/check_recipient_access.py b/src/leap/mx/check_recipient_access.py
new file mode 100644
index 0000000..8d03297
--- /dev/null
+++ b/src/leap/mx/check_recipient_access.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+# check_recipient_access.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/>.
+
+"""
+Classes for resolving postfix recipient access
+"""
+
+import logging
+
+try:
+ from twisted.protocols import postfix
+except ImportError:
+ print "This software requires Twisted. Please see the README file"
+ print "for instructions on getting required dependencies."
+
+logger = logging.getLogger(__name__)
+
+
+class CheckRecipientAccess(postfix.PostfixTCPMapServer):
+ def _cbGot(self, value):
+ if value is None:
+ self.sendCode(500)
+ else:
+ self.sendCode(200)
+
+
+class CheckRecipientAccessFactory(postfix.PostfixTCPMapDeferringDictServerFactory):
+
+ protocol = CheckRecipientAccess
+
+ def __init__(self, couchdb, *args, **kwargs):
+ postfix.PostfixTCPMapDeferringDictServerFactory.__init__(self, *args, **kwargs)
+ self._cdb = couchdb
+
+ def get(self, key):
+ orig_key = key
+ try:
+ key = key.split("@")[0]
+ key = key.split("+")[0]
+ except Exception as e:
+ key = orig_key
+ logger.exception("%s" % (e,))
+ d = self._cdb.queryByLoginOrAlias(key)
+ return d
diff --git a/start_mx.py b/start_mx.py
index 067011f..20ea554 100755
--- a/start_mx.py
+++ b/start_mx.py
@@ -26,6 +26,7 @@ from functools import partial
try:
from leap.mx import couchdbhelper, mail_receiver
from leap.mx.alias_resolver import AliasResolverFactory
+ from leap.mx.check_recipient_access import CheckRecipientAccessFactory
except ImportError, ie:
print "%s \nExiting... \n" % ie.message
raise
@@ -124,4 +125,8 @@ if __name__ == "__main__":
alias_endpoint = TCP4ServerEndpoint(reactor, 4242)
alias_endpoint.listen(AliasResolverFactory(couchdb=cdb))
+ # Check recipient access
+ check_recipient = TCP4ServerEndpoint(reactor, 2244)
+ check_recipient.listen(CheckRecipientAccessFactory(couchdb=cdb))
+
reactor.run()