From 40a32fa535a1bc65cc93f1df51582a4732b464c9 Mon Sep 17 00:00:00 2001 From: Daan Sprenkels Date: Sun, 15 Dec 2019 11:43:49 +0530 Subject: [PATCH] Respond to HEAD requests Fixes #21 --- handlers.go | 4 ++++ router.go | 10 +++++----- views.go | 5 +++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/handlers.go b/handlers.go index 554a93f..c6fcece 100644 --- a/handlers.go +++ b/handlers.go @@ -67,6 +67,10 @@ func (rl *rushlink) uploadFileGetHandler(w http.ResponseWriter, r *http.Request) panic(err) } w.Header().Set("Content-Type", fu.ContentType) + w.WriteHeader(http.StatusOK) + if r.Method == "HEAD" { + return + } io.Copy(w, file) } diff --git a/router.go b/router.go index 6d3caaa..bc93633 100644 --- a/router.go +++ b/router.go @@ -79,14 +79,14 @@ func StartMainServer(addr string, db *db.Database, fs *db.FileStore) { router := mux.NewRouter() router.Use(recoveryMiddleware) router.Use(metricsMiddleware) - router.HandleFunc("/", rl.indexGetHandler).Methods("GET") + router.HandleFunc("/", rl.indexGetHandler).Methods("GET", "HEAD") router.HandleFunc("/", rl.newPasteHandler).Methods("POST") - router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}", rl.viewPasteHandler).Methods("GET") - router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}/nr", rl.viewPasteHandlerNoRedirect).Methods("GET") - router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}/meta", rl.viewPasteHandlerMeta).Methods("GET") + router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}", rl.viewPasteHandler).Methods("GET", "HEAD") + router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}/nr", rl.viewPasteHandlerNoRedirect).Methods("GET", "HEAD") + router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}/meta", rl.viewPasteHandlerMeta).Methods("GET", "HEAD") router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}", rl.deletePasteHandler).Methods("DELETE") router.HandleFunc("/{key:[A-Za-z0-9-_]{4,}}/delete", rl.deletePasteHandler).Methods("POST") - router.HandleFunc("/uploads/{id:[A-Za-z0-9-_]+}/{filename:.+}", rl.uploadFileGetHandler).Methods("GET") + router.HandleFunc("/uploads/{id:[A-Za-z0-9-_]+}/{filename:.+}", rl.uploadFileGetHandler).Methods("GET", "HEAD") srv := &http.Server{ Handler: router, diff --git a/views.go b/views.go index c3bb867..2c2a305 100644 --- a/views.go +++ b/views.go @@ -115,6 +115,11 @@ func render(w http.ResponseWriter, r *http.Request, tmplName string, data map[st } return buf.String() } + w.WriteHeader(http.StatusOK) + + if r.Method == "HEAD" { + return + } err = tmpl.Execute(w, data) default: // Fall back to plain text without template