From fe5ad1af2765ffdbc8131953079bce473b3a7ecb Mon Sep 17 00:00:00 2001 From: Gareth George Date: Mon, 5 May 2025 00:35:33 -0700 Subject: [PATCH] fix: handle Accept-Encoding properly for compressed webui srcs --- webui/webui.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/webui/webui.go b/webui/webui.go index 3e92dcbd..78dbe187 100644 --- a/webui/webui.go +++ b/webui/webui.go @@ -2,10 +2,10 @@ package webui import ( "bytes" + "compress/gzip" "crypto/md5" "encoding/hex" "io" - "io/fs" "net/http" "strings" "sync" @@ -38,8 +38,20 @@ func Handler() http.Handler { f, err := content.Open(contentPrefix + r.URL.Path + ".gz") if err == nil { defer f.Close() - w.Header().Set("Content-Encoding", "gzip") - serveFile(f, w, r, r.URL.Path) + // Check if gzip encoding is supported + var fr io.Reader = f + if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { + gzr, err := gzip.NewReader(f) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer gzr.Close() + fr = gzr + } else { + w.Header().Set("Content-Encoding", "gzip") + } + serveFile(fr, w, r, r.URL.Path) return } @@ -54,7 +66,7 @@ func Handler() http.Handler { }) } -func serveFile(f fs.File, w http.ResponseWriter, r *http.Request, path string) { +func serveFile(f io.Reader, w http.ResponseWriter, r *http.Request, path string) { data, err := io.ReadAll(f) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError)