mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 04:36:43 +00:00
fix(GODT-2212): Preserver Header order in message building
https://github.com/ProtonMail/go-proton-api/pull/100
This commit is contained in:
@ -503,8 +503,8 @@ func getAttachmentPartHeader(att proton.Attachment) message.Header {
|
||||
func toMessageHeader(hdr proton.Headers) message.Header {
|
||||
var res message.Header
|
||||
|
||||
for key, val := range hdr {
|
||||
for _, val := range val {
|
||||
for _, key := range hdr.Order {
|
||||
for _, val := range hdr.Values[key] {
|
||||
// Using AddRaw instead of Add to save key-value pair as byte buffer within Header.
|
||||
// This buffer is used latter on in message writer to construct message and avoid crash
|
||||
// when key length is more than 76 characters long.
|
||||
|
||||
@ -64,12 +64,20 @@ func newTestMessageWithHeaders(
|
||||
|
||||
func newRawTestMessageWithHeaders(messageID, addressID, mimeType, body string, date time.Time, headers map[string][]string) proton.Message {
|
||||
msgHeaders := proton.Headers{
|
||||
"Content-Type": {mimeType},
|
||||
"Date": {date.In(time.UTC).Format(time.RFC1123Z)},
|
||||
Values: map[string][]string{
|
||||
"Content-Type": {mimeType},
|
||||
"Date": {date.In(time.UTC).Format(time.RFC1123Z)},
|
||||
},
|
||||
Order: []string{"Content-Type", "Date"},
|
||||
}
|
||||
|
||||
for k, v := range headers {
|
||||
msgHeaders[k] = v
|
||||
_, ok := msgHeaders.Values[k]
|
||||
if !ok {
|
||||
msgHeaders.Order = append(msgHeaders.Order, k)
|
||||
}
|
||||
|
||||
msgHeaders.Values[k] = v
|
||||
}
|
||||
|
||||
return proton.Message{
|
||||
@ -98,9 +106,12 @@ func addTestAttachment(
|
||||
Name: name,
|
||||
MIMEType: rfc822.MIMEType(mimeType),
|
||||
Headers: proton.Headers{
|
||||
"Content-Type": {mimeType},
|
||||
"Content-Disposition": {disposition},
|
||||
"Content-Transfer-Encoding": {"base64"},
|
||||
Values: map[string][]string{
|
||||
"Content-Type": {mimeType},
|
||||
"Content-Disposition": {disposition},
|
||||
"Content-Transfer-Encoding": {"base64"},
|
||||
},
|
||||
Order: []string{"Content-Type", "Content-Disposition", "Content-Transfer-Encoding"},
|
||||
},
|
||||
Disposition: proton.Disposition(disposition),
|
||||
KeyPackets: base64.StdEncoding.EncodeToString(enc.GetBinaryKeyPacket()),
|
||||
|
||||
@ -54,7 +54,8 @@ func TestBuildPlainMessageWithLongKey(t *testing.T) {
|
||||
|
||||
kr := utils.MakeKeyRing(t)
|
||||
msg := newTestMessage(t, kr, "messageID", "addressID", "text/plain", "body", time.Now())
|
||||
msg.ParsedHeaders["ReallyVeryVeryVeryVeryVeryLongLongLongLongLongLongLongKeyThatWillHaveNotSoLongValue"] = []string{"value"}
|
||||
msg.ParsedHeaders.Values["ReallyVeryVeryVeryVeryVeryLongLongLongLongLongLongLongKeyThatWillHaveNotSoLongValue"] = []string{"value"}
|
||||
msg.ParsedHeaders.Order = append(msg.ParsedHeaders.Order, "ReallyVeryVeryVeryVeryVeryLongLongLongLongLongLongLongKeyThatWillHaveNotSoLongValue")
|
||||
|
||||
res, err := DecryptAndBuildRFC822(kr, msg, nil, JobOptions{})
|
||||
require.NoError(t, err)
|
||||
@ -977,7 +978,8 @@ func TestBuildIncludeMessageIDReference(t *testing.T) {
|
||||
msg := newTestMessage(t, kr, "messageID", "addressID", "text/plain", "body", time.Now())
|
||||
|
||||
// Add references.
|
||||
msg.ParsedHeaders["References"] = []string{"<myreference@domain.com>"}
|
||||
msg.ParsedHeaders.Values["References"] = []string{"<myreference@domain.com>"}
|
||||
msg.ParsedHeaders.Order = append(msg.ParsedHeaders.Order, "References")
|
||||
|
||||
res, err := DecryptAndBuildRFC822(kr, msg, nil, JobOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user