package mid import ( "fmt" "net/http" "runtime/debug" "github.com/hay-kot/homebox/backend/pkgs/server" ) // Panic is a middleware that recovers from panics anywhere in the chain and wraps the error. // and returns it up the middleware chain. func Panic(develop bool) server.Middleware { return func(h server.Handler) server.Handler { return server.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (err error) { defer func() { if rec := recover(); rec != nil { trace := debug.Stack() if develop { err = fmt.Errorf("PANIC [%v]", rec) fmt.Printf("%s", string(trace)) } else { err = fmt.Errorf("PANIC [%v] TRACE[%s]", rec, string(trace)) } } }() return h.ServeHTTP(w, r) }) } }