diff options
| author | Duda Dornelles <ddornell@thoughtworks.com> | 2015-09-02 16:14:56 -0300 | 
|---|---|---|
| committer | Duda Dornelles <ddornell@thoughtworks.com> | 2015-09-02 16:14:56 -0300 | 
| commit | e75d8f415a979eb88ff7c903b1898853f5a1fd82 (patch) | |
| tree | b3d1e10de639f007d80fff56b8f2ee62d41c2c4e | |
| parent | 945f3a46cadfdd72ac8d0c2e175260cfaa1fd21e (diff) | |
[feat] adding encryption header to msg before saving
This way we can tell if a message was originally encrypted, so that we
can show that information to the end user.
| -rw-r--r-- | mail/src/leap/mail/incoming/service.py | 11 | ||||
| -rw-r--r-- | mail/src/leap/mail/incoming/tests/test_incoming_mail.py | 23 | 
2 files changed, 32 insertions, 2 deletions
| diff --git a/mail/src/leap/mail/incoming/service.py b/mail/src/leap/mail/incoming/service.py index 2bc6751..57e0007 100644 --- a/mail/src/leap/mail/incoming/service.py +++ b/mail/src/leap/mail/incoming/service.py @@ -90,6 +90,7 @@ class IncomingMail(Service):      CONTENT_KEY = "content"      LEAP_SIGNATURE_HEADER = 'X-Leap-Signature' +    LEAP_ENCRYPTION_HEADER = 'X-Leap-Encryption'      """      Header added to messages when they are decrypted by the fetcher,      which states the validity of an eventual signature that might be included @@ -99,6 +100,8 @@ class IncomingMail(Service):      LEAP_SIGNATURE_INVALID = 'invalid'      LEAP_SIGNATURE_COULD_NOT_VERIFY = 'could not verify' +    LEAP_ENCRYPTION_DECRYPTED = 'decrypted' +      def __init__(self, keymanager, soledad, inbox, userid,                   check_period=INCOMING_CHECK_PERIOD): @@ -461,6 +464,9 @@ class IncomingMail(Service):          d.addCallback(add_leap_header)          return d +    def _add_decrypted_header(self, msg): +        msg.add_header(self.LEAP_ENCRYPTION_HEADER, self.LEAP_ENCRYPTION_DECRYPTED) +      def _decrypt_multipart_encrypted_msg(self, msg, encoding, senderAddress):          """          Decrypt a message with content-type 'multipart/encrypted'. @@ -503,6 +509,7 @@ class IncomingMail(Service):              # all ok, replace payload by unencrypted payload              msg.set_payload(decrmsg.get_payload()) +            self._add_decrypted_header(msg)              return (msg, signkey)          d = self._keymanager.decrypt( @@ -537,7 +544,9 @@ class IncomingMail(Service):          def decrypted_data(res):              decrdata, signkey = res -            return data.replace(pgp_message, decrdata), signkey +            replaced_data = data.replace(pgp_message, decrdata) +            self._add_decrypted_header(origmsg) +            return replaced_data, signkey          def encode_and_return(res):              data, signkey = res diff --git a/mail/src/leap/mail/incoming/tests/test_incoming_mail.py b/mail/src/leap/mail/incoming/tests/test_incoming_mail.py index f43f746..798824a 100644 --- a/mail/src/leap/mail/incoming/tests/test_incoming_mail.py +++ b/mail/src/leap/mail/incoming/tests/test_incoming_mail.py @@ -176,8 +176,22 @@ subject: independence of cyberspace          d.addCallback(put_raw_key_called)          return d +    def testAddDecryptedHeader(self): +        class DummyMsg(): +            def __init__(self): +                self.headers = {} + +            def add_header(self, k, v): +                self.headers[k]=v + +        msg = DummyMsg() +        self.fetcher._add_decrypted_header(msg) + +        self.assertEquals(msg.headers['X-Leap-Encryption'], 'decrypted') +      def testDecryptEmail(self):          self.fetcher._decryption_error = Mock() +        self.fetcher._add_decrypted_header = Mock()          def create_encrypted_message(encstr):              message = Parser().parsestr(self.EMAIL) @@ -198,9 +212,16 @@ subject: independence of cyberspace              return newmsg          def decryption_error_not_called(_): -            self.assertFalse(self.fetcher._decyption_error.called, +            self.assertFalse(self.fetcher._decryption_error.called,                               "There was some errors with decryption") +        def add_decrypted_header_called(_): +            self.assertTrue(self.fetcher._add_decrypted_header.called, +                             "There was some errors with decryption") + + + +          d = self._km.encrypt(              self.EMAIL,              ADDRESS, OpenPGPKey, sign=ADDRESS_2) | 
