From 19cda9ca7aa1aca18f61ebf659fc490f8ad4c15a Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Wed, 2 Sep 2015 18:07:51 -0300 Subject: [feature] adding security_casing to LeapMail so we can show in the UI the signature and encryption status --- .../pixelated/adapter/mailstore/leap_mailstore.py | 25 ++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'service/pixelated/adapter/mailstore/leap_mailstore.py') 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 @@ -74,6 +74,26 @@ class LeapMail(Mail): def mailbox_name(self): 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'' @@ -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(), -- cgit v1.2.3