예제 #1
0
    def _get_message_keys(self, messageid):
        keys = self.key_cache.get(messageid, [])
        if not keys:
            email = Email(self._idx(), messageid)

            # First we check the Autocrypt headers
            msg = email.get_msg(pgpmime='all')
            for ach in ([extract_autocrypt_header(msg)] +
                        extract_autocrypt_gossip_headers(msg)):
                if 'keydata' in ach:
                    for keydata in get_keydata(ach['keydata'],
                                               autocrypt_header=ach,
                                               include_subkeys=False):
                        keys.append((keydata, ach['keydata']))

            # Then go looking at the attachments
            attachments = email.get_message_tree(want=["attachments"]
                                                 )["attachments"]
            for part in attachments:
                if len(keys) > 100:  # Just to set some limit...
                    break
                if _might_be_pgp_key(part["filename"], part["mimetype"]):
                    key = part["part"].get_payload(None, True)
                    for keydata in get_keydata(key, include_subkeys=False):
                        keys.append((keydata, key))
            self.key_cache[messageid] = keys
        return keys
 def _get_message_keys(self, messageid):
     keys = self.key_cache.get(messageid, [])
     if not keys:
         email = Email(self._idx(), messageid)
         attachments = email.get_message_tree(
             want=["attachments"])["attachments"]
         for part in attachments:
             if _might_be_pgp_key(part["filename"], part["mimetype"]):
                 key = part["part"].get_payload(None, True)
                 for keydata in _get_keydata(key):
                     keys.append((keydata, key))
                 if len(keys) > 5:  # Just to set some limit...
                     break
         self.key_cache[messageid] = keys
     return keys
예제 #3
0
 def _get_message_keys(self, messageid):
     keys = self.key_cache.get(messageid, [])
     if not keys:
         email = Email(self._idx(), messageid)
         attachments = email.get_message_tree(want=["attachments"]
                                              )["attachments"]
         for part in attachments:
             if _might_be_pgp_key(part["filename"], part["mimetype"]):
                 key = part["part"].get_payload(None, True)
                 for keydata in _get_keydata(key):
                     keys.append((keydata, key))
                 if len(keys) > 5:  # Just to set some limit...
                     break
         self.key_cache[messageid] = keys
     return keys
예제 #4
0
    def _get_message_keys(self,
                          messageid,
                          autocrypt=True,
                          autocrypt_gossip=True,
                          attachments=True):
        keys = self.key_cache.get(messageid, [])
        if not keys:
            email = Email(self._idx(), messageid)

            # First we check the Autocrypt headers
            loop_count = 0
            msg = email.get_msg(pgpmime='all')
            ac_headers = []
            if autocrypt:
                ac_headers.append(extract_autocrypt_header(msg))
            if autocrypt_gossip:
                ac_headers.extend(extract_autocrypt_gossip_headers(msg))
            for ach in ac_headers:
                loop_count += 1
                if 'keydata' in ach:
                    for keyinfo in get_keyinfo(ach['keydata'],
                                               autocrypt_header=ach,
                                               key_info_class=MailpileKeyInfo):
                        keyinfo.is_autocrypt = True
                        keyinfo.is_gossip = (loop_count > 1)
                        keys.append((keyinfo, ach['keydata']))

            # Then go looking at the attachments
            atts = []
            if attachments:
                atts.extend(
                    email.get_message_tree(
                        want=["attachments"])["attachments"])
            for part in atts:
                if len(keys) > 100:  # Just to set some limit...
                    break
                if _might_be_pgp_key(part["filename"], part["mimetype"]):
                    key = part["part"].get_payload(None, True)
                    for keyinfo in get_keyinfo(key,
                                               key_info_class=MailpileKeyInfo):
                        keys.append((keyinfo, key))
            self.key_cache[messageid] = keys
        return keys