chore: merge branch release/perth_narrows into devel

This commit is contained in:
Jakub
2023-03-13 15:36:37 +01:00
4 changed files with 72 additions and 11 deletions

View File

@ -648,7 +648,7 @@ func (user *User) doEventPoll(ctx context.Context) error {
user.eventLock.Lock()
defer user.eventLock.Unlock()
event, _, err := user.client.GetEvent(ctx, user.vault.EventID())
event, more, err := user.client.GetEvent(ctx, user.vault.EventID())
if err != nil {
return fmt.Errorf("failed to get event (caused by %T): %w", internal.ErrCause(err), err)
}
@ -739,6 +739,10 @@ func (user *User) doEventPoll(ctx context.Context) error {
user.log.WithField("eventID", event.EventID).Debug("Updated event ID in vault")
if more {
user.goPollAPIEvents(false)
}
return nil
}

View File

@ -466,8 +466,10 @@ func getMessageHeader(msg proton.Message, opts JobOptions) message.Header {
if date, err := rfc5322.ParseDateTime(hdr.Get("Date")); err != nil || date.Before(time.Unix(0, 0)) {
msgDate := SanitizeMessageDate(msg.Time)
hdr.Set("Date", msgDate.In(time.UTC).Format(time.RFC1123Z))
// We clobbered the date so we save it under X-Original-Date.
hdr.Set("X-Original-Date", date.In(time.UTC).Format(time.RFC1123Z))
// We clobbered the date so we save it under X-Original-Date only if no such value exists.
if !hdr.Has("X-Original-Date") {
hdr.Set("X-Original-Date", date.In(time.UTC).Format(time.RFC1123Z))
}
}
}

View File

@ -38,6 +38,20 @@ func newTestMessage(
kr *crypto.KeyRing,
messageID, addressID, mimeType, body string, //nolint:unparam
date time.Time,
) proton.Message {
return newTestMessageWithHeaders(t, kr, messageID, addressID, mimeType, body, date, nil)
}
func newRawTestMessage(messageID, addressID, mimeType, body string, date time.Time) proton.Message { // nolint:unparam
return newRawTestMessageWithHeaders(messageID, addressID, mimeType, body, date, nil)
}
func newTestMessageWithHeaders(
t *testing.T,
kr *crypto.KeyRing,
messageID, addressID, mimeType, body string, //nolint:unparam
date time.Time,
headers map[string][]string,
) proton.Message {
enc, err := kr.Encrypt(crypto.NewPlainMessageFromString(body), kr)
require.NoError(t, err)
@ -45,22 +59,28 @@ func newTestMessage(
arm, err := enc.GetArmored()
require.NoError(t, err)
return newRawTestMessage(messageID, addressID, mimeType, arm, date)
return newRawTestMessageWithHeaders(messageID, addressID, mimeType, arm, date, headers)
}
func newRawTestMessage(messageID, addressID, mimeType, body string, date time.Time) proton.Message {
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)},
}
for k, v := range headers {
msgHeaders[k] = v
}
return proton.Message{
MessageMetadata: proton.MessageMetadata{
ID: messageID,
AddressID: addressID,
Time: date.Unix(),
},
ParsedHeaders: proton.Headers{
"Content-Type": {mimeType},
"Date": {date.In(time.UTC).Format(time.RFC1123Z)},
},
MIMEType: rfc822.MIMEType(mimeType),
Body: body,
ParsedHeaders: msgHeaders,
MIMEType: rfc822.MIMEType(mimeType),
Body: body,
}
}

View File

@ -836,6 +836,41 @@ func TestBuildMessageWithInvalidDate(t *testing.T) {
expectHeader(`X-Original-Date`, is(`Wed, 31 Dec 1969 23:59:59 +0000`))
}
func TestBuildMessageWithExistingOriginalDate(t *testing.T) {
m := gomock.NewController(t)
defer m.Finish()
kr := utils.MakeKeyRing(t)
// Create a new message with existing original date
msg := newTestMessageWithHeaders(t, kr,
"messageID",
"addressID",
"text/html",
"<html><body>body</body></html>",
time.Unix(-1, 0),
map[string][]string{
"X-Original-Date": {"Sun, 15 Jan 2023 04:23:03 +0100 (W. Europe Standard Time)"},
"Date": {"15-Jan-2023 04:23:13 +0100"},
})
// Build the message as usual; the date will be before 1970.
res, err := BuildRFC822(kr, msg, nil, JobOptions{})
require.NoError(t, err)
section(t, res).
expectDate(is(`15-Jan-2023 04:23:13 +0100`)).
expectHeader(`X-Original-Date`, is("Sun, 15 Jan 2023 04:23:03 +0100 (W. Europe Standard Time)"))
// Build the message with date sanitization enabled; the date will be RFC822's birthdate.
resFix, err := BuildRFC822(kr, msg, nil, JobOptions{SanitizeDate: true})
require.NoError(t, err)
section(t, resFix).
expectDate(is(`Fri, 13 Aug 1982 00:00:00 +0000`)).
expectHeader(`X-Original-Date`, is("Sun, 15 Jan 2023 04:23:03 +0100 (W. Europe Standard Time)"))
}
func TestBuildMessageInternalID(t *testing.T) {
m := gomock.NewController(t)
defer m.Finish()