summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2015-09-02 18:07:51 -0300
committerDuda Dornelles <ddornell@thoughtworks.com>2015-09-02 18:09:33 -0300
commit19cda9ca7aa1aca18f61ebf659fc490f8ad4c15a (patch)
tree96095e86fe90c5505a27f689d515be45146685d7 /service/pixelated
parentd01d60d4d7e9b8bdc7d8741e2567e30c8d476c0b (diff)
[feature] adding security_casing to LeapMail so we can show in the UI the signature and encryption status
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py25
-rw-r--r--service/pixelated/extensions/incoming_decrypt_header.py35
2 files changed, 23 insertions, 37 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py
index 993f413c..a27ce5c4 100644
--- a/service/pixelated/adapter/mailstore/leap_mailstore.py
+++ b/service/pixelated/adapter/mailstore/leap_mailstore.py
@@ -16,13 +16,13 @@
import base64
from email.header import decode_header
import quopri
-import re
from uuid import uuid4
+
+import re
from leap.mail.adaptors.soledad import SoledadMailAdaptor, ContentDocWrapper
from twisted.internet import defer
from pixelated.adapter.mailstore.body_parser import BodyParser
from pixelated.adapter.mailstore.mailstore import MailStore, underscore_uuid
-
from leap.mail.mail import Message
from pixelated.adapter.model.mail import Mail, InputMail
@@ -75,6 +75,26 @@ class LeapMail(Mail):
return self._mailbox_name
@property
+ def security_casing(self):
+ casing = dict(imprints=self._signature_information(), locks=[])
+ if self._encrypted() == "decrypted":
+ casing["locks"] = [{"state": "valid"}]
+ return casing
+
+ def _encrypted(self):
+ return self.headers.get("X-Leap-Encryption", "false")
+
+ def _signature_information(self):
+ signature = self.headers.get("X-Leap-Signature", None)
+ if signature is None or signature.startswith("could not verify"):
+ return [{"state": "no_signature_information"}]
+ else:
+ if signature.startswith("valid"):
+ return [{"state": "valid", "seal": {"validity": "valid"}}]
+ else:
+ return []
+
+ @property
def raw(self):
result = u''
for k, v in self._headers.items():
@@ -107,6 +127,7 @@ class LeapMail(Mail):
'tags': self.tags,
'status': list(self.status),
'body': self._body,
+ 'security_casing': self.security_casing,
'textPlainBody': self._body,
'replying': self._replying_dict(),
'mailbox': self._mailbox_name.lower(),
diff --git a/service/pixelated/extensions/incoming_decrypt_header.py b/service/pixelated/extensions/incoming_decrypt_header.py
deleted file mode 100644
index 2db5dd1d..00000000
--- a/service/pixelated/extensions/incoming_decrypt_header.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import leap.mail.imap.fetch as fetch
-
-
-def mark_as_encrypted_inline(f):
-
- def w(*args, **kwargs):
- msg, valid_sign = f(*args)
- is_encrypted = fetch.PGP_BEGIN in args[1].as_string() and fetch.PGP_END in args[1].as_string()
- decrypted_successfully = fetch.PGP_BEGIN not in msg.as_string() and fetch.PGP_END not in msg.as_string()
-
- if not is_encrypted:
- encrypted = 'false'
- else:
- if decrypted_successfully:
- encrypted = 'true'
- else:
- encrypted = 'fail'
-
- msg.add_header('X-Pixelated-encryption-status', encrypted)
- return msg, valid_sign
-
- return w
-
-
-def mark_as_encrypted_multipart(f):
-
- def w(*args, **kwargs):
- msg, valid_sign = f(*args)
- msg.add_header('X-Pixelated-encryption-status', 'true')
- return msg, valid_sign
- return w
-
-
-fetch.LeapIncomingMail._maybe_decrypt_inline_encrypted_msg = mark_as_encrypted_inline(fetch.LeapIncomingMail._maybe_decrypt_inline_encrypted_msg)
-fetch.LeapIncomingMail._decrypt_multipart_encrypted_msg = mark_as_encrypted_multipart(fetch.LeapIncomingMail._decrypt_multipart_encrypted_msg)