diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index bc3eac11..cfc5f0bd 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -25,11 +25,7 @@ RUN make ci clean FROM python:${PYTHON_VERSION}-slim AS runtime -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates=20161130+nmu1+deb9u1 \ - && rm -rf /var/lib/apt/lists/* \ - && groupadd -r opwen \ +RUN groupadd -r opwen \ && useradd -r -s /bin/false -g opwen opwen COPY --from=builder /deps /deps diff --git a/opwen_email_server/actions.py b/opwen_email_server/actions.py index bbd66543..1cc54b7b 100644 --- a/opwen_email_server/actions.py +++ b/opwen_email_server/actions.py @@ -24,8 +24,8 @@ from opwen_email_server.utils.serialization import from_base64 from opwen_email_server.utils.serialization import from_jsonl_bytes from opwen_email_server.utils.serialization import to_base64 -from opwen_email_server.utils.serialization import to_json from opwen_email_server.utils.serialization import to_jsonl_bytes +from opwen_email_server.utils.serialization import to_msgpack_bytes from opwen_email_server.utils.string import is_lowercase Response = Union[dict, Tuple[str, int]] @@ -114,7 +114,7 @@ def _parse_mime_email(self, mime_email: str) -> dict: @classmethod def _to_id(cls, email: dict) -> str: - return sha256(to_json(email).encode('utf-8')).hexdigest() + return sha256(to_msgpack_bytes(email)).hexdigest() class StoreWrittenClientEmails(_Action): diff --git a/opwen_email_server/services/sendgrid.py b/opwen_email_server/services/sendgrid.py index d1d7c6db..aa105397 100644 --- a/opwen_email_server/services/sendgrid.py +++ b/opwen_email_server/services/sendgrid.py @@ -96,14 +96,13 @@ def _create_attachment(cls, attachment: dict) -> Attachment: filename = attachment.get('filename', '') content = attachment.get('content', b'') - mail_attachment = Attachment() - mail_attachment.disposition = 'attachment' - mail_attachment.filename = filename - mail_attachment.content_id = filename - mail_attachment.type = guess_type(filename)[0] - mail_attachment.content = to_base64(content) - - return mail_attachment + return Attachment( + disposition='attachment', + file_name=filename, + content_id=filename, + file_type=guess_type(filename)[0], + file_content=to_base64(content), + ) class SetupSendgridMailbox(LogMixin): diff --git a/tests/files/end_to_end/client-emails.tar.gz b/tests/files/end_to_end/client-emails.tar.gz index 857e80d6..c496589a 100644 Binary files a/tests/files/end_to_end/client-emails.tar.gz and b/tests/files/end_to_end/client-emails.tar.gz differ diff --git a/tests/files/end_to_end/inbound-email.mime b/tests/files/end_to_end/inbound-email.mime index 906291dc..a87969d8 100644 --- a/tests/files/end_to_end/inbound-email.mime +++ b/tests/files/end_to_end/inbound-email.mime @@ -1,27 +1,243 @@ -Received: by mx0028p1mdw1.sendgrid.net with SMTP id Yt3NEnbnLU Mon, 13 Feb 2017 06:25:41 +0000 (UTC) -Received: from mail-yw0-f176.google.com (mail-yw0-f176.google.com [209.85.161.176]) by mx0028p1mdw1.sendgrid.net (Postfix) with ESMTPS id C726D640B63; Mon, 13 Feb 2017 06:25:41 +0000 (UTC) -Received: by mail-yw0-f176.google.com with SMTP id w75so45612320ywg.1; Sun, 12 Feb 2017 22:25:41 -0800 (PST) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=ViHLGS6kOdo9Q9CkDDSSSS3bgKuN0a+UXhwMw06ak4Q=; b=f3WGzjgLe0tPG2edhiHxiCEZatThUga/qJFnWZNyY4lEVjRM9l3qn1BZ4ITawT9tDK LS6qFx//6in7u0rV0YKoa8TfScUFOpPHGCmq1Wxdp7mrWP7GDuCOz3LzyXQsrBe/erGy YEjAVU876sWJ109mcMcmbgOL1SD3d4ak+8GVBSC8oMKPj5XWZsET7WmsonhKf5PHE9IW eJHKqdOkxiPbmDutVx7uS1Bi5u4d9UYPhgxFwAK9lWyJ/Esw6yffjlrUvmQCPibSCxRv o979yY6FyJXDJ82l4ErntcOloFNpzWZ89WkRhb1aBLUoZs3402s6D3wC0ljpmvneIAkw 3D6A== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ViHLGS6kOdo9Q9CkDDSSSS3bgKuN0a+UXhwMw06ak4Q=; b=sWY7uU6kK3dg62wVuxcLsRYLg3eGcoLuoLjL0Ju/sl9rGqSDxVc2saIS0ThfUaHlfZ g1zvF+rBoxa7v9jk7MhEw3izW01WXDMm0w2JGc1QLTo3ZM2xW9Clss63R3ZtNKabuyhd 77NHAgbarmQGW5XuqwS1Fy0NMWHkAlLsZd2AnkNb6gCI/VHCCv/oem19bWvNWwRTPBYE cQDPJfzRiUzRPNZPLtlL5ybd2yyb4lcuG+2QoQV8uxPsKS4eDOjNmM76UWZ9s/Ul/mR+ Qbyui7suOO0vPy8GFJHPV9X2ffLqesafTAetCj3LClCdLIdfQDaK86mmVHOT6zldeCTa HH6Q== -X-Gm-Message-State: AMke39n2h/OZU6fwgOdDltzsKqISVbe3ez6t19OeVrg2sT3pDRhSSQiIcwGzKjdWOD/oX96rQlTi0O9t9yhUfA== -X-Received: by 10.129.81.4 with SMTP id f4mr15409224ywb.239.1486967141412; Sun, 12 Feb 2017 22:25:41 -0800 (PST) +Received: by mx0032p1mdw1.sendgrid.net with SMTP id j5s6OrIxAo Mon, 13 Feb 2017 06:26:01 +0000 (UTC) +Received: from mail-yw0-f176.google.com (mail-yw0-f176.google.com [209.85.161.176]) by mx0032p1mdw1.sendgrid.net (Postfix) with ESMTPS id ED0E6865CD for ; Mon, 13 Feb 2017 06:26:00 +0000 (UTC) +Received: by mail-yw0-f176.google.com with SMTP id v200so45517752ywc.3 for ; Sun, 12 Feb 2017 22:26:00 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=BzB59eE6aqgBqNykdZ9LSb3ZuGuXFfDT9pvFSFek5s0=; b=FMASsyJpei2ae3965M1t46+/teaQXdqdsXOPd6viine1X10sEbhuGjX3LGTq3WnMUy f+xydQsjhTTSb15LuJivlsSyLN3dPKyqON4dnfQ6t4mPY3ol0Bnl2GvQico3U4whd6QG KuQtoJqijO4O8TBTWxQqoEjVapAZhr9qK0ZfhCuDCtZ5xfEtdphYkEq+pT52ykIn/Hy/ 6zjWfHKLB9fwiyKtc7Dv2GnPUt2vW/YJs8lsA/hrCISwq2Oy9dCyEX4+IZ/xABL+KLox nEsk4/wMLmHHvv3X1sODcIshGPuX0mloj2YkugRZHnwrTm7FEAjTAhRElwNGPSedSqqW l2Cw== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=BzB59eE6aqgBqNykdZ9LSb3ZuGuXFfDT9pvFSFek5s0=; b=n+2qfxqxwNZyVk1+Rd4wS19yZrA7bE2U+AoQ7Jl3d7lAl1V7VV71/jBJFkXEIy6r2Q tqsInRPhv5aQ02W70y9gWB7Bib6Cf353jTHznF4qgjZoUohY8ygNyNrwvjnj2l7T2S+g xn0sCgyYsHbjyLOLF1PoBEUbmNGKcJWf2WIUxQ3wlSZ7tV/nuVj5n/QicAL9yk5e2YsH 5CNYDCFpTFS86SULGAfgeGpTswv0fjKPVipLJFJaw7WziV+v7t4F/jBngqSV0Sy4kyPn UlNn+T7uPlp8A9XgH1tiE7DMt99l2M7qWH0FMI45pZGoVpssmHQw1cuLqJf2F2So/Dhs dhhA== +X-Gm-Message-State: AMke39nSCiOqrDKq7uOX7CaQVazGrDl5fI6cBqEyIbOhxDeR85q1Sl9Ae6//kVayvLfguqV5ErlYVxvjE8p9vw== +X-Received: by 10.129.132.77 with SMTP id u74mr15464915ywf.125.1486967160539; Sun, 12 Feb 2017 22:26:00 -0800 (PST) MIME-Version: 1.0 -Received: by 10.129.156.139 with HTTP; Sun, 12 Feb 2017 22:25:01 -0800 (PST) +Received: by 10.129.156.139 with HTTP; Sun, 12 Feb 2017 22:25:20 -0800 (PST) From: Clemens Wolff -Date: Sun, 12 Feb 2017 22:25:01 -0800 -Message-ID: -Subject: Test email sent to Lokole client +Date: Sun, 12 Feb 2017 22:25:20 -0800 +Message-ID: +Subject: With attachment To: clemens@developer1.lokole.ca, laura@developer1.lokole.ca, nzola@developer2.lokole.ca -Content-Type: multipart/alternative; boundary=001a1146392641b94705486384bf +Content-Type: multipart/mixed; boundary=001a114f099665b49a0548638593 ---001a1146392641b94705486384bf +--001a114f099665b49a0548638593 +Content-Type: multipart/alternative; boundary=001a114f099665b4940548638591 + +--001a114f099665b4940548638591 Content-Type: text/plain; charset=UTF-8 -Body of the message. +And a body ---001a1146392641b94705486384bf +--001a114f099665b4940548638591 Content-Type: text/html; charset=UTF-8 -
Body of the message.
+
And a body
+ +--001a114f099665b4940548638591-- + +--001a114f099665b49a0548638593 +Content-Type: image/png; name="cute-mouse-clipart-mouse4.png" +Content-Disposition: attachment; filename="cute-mouse-clipart-mouse4.png" +Content-Transfer-Encoding: base64 +X-Attachment-Id: f_iz3ptt6p0 + +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 +wHUAAAAASUVORK5CYII= ---001a1146392641b94705486384bf-- +--001a114f099665b49a0548638593-- diff --git a/tests/opwen_email_server/test_actions.py b/tests/opwen_email_server/test_actions.py index 74493438..38880571 100644 --- a/tests/opwen_email_server/test_actions.py +++ b/tests/opwen_email_server/test_actions.py @@ -111,7 +111,7 @@ def test_200(self): domain = 'test.com' raw_email = 'dummy-mime' parsed_email = {'to': ['foo@{}'.format(domain)]} - email_id = 'eaee7d51a5440981d5df66825134dcfe0490f145e1ad689bce8c68caeaecde53' + email_id = 'c1763288b50107e4e4df4f2d7144f1085729ed112500995ab8103dd532276c18' stored_email = dict(parsed_email) stored_email['_uid'] = email_id