From 30a913c05c3d704bd71a9658f13f3e493542f2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20de=20Le=C3=B3n?= Date: Mon, 28 Aug 2023 23:20:04 -0600 Subject: [PATCH] Ignore Cloudflare Priority header With these changes, If the web request contains the new Priority header (RFC 9218), The server will ignore it and continue searching for other headers or query parameters. --- server/util.go | 23 +++++++++++++++++++++-- util/util.go | 5 ----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/server/util.go b/server/util.go index 03eb8661..ee87f2ed 100644 --- a/server/util.go +++ b/server/util.go @@ -9,6 +9,7 @@ import ( "net/http" "net/netip" "strings" + /*"regexp"*/ ) var mimeDecoder mime.WordDecoder @@ -129,7 +130,25 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) { func maybeDecodeHeader(header string) string { decoded, err := mimeDecoder.DecodeHeader(header) if err != nil { - return header + return cloudflarePriorityIgnore(header) } - return decoded + return cloudflarePriorityIgnore(decoded) +} + +// Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority) +// Cloudflare adds this to requests when forwarding to the backend (ntfy), so we just ignore it. +// If the Priority header is set to "u=*, i" or "u=*" (by cloudflare), the header will be ignored. +// And continue searching for another header (x-priority, prio, p) or in the Query parameters. +func cloudflarePriorityIgnore(value string) string { + if strings.HasPrefix(value, "u=") { + return "" + } + + // The same but with regex + /* pattern := `^u=\d+\s*,\s*i|u=\d+$` + regex := regexp.MustCompile(pattern) + if regex.MatchString(value) { + return "" + } */ + return value } diff --git a/util/util.go b/util/util.go index 4a63e22f..d48487df 100644 --- a/util/util.go +++ b/util/util.go @@ -161,11 +161,6 @@ func ParsePriority(priority string) (int, error) { case "5", "max", "urgent": return 5, nil default: - // Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority) - // Cloudflare adds this to requests when forwarding to the backend (ntfy), so we just ignore it. - if strings.HasPrefix(p, "u=") { - return 3, nil - } return 0, errInvalidPriority } }