diff --git a/internal/pages/pages.go b/internal/pages/pages.go index f203a48..464d361 100644 --- a/internal/pages/pages.go +++ b/internal/pages/pages.go @@ -3,6 +3,7 @@ package pages import ( "mime" "net/http" + "strconv" "strings" "time" @@ -27,10 +28,17 @@ func makePageContentCacheEntry(username, path string) string { return username + ":" + path } -func addHeaders(csp, contentType string, w http.ResponseWriter) { - w.Header().Set("Content-Type", contentType) +func addHeaders(csp, contentType string, contentLength int, w http.ResponseWriter) { + // Always set a content type + if strings.Trim(contentType, " ") == "" { + w.Header().Set("Content-Type", "application/octet-stream") + } else { + w.Header().Set("Content-Type", contentType) + } + w.Header().Set("X-Content-Type-Options", "nosniff") w.Header().Set("Strict-Transport-Security", "max-age=31536000") + w.Header().Set("Content-Length", strconv.Itoa(contentLength)) if csp != "" { w.Header().Set("Content-Security-Policy", csp) @@ -69,11 +77,11 @@ func ServeFile(username, reponame, path, defaultCsp string, giteaClient *repo.Gi if err != nil { if !found { log.Errorf("Failed to get file %s/%s/%s (%s)", username, reponame, path, err) - addHeaders(csp, "text/html", w) + addHeaders(csp, "text/html", 0, w) w.WriteHeader(404) } else { log.Debugf("Request failed but page %s is cached in memory", path) - addHeaders(csp, mimeType, w) + addHeaders(csp, mimeType, len(content), w) w.WriteHeader(200) w.Write(content) } @@ -83,7 +91,7 @@ func ServeFile(username, reponame, path, defaultCsp string, giteaClient *repo.Gi if found && !changed { log.Debugf("Page %s is unchanged and cached in memory", path) - addHeaders(csp, mimeType, w) + addHeaders(csp, mimeType, len(content), w) w.WriteHeader(200) w.Write(content) return @@ -105,7 +113,7 @@ func ServeFile(username, reponame, path, defaultCsp string, giteaClient *repo.Gi ) log.Debugf("Page %s requested from Gitea and cached in memory at %v", path, now) - addHeaders(csp, mimeType, w) + addHeaders(csp, mimeType, len(content), w) w.WriteHeader(200) w.Write(content) }