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)
 | |
| 				}
 | |
| 			}()
 | |
| 		})
 | |
| 	}
 | |
| }
 | 
