diff --git a/COPYING_NOTES.md b/COPYING_NOTES.md index 22519642..3659d2e3 100644 --- a/COPYING_NOTES.md +++ b/COPYING_NOTES.md @@ -50,6 +50,7 @@ Proton Mail Bridge includes the following 3rd party software: * [uuid](https://github.com/google/uuid) available under [license](https://github.com/google/uuid/blob/master/LICENSE) * [go-multierror](https://github.com/hashicorp/go-multierror) available under [license](https://github.com/hashicorp/go-multierror/blob/master/LICENSE) * [html2text](https://github.com/jaytaylor/html2text) available under [license](https://github.com/jaytaylor/html2text/blob/master/LICENSE) +* [go-locale](https://github.com/jeandeaual/go-locale) available under [license](https://github.com/jeandeaual/go-locale/blob/master/LICENSE) * [go-keychain](https://github.com/keybase/go-keychain) available under [license](https://github.com/keybase/go-keychain/blob/master/LICENSE) * [dns](https://github.com/miekg/dns) available under [license](https://github.com/miekg/dns/blob/master/LICENSE) * [memory](https://github.com/pbnjay/memory) available under [license](https://github.com/pbnjay/memory/blob/master/LICENSE) @@ -100,7 +101,6 @@ Proton Mail Bridge includes the following 3rd party software: * [go-immutable-radix](https://github.com/hashicorp/go-immutable-radix) available under [license](https://github.com/hashicorp/go-immutable-radix/blob/master/LICENSE) * [go-memdb](https://github.com/hashicorp/go-memdb) available under [license](https://github.com/hashicorp/go-memdb/blob/master/LICENSE) * [golang-lru](https://github.com/hashicorp/golang-lru) available under [license](https://github.com/hashicorp/golang-lru/blob/master/LICENSE) -* [go-locale](https://github.com/jeandeaual/go-locale) available under [license](https://github.com/jeandeaual/go-locale/blob/master/LICENSE) * [multierror](https://github.com/joeshaw/multierror) available under [license](https://github.com/joeshaw/multierror/blob/master/LICENSE) * [go](https://github.com/json-iterator/go) available under [license](https://github.com/json-iterator/go/blob/master/LICENSE) * [cpuid](https://github.com/klauspost/cpuid/v2) available under [license](https://github.com/klauspost/cpuid/v2/blob/master/LICENSE) diff --git a/go.mod b/go.mod index 99a77d7f..1cdea0d6 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.0 github.com/ProtonMail/gluon v0.17.1-0.20231114153341-2ecbdd2739f7 github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a - github.com/ProtonMail/go-proton-api v0.4.1-0.20231127095314-a4cffbe6abdf + github.com/ProtonMail/go-proton-api v0.4.1-0.20231128132832-88e7263a8dc2 github.com/ProtonMail/gopenpgp/v2 v2.7.4-proton github.com/PuerkitoBio/goquery v1.8.1 github.com/abiosoft/ishell v2.0.0+incompatible @@ -32,6 +32,7 @@ require ( github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba + github.com/jeandeaual/go-locale v0.0.0-20220711133428-7de61946b173 github.com/keybase/go-keychain v0.0.0 github.com/miekg/dns v1.1.50 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 @@ -85,7 +86,6 @@ require ( github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-memdb v1.3.3 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/jeandeaual/go-locale v0.0.0-20220711133428-7de61946b173 // indirect github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect diff --git a/go.sum b/go.sum index 2b90722e..8918c42a 100644 --- a/go.sum +++ b/go.sum @@ -38,8 +38,8 @@ github.com/ProtonMail/go-message v0.13.1-0.20230526094639-b62c999c85b7 h1:+j+Kd/ github.com/ProtonMail/go-message v0.13.1-0.20230526094639-b62c999c85b7/go.mod h1:NBAn21zgCJ/52WLDyed18YvYFm5tEoeDauubFqLokM4= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= -github.com/ProtonMail/go-proton-api v0.4.1-0.20231127095314-a4cffbe6abdf h1:6VpjNMUerT5MqBj7zbEg3Ysx8woygv5Ij1BEpAW2wZU= -github.com/ProtonMail/go-proton-api v0.4.1-0.20231127095314-a4cffbe6abdf/go.mod h1:WEXJqj5DSc2YI77SgXdpMY0nk33Qy92Vu2r4tOEazA8= +github.com/ProtonMail/go-proton-api v0.4.1-0.20231128132832-88e7263a8dc2 h1:t+lRGKt/Z1x/sPvLxdvHy1Yli/OxmVb49lw6wjc9Krc= +github.com/ProtonMail/go-proton-api v0.4.1-0.20231128132832-88e7263a8dc2/go.mod h1:WEXJqj5DSc2YI77SgXdpMY0nk33Qy92Vu2r4tOEazA8= github.com/ProtonMail/go-smtp v0.0.0-20231109081432-2b3d50599865 h1:EP1gnxLL5Z7xBSymE9nSTM27nRYINuvssAtDmG0suD8= github.com/ProtonMail/go-smtp v0.0.0-20231109081432-2b3d50599865/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/ProtonMail/go-srp v0.0.7 h1:Sos3Qk+th4tQR64vsxGIxYpN3rdnG9Wf9K4ZloC1JrI= diff --git a/tests/features/imap/message/import.feature b/tests/features/imap/message/import.feature index 82b8e463..c1f359ba 100644 --- a/tests/features/imap/message/import.feature +++ b/tests/features/imap/message/import.feature @@ -458,3 +458,91 @@ Feature: IMAP import messages } } """ + + + Scenario: Import message with inline image + When IMAP client "1" appends the following message to "Inbox": + """ + Date: 01 Jan 1980 00:00:00 +0000 + From: Bridge Second Test + To: Bridge Test + Subject: Html Inline Importing + Content-Disposition: inline + User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 + MIME-Version: 1.0 + Content-Language: en-US + Content-Type: multipart/related; boundary="61FA22A41A3F46E8E90EF528" + + This is a multi-part message in MIME format. + --61FA22A41A3F46E8E90EF528 + Content-Type: text/html; charset=utf-8 + Content-Transfer-Encoding: 7bit + + + + + + +


+

+

Behold! An inline
+

+ + + + --61FA22A41A3F46E8E90EF528 + Content-Type: image/gif; name="email-action-left.gif" + Content-Transfer-Encoding: base64 + Content-ID: + Content-Disposition: inline; filename="email-action-left.gif" + + R0lGODlhGAAYANUAACcsKOHs4kppTH6tgYWxiIq0jTVENpG5lDI/M7bRuEaJSkqOTk2RUU+P + U16lYl+lY2iva262cXS6d3rDfYLNhWeeamKTZGSVZkNbRGqhbOPt4////+7u7qioqFZWVlNT + UyIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAGAAYAAAG + /8CNcLjRJAqVRqNSSGiI0GFgoKhar4NAdHioMhyRCYUyiTgY1cOWUH1ILgIDAGAQXCSPKgHa + XUAyGCCCg4IYGRALCmpCAVUQFgiEkiAIFhBVWhtUDxmRk5IIGXkDRQoMEoGfHpIYEmhGCg4X + nyAdHB+SFw4KRwoRArQdG7eEAhEKSAoTBoIdzs/Cw7iCBhMKSQoUAIJbQ8QgABQKStnbIN1C + 3+HjFcrMtdDO6dMg1dcFvsCfwt+CxsgJYs3a10+QLl4aTKGitYpQq1eaFHDyREtQqFGMHEGq + SMkSJi4K/ACiZQiRIihsJL6JM6fOnTwK9kTpYgqMGDJm0JzsNuWKTw0FWdANMYJECRMnW4IA + ADs= + + --61FA22A41A3F46E8E90EF528-- + + """ + Then it succeeds + And IMAP client "1" eventually sees the following message in "Inbox" with this structure: + """ + { + "date": "01 Jan 80 00:00 +0000", + "to": "Bridge Test ", + "from": "Bridge Second Test ", + "subject": "Html Inline Importing", + "content": { + "content-type": "multipart/mixed", + "sections":[ + { + "content-type": "multipart/related", + "sections":[ + { + "content-type": "text/html", + "content-type-charset": "utf-8", + "transfer-encoding": "quoted-printable", + "body-is": "\r\n\r\n\r\n\r\n\r\n


\r\n

\r\n

Behold! An inline 3D\"\"\r\nwidth=3D\"24\"
\r\n

\r\n\r\n" + }, + { + "content-type": "image/gif", + "content-type-name": "email-action-left.gif", + "content-disposition": "inline", + "content-disposition-filename": "email-action-left.gif", + "transfer-encoding": "base64", + "body-is": "R0lGODlhGAAYANUAACcsKOHs4kppTH6tgYWxiIq0jTVENpG5lDI/M7bRuEaJSkqOTk2RUU+PU16l\r\nYl+lY2iva262cXS6d3rDfYLNhWeeamKTZGSVZkNbRGqhbOPt4////+7u7qioqFZWVlNTUyIiIgAA\r\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAGAAYAAAG/8CNcLjRJAqVRqNS\r\nSGiI0GFgoKhar4NAdHioMhyRCYUyiTgY1cOWUH1ILgIDAGAQXCSPKgHaXUAyGCCCg4IYGRALCmpC\r\nAVUQFgiEkiAIFhBVWhtUDxmRk5IIGXkDRQoMEoGfHpIYEmhGCg4XnyAdHB+SFw4KRwoRArQdG7eE\r\nAhEKSAoTBoIdzs/Cw7iCBhMKSQoUAIJbQ8QgABQKStnbIN1C3+HjFcrMtdDO6dMg1dcFvsCfwt+C\r\nxsgJYs3a10+QLl4aTKGitYpQq1eaFHDyREtQqFGMHEGqSMkSJi4K/ACiZQiRIihsJL6JM6fOnTwK\r\n9kTpYgqMGDJm0JzsNuWKTw0FWdANMYJECRMnW4IAADs=" + } + ] + } + ] + } + } + """