39 lines
		
	
	
		
			829 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			829 B
		
	
	
	
		
			Go
		
	
	
	
	
	
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)
 | 
						|
				}
 | 
						|
			}()
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |