summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter/mailstore/leap_mailstore.py
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/adapter/mailstore/leap_mailstore.py
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/adapter/mailstore/leap_mailstore.py')
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py25
1 files changed, 23 insertions, 2 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(),