package web import ( "encoding/json" "net/http" sentryhttp "github.com/getsentry/sentry-go/http" ) func recoveryMiddleware() func(next http.Handler) http.Handler { sentryHandler := sentryhttp.New(sentryhttp.Options{}) return func(next http.Handler) http.Handler { sentryHandler.Handle(next) return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { next.ServeHTTP(w, r) defer func() { re := recover() if re == nil { return } err := re.(error) if err != nil { jsonBody, _ := json.Marshal(struct { Successful bool Error string }{ Successful: false, Error: err.Error(), }) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusInternalServerError) w.Write(jsonBody) } }() }) } }