dmarc-day, health-sockets: the reporter's day said; the inbound journal dialled
The owner, 2026-10-17: "Показ времени отчёта по UTC принимаем. Это не проблема. Пояснения добавь. Все мелочи закрой." Designs9b33b80,2bf9056. DMARC: a report's day stays the reporter's, in UTC (RFC 7489 § 7.2); the report's Window now says so under its times (windowNote), and Settings' Time zone box and Help (#settings, #dmarc) name it as the one exception to the panel's zone. formatDMARCWindow counts a window that ends at midnight as ending the day before, so a daily report is one day, not "20 Sep - 21 Sep" (TestDMARCWindowIsTheReportersDay, in Moscow's zone). Health: with the inbound relay on, the inbound journal milter's socket is dialled (InboundJournalSocket through web and handlers Config), fail-open as the send log's, and Overview's card counts it; the send log's socket is named journal-milter, as the mockup names it. The confirmation link's sign-in state is drawn (confirm-email-signin.html); the panel already renders it. guide: /license and /server/components, the DMARC pages' paths and day, selfpost-backup -o / -i / -version, the Inbound log's retention field, PANEL_COOKIE_SECURE, the inbound journal's socket, the DMARC exception to the zone. CHANGELOG [Unreleased]. (The e2e case negative_level1_ratelimit, listed as able to pass falsely, was fixed on 2026-10-14 - the note was stale.) go vet + go test (26 packages) and make e2e on the test server for this tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -222,12 +222,21 @@ func (h *Handlers) relayIPs() map[string]bool {
|
||||
return ips
|
||||
}
|
||||
|
||||
// formatDMARCWindow is the day, or days, a report covers, as its reporter
|
||||
// counts them: in UTC (RFC 7489 § 7.2, date-range in UTC seconds), which the
|
||||
// panel keeps whatever its own zone (owner, 2026-10-17). A window that ends
|
||||
// at midnight ends the day before: a daily report from 00:00 to 00:00 is one
|
||||
// day, not two.
|
||||
func formatDMARCWindow(begin, end time.Time) string {
|
||||
if begin.IsZero() {
|
||||
return ""
|
||||
}
|
||||
if begin.Year() == end.Year() && begin.YearDay() == end.YearDay() {
|
||||
return begin.UTC().Format("2 Jan")
|
||||
begin, last := begin.UTC(), end.UTC()
|
||||
if last.After(begin) && last.Equal(last.Truncate(24*time.Hour)) {
|
||||
last = last.Add(-time.Second)
|
||||
}
|
||||
return begin.UTC().Format("2 Jan") + " – " + end.UTC().Format("2 Jan")
|
||||
if begin.Year() == last.Year() && begin.YearDay() == last.YearDay() {
|
||||
return begin.Format("2 Jan")
|
||||
}
|
||||
return begin.Format("2 Jan") + " – " + last.Format("2 Jan")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user