From 18476c6cba2d5d2bb3ecf3ad136dacbf41d0360e Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Tue, 24 Oct 2023 07:20:10 +0200 Subject: feat: Extract from other repo --- core/middleware.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 core/middleware.go (limited to 'core/middleware.go') diff --git a/core/middleware.go b/core/middleware.go new file mode 100644 index 0000000..55e67fb --- /dev/null +++ b/core/middleware.go @@ -0,0 +1,31 @@ +package core + +import ( + "errors" + "net/http" + + "golang.org/x/exp/slog" +) + +func RecoverMiddleware(next http.Handler) http.Handler { + fn := func(w http.ResponseWriter, r *http.Request) { + defer func() { + if rcv := recover(); rcv != nil { + switch err := rcv.(type) { + case error: + if errors.Is(err, http.ErrAbortHandler) { + panic(rcv) + } + slog.Error(err.Error()) + http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) + default: + panic(err) + } + } + }() + + next.ServeHTTP(w, r) + } + + return http.HandlerFunc(fn) +} -- cgit v1.3