diff options
author | Kali Kaneko <kali@leap.se> | 2013-12-23 02:06:16 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2013-12-23 02:06:16 -0400 |
commit | 4138e145e2c24e18c13669e76098f6f6344b3e60 (patch) | |
tree | ac714778599aaa7933178b7c75630531fe6217cc | |
parent | 0c6e6052872822caa61298778b2efb8e87c4ab29 (diff) | |
parent | df58fb83cf7278a9d2e2ddb278fa9a0b314e88bb (diff) |
Merge branch 'develop' into debian-0.5.0-rc
Preparing for 0.5.0 release
-rw-r--r-- | changes/VERSION_COMPAT | 1 | ||||
-rw-r--r-- | changes/bug_4475_use-couch-document | 1 | ||||
-rw-r--r-- | changes/bug_multiple_encodings | 1 | ||||
-rw-r--r-- | src/leap/mx/mail_receiver.py | 33 |
4 files changed, 14 insertions, 22 deletions
diff --git a/changes/VERSION_COMPAT b/changes/VERSION_COMPAT index cc00ecf..615578e 100644 --- a/changes/VERSION_COMPAT +++ b/changes/VERSION_COMPAT @@ -8,3 +8,4 @@ # # BEGIN DEPENDENCY LIST ------------------------- # leap.foo.bar>=x.y.z +leap.soledad.common>=0.5 diff --git a/changes/bug_4475_use-couch-document b/changes/bug_4475_use-couch-document new file mode 100644 index 0000000..54c6897 --- /dev/null +++ b/changes/bug_4475_use-couch-document @@ -0,0 +1 @@ + o Use CouchDocument to comply with new Soledad couch backend (#4475). diff --git a/changes/bug_multiple_encodings b/changes/bug_multiple_encodings new file mode 100644 index 0000000..3113328 --- /dev/null +++ b/changes/bug_multiple_encodings @@ -0,0 +1 @@ + o Some emails are multipart and each part has its own encoding.
\ No newline at end of file diff --git a/src/leap/mx/mail_receiver.py b/src/leap/mx/mail_receiver.py index c90dda9..3561d33 100644 --- a/src/leap/mx/mail_receiver.py +++ b/src/leap/mx/mail_receiver.py @@ -27,25 +27,18 @@ import json import email.utils import socket -try: - import cchardet as chardet -except ImportError: - import chardet - from email import message_from_string from twisted.application.service import Service from twisted.internet import inotify, defer, task from twisted.python import filepath, log -from leap.common.mail import get_email_charset -from leap.soledad.common.document import SoledadDocument from leap.soledad.common.crypto import ( EncryptionSchemes, ENC_JSON_KEY, ENC_SCHEME_KEY, ) -from leap.soledad.common.couch import CouchDatabase +from leap.soledad.common.couch import CouchDatabase, CouchDocument from leap.keymanager import openpgp @@ -109,7 +102,7 @@ class MailReceiver(Service): :return: doc to sync with Soledad or None, None if something went wrong. - :rtype: SoledadDocument + :rtype: CouchDocument """ if pubkey is None or len(pubkey) == 0: log.msg("_encrypt_message: Something went wrong, here's all " @@ -118,14 +111,8 @@ class MailReceiver(Service): # find message's encoding message_as_string = message.as_string() - encoding = get_email_charset( - message_as_string.decode("utf8", "replace"), - default=None) - if encoding is None: - result = chardet.detect(message_as_string) - encoding = result["encoding"] - doc = SoledadDocument(doc_id=str(pyuuid.uuid4())) + doc = CouchDocument(doc_id=str(pyuuid.uuid4())) # store plain text if pubkey is not available data = {'incoming': True, 'content': message_as_string} @@ -133,7 +120,8 @@ class MailReceiver(Service): doc.content = { self.INCOMING_KEY: True, ENC_SCHEME_KEY: EncryptionSchemes.NONE, - ENC_JSON_KEY: json.dumps(data, encoding=encoding) + ENC_JSON_KEY: json.dumps(data, + ensure_ascii=False) } return doc @@ -143,7 +131,8 @@ class MailReceiver(Service): key = gpg.list_keys().pop() # We don't care about the actual address, so we use a # dummy one, we just care about the import of the pubkey - openpgp_key = openpgp._build_key_from_gpg("dummy@mail.com", key, pubkey) + openpgp_key = openpgp._build_key_from_gpg("dummy@mail.com", + key, pubkey) # add X-Leap-Provenance header if message is not encrypted if message.get_content_type() != 'multipart/encrypted' and \ @@ -158,7 +147,7 @@ class MailReceiver(Service): self.INCOMING_KEY: True, ENC_SCHEME_KEY: EncryptionSchemes.PUBKEY, ENC_JSON_KEY: str(gpg.encrypt( - json.dumps(data, encoding=encoding), + json.dumps(data, ensure_ascii=False), openpgp_key.fingerprint, symmetric=False)) } @@ -167,14 +156,14 @@ class MailReceiver(Service): def _export_message(self, uuid, doc): """ - Given a UUID and a SoledadDocument, it saves it directly in the + Given a UUID and a CouchDocument, 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: the mail owner's uuid :type uuid: str - :param doc: SoledadDocument that represents the email - :type doc: SoledadDocument + :param doc: CouchDocument that represents the email + :type doc: CouchDocument :return: True if it's ok to remove the message, False otherwise |