diff --git a/internal/web/server.go b/internal/web/server.go index da3434b..14fc1e4 100644 --- a/internal/web/server.go +++ b/internal/web/server.go @@ -7,6 +7,7 @@ import ( "github.com/lus/pasty/internal/pastes" "github.com/lus/pasty/internal/reports" "github.com/lus/pasty/internal/storage" + "github.com/lus/pasty/pkg/chiimplicitok" "github.com/lus/pasty/pkg/chizerolog" "net/http" ) @@ -52,6 +53,7 @@ func (server *Server) Start() error { router.Use(chizerolog.Logger) router.Use(chizerolog.Recover) + router.Use(chiimplicitok.Middleware) // Register the web frontend handler router.Get("/*", frontendHandler(router.NotFoundHandler())) diff --git a/internal/web/v2_end_delete_paste.go b/internal/web/v2_end_delete_paste.go index 09926c0..a89c2f3 100644 --- a/internal/web/v2_end_delete_paste.go +++ b/internal/web/v2_end_delete_paste.go @@ -15,5 +15,4 @@ func (server *Server) v2EndpointDeletePaste(writer http.ResponseWriter, request if err := server.Storage.Pastes().DeleteByID(request.Context(), paste.ID); err != nil { writeErr(request, writer, err) } - writer.WriteHeader(http.StatusOK) } diff --git a/pkg/chiimplicitok/middleware.go b/pkg/chiimplicitok/middleware.go new file mode 100644 index 0000000..30e98d0 --- /dev/null +++ b/pkg/chiimplicitok/middleware.go @@ -0,0 +1,22 @@ +package chiimplicitok + +import ( + "github.com/go-chi/chi/v5/middleware" + "net/http" +) + +// Middleware sets the status code of a request to http.StatusOK if it was not set explicitly by any handler. +func Middleware(next http.Handler) http.Handler { + fn := func(writer http.ResponseWriter, request *http.Request) { + proxy := middleware.NewWrapResponseWriter(writer, request.ProtoMajor) + + defer func() { + if proxy.Status() == 0 { + proxy.WriteHeader(http.StatusOK) + } + }() + + next.ServeHTTP(writer, request) + } + return http.HandlerFunc(fn) +}