From 33d7c17177854a6686fe0bad3eee2baf71862929 Mon Sep 17 00:00:00 2001 From: Sean Whalen Date: Tue, 16 Oct 2018 14:11:06 -0400 Subject: [PATCH] 4.3.4 --- CHANGELOG.md | 2 ++ parsedmarc/utils.py | 16 ++++++++++++++-- requirements.txt | 1 - setup.py | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6dc3e47..9eb9ce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,10 @@ ----- - Fix crash on empty aggregate report comments (brakhane - #25) +- Add SHA256 hashes of attachments to output - Add `strip_attachment_payloads` option to functions and `--strip-attachment-payloads` option to the CLI (#23) +- Remove `urllib3` from requirements to avoid conflict with `requests` 4.3.3 ----- diff --git a/parsedmarc/utils.py b/parsedmarc/utils.py index 8067ef0..2221e57 100644 --- a/parsedmarc/utils.py +++ b/parsedmarc/utils.py @@ -12,6 +12,8 @@ import subprocess import shutil import mailparser import json +import hashlib +import base64 import dateparser import dns.reversename @@ -450,10 +452,20 @@ def parse_email(data, strip_attachment_payloads=False): if "attachments" not in parsed_email: parsed_email["attachments"] = [] - elif strip_attachment_payloads: + else: for attachment in parsed_email["attachments"]: if "payload" in attachment: - del attachment["payload"] + payload = attachment["payload"] + if "content_transfer_encoding" in attachment: + if attachment["content_transfer_encoding"] == "base64": + payload = base64.b64decode(payload) + else: + payload = str.encode(payload) + attachment["sha256"] = hashlib.sha256(payload).hexdigest() + if strip_attachment_payloads: + for attachment in parsed_email["attachments"]: + if "payload" in attachment: + del attachment["payload"] if "subject" not in parsed_email: parsed_email["subject"] = None diff --git a/requirements.txt b/requirements.txt index c02b980..589b4bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ dnspython -urllib3 requests publicsuffix xmltodict diff --git a/setup.py b/setup.py index 253e362..765f24c 100644 --- a/setup.py +++ b/setup.py @@ -93,7 +93,7 @@ setup( # requirements files see: # https://packaging.python.org/en/latest/requirements.html install_requires=['dnspython', 'publicsuffix', 'xmltodict', 'geoip2', - 'urllib3', 'requests', 'imapclient', + 'requests', 'imapclient', 'mail-parser', 'dateparser', 'elasticsearch>=6.3.0,<7.0.0', 'elasticsearch-dsl>=6.2.1,<7.0.0', 'kafka-python'