From bf9d6374686277028062c9ab718d33828ce096f1 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Mon, 22 Nov 2021 17:05:49 +0100 Subject: [PATCH] Directly serve 404 if no favicon.ico file exists Closes #6 --- http.go | 5 +++++ staticFiles.go | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/http.go b/http.go index 8424bf7..f57df02 100644 --- a/http.go +++ b/http.go @@ -202,6 +202,11 @@ func (a *goBlog) buildRouter() (http.Handler, error) { // Robots.txt r.With(cacheLoggedIn, a.cacheMiddleware).Get(robotsTXTPath, a.serveRobotsTXT) + // Favicon + if !hasStaticPath("favicon.ico") { + r.With(cacheLoggedIn, a.cacheMiddleware).Get("/favicon.ico", a.serve404) + } + r.NotFound(a.servePostsAliasesRedirects()) r.MethodNotAllowed(a.serveNotAllowed) diff --git a/staticFiles.go b/staticFiles.go index fc0b703..7bdc969 100644 --- a/staticFiles.go +++ b/staticFiles.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "net/http" "os" @@ -27,6 +28,15 @@ func allStaticPaths() (paths []string) { return } +func hasStaticPath(path string) bool { + // Check if file exists + _, err := os.Stat(filepath.Join(staticFolder, path)) + if err != nil && errors.Is(err, os.ErrNotExist) { + return false + } + return true +} + // Gets only called by registered paths func (a *goBlog) serveStaticFile(w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", fmt.Sprintf("public,max-age=%d,s-max-age=%d,stale-while-revalidate=%d", a.cfg.Cache.Expiration, a.cfg.Cache.Expiration/3, a.cfg.Cache.Expiration))