From c64f74558c267e994bf07294a1cb899309b1c1ab Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Thu, 13 Jun 2013 21:16:09 -0400 Subject: Fix version number to be a consistent 0.2.2 (Closes: #2849) --- VERSION.md | 2 +- pkg/utils/bootstrap | 2 +- pkg/utils/test_bootstrap | 2 +- setup.py | 2 +- src/leap/mx/__init__.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/VERSION.md b/VERSION.md index b756111..43f6976 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1,5 +1,5 @@ -[leap_mx, version 0.0.1] +[leap_mx, version 0.2.2] ------------------------ Authors: Isis Agora Lovecruft, 0x2cdb8b35 Website: https://leap.se diff --git a/pkg/utils/bootstrap b/pkg/utils/bootstrap index b76a572..4e00d09 100755 --- a/pkg/utils/bootstrap +++ b/pkg/utils/bootstrap @@ -7,7 +7,7 @@ # # @author Isis Agora Lovecruft, 0x2cdb8b35 # @date 18 February 2013 -# @version 0.0.1 +# @version 0.2.2 ############################################################################## set -ex -- diff --git a/pkg/utils/test_bootstrap b/pkg/utils/test_bootstrap index f072d10..be32160 100755 --- a/pkg/utils/test_bootstrap +++ b/pkg/utils/test_bootstrap @@ -8,7 +8,7 @@ # # @author Isis Agora Lovecruft, 0x2cdb8b35 # @date 18 February 2013 -# @version 0.0.1 +# @version 0.2.2 ############################################################################## set -ex - diff --git a/setup.py b/setup.py index cc4c759..ce7c46b 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ else: ("/etc/init.d/", ["pkg/leap_mx"])] setup( name='leap.mx', - version="0.2.2-dev", + version="0.2.2", # bump also src/leap/mx/__init__ url="http://github.com/leapcode/leap_mx", license='AGPLv3+', diff --git a/src/leap/mx/__init__.py b/src/leap/mx/__init__.py index e3efc24..61c9a5c 100644 --- a/src/leap/mx/__init__.py +++ b/src/leap/mx/__init__.py @@ -17,4 +17,4 @@ """ Module initialization file for leap.mx . """ -__version__ = "0.2.2-dev" +__version__ = "0.2.2" -- cgit v1.2.3 From 6a624f3a2f351247bc98d16dc6d14f5549d8520f Mon Sep 17 00:00:00 2001 From: drebs Date: Wed, 19 Jun 2013 13:14:02 -0300 Subject: Update to latest Soledad api. --- changes/bug_adapt-to-latest-soledad-api | 1 + pkg/requirements.pip | 4 +++- src/leap/mx/mail_receiver.py | 18 +++++++++--------- 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 changes/bug_adapt-to-latest-soledad-api diff --git a/changes/bug_adapt-to-latest-soledad-api b/changes/bug_adapt-to-latest-soledad-api new file mode 100644 index 0000000..95f0deb --- /dev/null +++ b/changes/bug_adapt-to-latest-soledad-api @@ -0,0 +1 @@ + o Adapt to Soledad 0.2.1 API. diff --git a/pkg/requirements.pip b/pkg/requirements.pip index c09ce53..667c4af 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -2,7 +2,9 @@ Twisted>=12.0.2 paisley>=0.3.1 ## XXX change me to whatever you name the package in pypi python-gnupg>=0.3.0 -leap.common>=0.2.3-dev +leap-client>=0.2.3-dev +leap.soledad +leap.soledad_server ############### # Development # diff --git a/src/leap/mx/mail_receiver.py b/src/leap/mx/mail_receiver.py index 2c04863..b4e0d18 100644 --- a/src/leap/mx/mail_receiver.py +++ b/src/leap/mx/mail_receiver.py @@ -31,10 +31,10 @@ from twisted.application.service import Service from twisted.internet import inotify from twisted.python import filepath, log -from leap.soledad import LeapDocument -from leap.soledad.backends.leap_backend import EncryptionSchemes -from leap.soledad.backends.couch import CouchDatabase -from leap.common.keymanager import openpgp +from leap.soledad.document import SoledadDocument +from leap.soledad.target import EncryptionSchemes +from leap.soledad_server.couch import CouchDatabase +from leap.keymanager import openpgp class MailReceiver(Service): @@ -104,13 +104,13 @@ class MailReceiver(Service): @type message: str @return: uuid, doc to sync with Soledad - @rtype: tuple(str, LeapDocument) + @rtype: tuple(str, SoledadDocument) """ uuid, pubkey = uuid_pubkey log.msg("Encrypting message to %s's pubkey" % (uuid,)) log.msg("Pubkey: %s" % (pubkey,)) - doc = LeapDocument(doc_id=str(pyuuid.uuid4())) + doc = SoledadDocument(doc_id=str(pyuuid.uuid4())) data = {'incoming': True, 'content': message} @@ -137,12 +137,12 @@ class MailReceiver(Service): def _export_message(self, uuid_doc): """ - Given a UUID and a LeapDocument, it saves it directly in the + Given a UUID and a SoledadDocument, it saves it directly in the couchdb that serves as a backend for Soledad, in a db accessible to the recipient of the mail - @param uuid_doc: tuple that holds the UUID and LeapDocument - @type uuid_doc: tuple(str, LeapDocument) + @param uuid_doc: tuple that holds the UUID and SoledadDocument + @type uuid_doc: tuple(str, SoledadDocument) @return: True if it's ok to remove the message, False otherwise -- cgit v1.2.3 From e5f650cc5efdc75fec96fa50f5a3c35a693f66f6 Mon Sep 17 00:00:00 2001 From: drebs Date: Thu, 4 Jul 2013 10:35:54 -0300 Subject: Add dependency for leap.keymanager. --- changes/feature_add-dependency-for-keymanager | 1 + pkg/requirements.pip | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changes/feature_add-dependency-for-keymanager diff --git a/changes/feature_add-dependency-for-keymanager b/changes/feature_add-dependency-for-keymanager new file mode 100644 index 0000000..0ac1c2a --- /dev/null +++ b/changes/feature_add-dependency-for-keymanager @@ -0,0 +1 @@ + o Add dependency for leap.keymanager. diff --git a/pkg/requirements.pip b/pkg/requirements.pip index 667c4af..1bdb4dc 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -2,9 +2,9 @@ Twisted>=12.0.2 paisley>=0.3.1 ## XXX change me to whatever you name the package in pypi python-gnupg>=0.3.0 -leap-client>=0.2.3-dev leap.soledad leap.soledad_server +leap.keymanager>=0.2.1 ############### # Development # -- cgit v1.2.3 From abfa49f3fb9a9faa484a8bb9f36c96cfb81f4e0e Mon Sep 17 00:00:00 2001 From: drebs Date: Thu, 25 Jul 2013 18:02:19 -0300 Subject: Fix keymanager requirement to version 0.2.0. --- pkg/requirements.pip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/requirements.pip b/pkg/requirements.pip index 1bdb4dc..7ec489d 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -4,7 +4,7 @@ paisley>=0.3.1 python-gnupg>=0.3.0 leap.soledad leap.soledad_server -leap.keymanager>=0.2.1 +leap.keymanager>=0.2.0 ############### # Development # -- cgit v1.2.3 From 803f23e45740c702ebc66f9741c0af564b54f3b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Touceda?= Date: Wed, 31 Jul 2013 15:07:24 -0300 Subject: Use the new API to import ascii armored key --- changes/bug_importascii | 3 +++ src/leap/mx/mail_receiver.py | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 changes/bug_importascii diff --git a/changes/bug_importascii b/changes/bug_importascii new file mode 100644 index 0000000..902df95 --- /dev/null +++ b/changes/bug_importascii @@ -0,0 +1,3 @@ + o Use the new API to import a new ascii armored public key. Fixes + #3352. + o Add "incoming" index for ease of listing new email. \ No newline at end of file diff --git a/src/leap/mx/mail_receiver.py b/src/leap/mx/mail_receiver.py index b4e0d18..43925df 100644 --- a/src/leap/mx/mail_receiver.py +++ b/src/leap/mx/mail_receiver.py @@ -116,18 +116,20 @@ class MailReceiver(Service): if pubkey is None or len(pubkey) == 0: doc.content = { + "incoming": True, "_enc_scheme": EncryptionSchemes.NONE, "_enc_json": json.dumps(data) } return uuid, doc - def _ascii_to_openpgp_cb(gpg): + openpgp_key = None + with openpgp.temporary_gpgwrapper() as gpg: + gpg.import_keys(pubkey) key = gpg.list_keys().pop() - return openpgp._build_key_from_gpg(address, key, pubkey) - - openpgp_key = openpgp._safe_call(_ascii_to_openpgp_cb, pubkey) + openpgp_key = openpgp._build_key_from_gpg(address, key, pubkey) doc.content = { + "incoming": True, "_enc_scheme": EncryptionSchemes.PUBKEY, "_enc_json": openpgp.encrypt_asym(json.dumps(data), openpgp_key) -- cgit v1.2.3 From 0308d1d026a6a66f60519a2b753a3f6ea12c9ba1 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 6 Aug 2013 16:40:07 +0200 Subject: Fix alias lookup return codes. Closes #3356 --- changes/bug_fix_return_codes | 1 + src/leap/mx/alias_resolver.py | 17 ++++++++++++----- src/leap/mx/check_recipient_access.py | 6 +----- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 changes/bug_fix_return_codes diff --git a/changes/bug_fix_return_codes b/changes/bug_fix_return_codes new file mode 100644 index 0000000..9debe44 --- /dev/null +++ b/changes/bug_fix_return_codes @@ -0,0 +1 @@ + o Fix alias lookup return codes. Closes: #3356 diff --git a/src/leap/mx/alias_resolver.py b/src/leap/mx/alias_resolver.py index 2074ee5..1d478c7 100644 --- a/src/leap/mx/alias_resolver.py +++ b/src/leap/mx/alias_resolver.py @@ -29,6 +29,7 @@ try: # from twisted.mail import alias from twisted.protocols import postfix from twisted.python import log + from twisted.internet import defer except ImportError: print "This software requires Twisted. Please see the README file" print "for instructions on getting required dependencies." @@ -47,21 +48,27 @@ class AliasResolverFactory(postfix.PostfixTCPMapDeferringDictServerFactory): log.msg("Result not found") return result + def spit_result(self, result): + if result is None: + return defer.succeed("500 NO RESULT") + else: + return defer.succeed("200") + def get(self, key): try: log.msg("Processing key: %s" % (key,)) if key.find("@") == -1: log.msg("Ignoring key since it's not an email address") return None - key = key.split("@")[0] key = key.split("+")[0] log.msg("Final key to query: %s" % (key,)) d = self._cdb.queryByLoginOrAlias(key) d.addCallback(self._to_str) d.addErrback(log.err) - return d - except: - log.err() - return None + d.addCallback(self.spit_result) + d.addErrback(log.err) + return d + except Exception as e: + log.err('exception in get: %r' % e) diff --git a/src/leap/mx/check_recipient_access.py b/src/leap/mx/check_recipient_access.py index 1b44504..b75d1eb 100644 --- a/src/leap/mx/check_recipient_access.py +++ b/src/leap/mx/check_recipient_access.py @@ -26,11 +26,7 @@ from leap.mx.alias_resolver import AliasResolverFactory class CheckRecipientAccess(postfix.PostfixTCPMapServer): - def _cbGot(self, value): - if value is None: - self.sendCode(500) - else: - self.sendCode(200) + pass class CheckRecipientAccessFactory(AliasResolverFactory): -- cgit v1.2.3 From 67433e626eca83ddc0d52076b815743004962748 Mon Sep 17 00:00:00 2001 From: drebs Date: Thu, 8 Aug 2013 16:11:18 +0200 Subject: Update to latest keymanager API and support bundled GPG. --- changes/feature_keymanager-should-support-bundled-gpg | 1 + src/leap/mx/mail_receiver.py | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 changes/feature_keymanager-should-support-bundled-gpg diff --git a/changes/feature_keymanager-should-support-bundled-gpg b/changes/feature_keymanager-should-support-bundled-gpg new file mode 100644 index 0000000..1d9a458 --- /dev/null +++ b/changes/feature_keymanager-should-support-bundled-gpg @@ -0,0 +1 @@ + o Update keymanager API. Closes #3397. diff --git a/src/leap/mx/mail_receiver.py b/src/leap/mx/mail_receiver.py index 43925df..a830fa1 100644 --- a/src/leap/mx/mail_receiver.py +++ b/src/leap/mx/mail_receiver.py @@ -123,7 +123,7 @@ class MailReceiver(Service): return uuid, doc openpgp_key = None - with openpgp.temporary_gpgwrapper() as gpg: + with openpgp.TempGPGWrapper(gpgbinary='/usr/bin/gpg') as gpg: gpg.import_keys(pubkey) key = gpg.list_keys().pop() openpgp_key = openpgp._build_key_from_gpg(address, key, pubkey) @@ -131,8 +131,10 @@ class MailReceiver(Service): doc.content = { "incoming": True, "_enc_scheme": EncryptionSchemes.PUBKEY, - "_enc_json": openpgp.encrypt_asym(json.dumps(data), - openpgp_key) + "_enc_json": str(gpg.encrypt( + json.dumps(data), + openpgp_key.fingerprint, + symmetric=False)) } return uuid, doc -- cgit v1.2.3 From 26a743c6a0415be5f7c1276811fad919700d6dbf Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Wed, 7 Aug 2013 13:20:06 +0200 Subject: Return code even if bare username --- changes/bug_3405_return_for_bare_username | 1 + src/leap/mx/alias_resolver.py | 41 +++++++++++++++++++++++++------ src/leap/mx/check_recipient_access.py | 13 +++++++--- 3 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 changes/bug_3405_return_for_bare_username diff --git a/changes/bug_3405_return_for_bare_username b/changes/bug_3405_return_for_bare_username new file mode 100644 index 0000000..459882a --- /dev/null +++ b/changes/bug_3405_return_for_bare_username @@ -0,0 +1 @@ + o Give a return code for bare usernames too. Closes: #3405 diff --git a/src/leap/mx/alias_resolver.py b/src/leap/mx/alias_resolver.py index 1d478c7..08ebb73 100644 --- a/src/leap/mx/alias_resolver.py +++ b/src/leap/mx/alias_resolver.py @@ -19,6 +19,8 @@ """ Classes for resolving postfix aliases. +Test this with postmap -v -q "foo" tcp:localhost:4242 + TODO: o Look into using twisted.protocols.postfix.policies classes for controlling concurrent connections and throttling resource consumption. @@ -35,13 +37,27 @@ except ImportError: print "for instructions on getting required dependencies." +class LEAPPostFixTCPMapserver(postfix.PostfixTCPMapServer): + def _cbGot(self, value): + if value is None: + self.sendCode(500, postfix.quote("NOT FOUND SRY")) + else: + self.sendCode(200, postfix.quote(value)) + + class AliasResolverFactory(postfix.PostfixTCPMapDeferringDictServerFactory): + + protocol = LEAPPostFixTCPMapserver + def __init__(self, couchdb, *args, **kwargs): postfix.PostfixTCPMapDeferringDictServerFactory.__init__( self, *args, **kwargs) self._cdb = couchdb def _to_str(self, result): + """ + Properly encodes the result string if any. + """ if isinstance(result, unicode): result = result.encode("utf8") if result is None: @@ -49,24 +65,33 @@ class AliasResolverFactory(postfix.PostfixTCPMapDeferringDictServerFactory): return result def spit_result(self, result): + """ + Formats the return codes in a postfix friendly format. + """ if result is None: - return defer.succeed("500 NO RESULT") + return None else: - return defer.succeed("200") + return defer.succeed(result) def get(self, key): + """ + Looks up the passed key, but only up to the username id of the key. + + At some point we will have to consider the domain part too. + """ try: log.msg("Processing key: %s" % (key,)) if key.find("@") == -1: - log.msg("Ignoring key since it's not an email address") - return None - key = key.split("@")[0] - key = key.split("+")[0] + # No proper email address, but we need to continue processing + # the query so postmap is happy. + log.msg("Key it's not an email address") + else: + key = key.split("@")[0] + key = key.split("+")[0] log.msg("Final key to query: %s" % (key,)) d = self._cdb.queryByLoginOrAlias(key) - d.addCallback(self._to_str) - d.addErrback(log.err) + d.addCallback(self._to_str) d.addCallback(self.spit_result) d.addErrback(log.err) return d diff --git a/src/leap/mx/check_recipient_access.py b/src/leap/mx/check_recipient_access.py index b75d1eb..0520c7c 100644 --- a/src/leap/mx/check_recipient_access.py +++ b/src/leap/mx/check_recipient_access.py @@ -18,6 +18,8 @@ """ Classes for resolving postfix recipient access + +Test this with postmap -v -q "foo" tcp:localhost:2244 """ from twisted.protocols import postfix @@ -25,9 +27,14 @@ from twisted.protocols import postfix from leap.mx.alias_resolver import AliasResolverFactory -class CheckRecipientAccess(postfix.PostfixTCPMapServer): - pass +class LEAPPostFixTCPMapserverAccess(postfix.PostfixTCPMapServer): + def _cbGot(self, value): + if value is None: + self.sendCode(500, postfix.quote("NOT FOUND SORRY")) + else: + # We do not send the value in this case + self.sendCode(200) class CheckRecipientAccessFactory(AliasResolverFactory): - protocol = CheckRecipientAccess + protocol = LEAPPostFixTCPMapserverAccess -- cgit v1.2.3 From 7d7fd6c0556b62f2da2d989b2c9680ab38704075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Touceda?= Date: Fri, 9 Aug 2013 14:41:17 -0300 Subject: Fold in changes --- CHANGELOG | 10 ++++++++++ changes/bug_3405_return_for_bare_username | 1 - changes/bug_adapt-to-latest-soledad-api | 1 - changes/bug_fix-pip-install | 1 - changes/bug_fix_return_codes | 1 - changes/bug_importascii | 3 --- changes/feature_add-dependency-for-keymanager | 1 - changes/feature_keymanager-should-support-bundled-gpg | 1 - 8 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 CHANGELOG delete mode 100644 changes/bug_3405_return_for_bare_username delete mode 100644 changes/bug_adapt-to-latest-soledad-api delete mode 100644 changes/bug_fix-pip-install delete mode 100644 changes/bug_fix_return_codes delete mode 100644 changes/bug_importascii delete mode 100644 changes/feature_add-dependency-for-keymanager delete mode 100644 changes/feature_keymanager-should-support-bundled-gpg diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..0c449c6 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,10 @@ +0.3.0 Aug 9: + o Give a return code for bare usernames too. Closes: #3405 + o Adapt to Soledad 0.2.1 API. + o Fix broken pip install + o Fix alias lookup return codes. Closes: #3356 + o Use the new API to import a new ascii armored public key. Fixes + #3352. + o Add "incoming" index for ease of listing new email. + o Add dependency for leap.keymanager. + o Adapt to the new keymanager API. Closes #3397. diff --git a/changes/bug_3405_return_for_bare_username b/changes/bug_3405_return_for_bare_username deleted file mode 100644 index 459882a..0000000 --- a/changes/bug_3405_return_for_bare_username +++ /dev/null @@ -1 +0,0 @@ - o Give a return code for bare usernames too. Closes: #3405 diff --git a/changes/bug_adapt-to-latest-soledad-api b/changes/bug_adapt-to-latest-soledad-api deleted file mode 100644 index 95f0deb..0000000 --- a/changes/bug_adapt-to-latest-soledad-api +++ /dev/null @@ -1 +0,0 @@ - o Adapt to Soledad 0.2.1 API. diff --git a/changes/bug_fix-pip-install b/changes/bug_fix-pip-install deleted file mode 100644 index fcb5829..0000000 --- a/changes/bug_fix-pip-install +++ /dev/null @@ -1 +0,0 @@ - o Fix broken pip install diff --git a/changes/bug_fix_return_codes b/changes/bug_fix_return_codes deleted file mode 100644 index 9debe44..0000000 --- a/changes/bug_fix_return_codes +++ /dev/null @@ -1 +0,0 @@ - o Fix alias lookup return codes. Closes: #3356 diff --git a/changes/bug_importascii b/changes/bug_importascii deleted file mode 100644 index 902df95..0000000 --- a/changes/bug_importascii +++ /dev/null @@ -1,3 +0,0 @@ - o Use the new API to import a new ascii armored public key. Fixes - #3352. - o Add "incoming" index for ease of listing new email. \ No newline at end of file diff --git a/changes/feature_add-dependency-for-keymanager b/changes/feature_add-dependency-for-keymanager deleted file mode 100644 index 0ac1c2a..0000000 --- a/changes/feature_add-dependency-for-keymanager +++ /dev/null @@ -1 +0,0 @@ - o Add dependency for leap.keymanager. diff --git a/changes/feature_keymanager-should-support-bundled-gpg b/changes/feature_keymanager-should-support-bundled-gpg deleted file mode 100644 index 1d9a458..0000000 --- a/changes/feature_keymanager-should-support-bundled-gpg +++ /dev/null @@ -1 +0,0 @@ - o Update keymanager API. Closes #3397. -- cgit v1.2.3 From 5ae019af6e29697dd43700c614e06298d719ff96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Touceda?= Date: Fri, 9 Aug 2013 14:43:09 -0300 Subject: Bump version to 0.3.0 --- VERSION.md | 6 +++--- setup.py | 2 +- src/leap/mx/__init__.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/VERSION.md b/VERSION.md index 43f6976..f29cb7b 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1,7 +1,7 @@ -[leap_mx, version 0.2.2] +[leap_mx, version 0.3.0] ------------------------ -Authors: Isis Agora Lovecruft, 0x2cdb8b35 +Authors: The LEAP Team Website: https://leap.se -Github: https://github.com/isislovecruft/leap_mx/ +Github: https://github.com/leapcode/leap_mx/ diff --git a/setup.py b/setup.py index ce7c46b..a0cbbae 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ else: ("/etc/init.d/", ["pkg/leap_mx"])] setup( name='leap.mx', - version="0.2.2", + version="0.3.0", # bump also src/leap/mx/__init__ url="http://github.com/leapcode/leap_mx", license='AGPLv3+', diff --git a/src/leap/mx/__init__.py b/src/leap/mx/__init__.py index 61c9a5c..e63479c 100644 --- a/src/leap/mx/__init__.py +++ b/src/leap/mx/__init__.py @@ -17,4 +17,4 @@ """ Module initialization file for leap.mx . """ -__version__ = "0.2.2" +__version__ = "0.3.0" -- cgit v1.2.3