clone orig message in prepare_pgp_message

This commit is contained in:
Son NK 2020-11-01 18:06:05 +01:00
parent 7ca74eaa6f
commit 53e57eee42
1 changed files with 13 additions and 11 deletions

View File

@ -396,15 +396,18 @@ _MIME_HEADERS = [h.lower() for h in _MIME_HEADERS]
def prepare_pgp_message(orig_msg: Message, pgp_fingerprint: str, public_key: str):
msg = MIMEMultipart("encrypted", protocol="application/pgp-encrypted")
# copy all headers from original message except all standard MIME headers
for i in reversed(range(len(orig_msg._headers))):
header_name = orig_msg._headers[i][0].lower()
if header_name.lower() not in _MIME_HEADERS:
msg[header_name] = orig_msg._headers[i][1]
# clone orig message to avoid modifying it
clone_msg = copy(orig_msg)
# Delete unnecessary headers in orig_msg except to save space
# copy all headers from original message except all standard MIME headers
for i in reversed(range(len(clone_msg._headers))):
header_name = clone_msg._headers[i][0].lower()
if header_name.lower() not in _MIME_HEADERS:
msg[header_name] = clone_msg._headers[i][1]
# Delete unnecessary headers in orig_msg except _MIME_HEADERS to save space
delete_all_headers_except(
orig_msg,
clone_msg,
_MIME_HEADERS,
)
@ -421,14 +424,13 @@ def prepare_pgp_message(orig_msg: Message, pgp_fingerprint: str, public_key: str
# encrypt original message
# use pgpy as fallback
msg_bytes = clone_msg.as_bytes()
try:
encrypted_data = pgp_utils.encrypt_file(
BytesIO(orig_msg.as_bytes()), pgp_fingerprint
)
encrypted_data = pgp_utils.encrypt_file(BytesIO(msg_bytes), pgp_fingerprint)
second.set_payload(encrypted_data)
except PGPException:
LOG.exception("Cannot encrypt using python-gnupg, use pgpy")
encrypted = pgp_utils.encrypt_file_with_pgpy(orig_msg.as_bytes(), public_key)
encrypted = pgp_utils.encrypt_file_with_pgpy(msg_bytes, public_key)
second.set_payload(str(encrypted))
msg.attach(second)