Move panic handling out of router

This commit is contained in:
DarthSim
2022-01-13 22:36:06 +06:00
parent b7cc1cb3a8
commit 86b646fe1b
2 changed files with 27 additions and 28 deletions

View File

@@ -26,12 +26,10 @@ var (
func buildRouter() *router.Router {
r := router.New(config.PathPrefix)
r.PanicHandler = handlePanic
r.GET("/", handleLanding, true)
r.GET("/health", handleHealth, true)
r.GET("/favicon.ico", handleFavicon, true)
r.GET("/", withCORS(withSecret(handleProcessing)), false)
r.GET("/", withCORS(withPanicHandler(withSecret(handleProcessing))), false)
r.HEAD("/", withCORS(handleHead), false)
r.OPTIONS("/", withCORS(handleHead), false)
@@ -104,21 +102,34 @@ func withSecret(h router.RouteHandler) router.RouteHandler {
}
}
func handlePanic(reqID string, rw http.ResponseWriter, r *http.Request, err error) {
ierr := ierrors.Wrap(err, 3)
func withPanicHandler(h router.RouteHandler) router.RouteHandler {
return func(reqID string, rw http.ResponseWriter, r *http.Request) {
defer func() {
if rerr := recover(); rerr != nil {
err, ok := rerr.(error)
if !ok {
panic(rerr)
}
if ierr.Unexpected {
errorreport.Report(err, r)
}
ierr := ierrors.Wrap(err, 3)
router.LogResponse(reqID, r, ierr.StatusCode, ierr)
if ierr.Unexpected {
errorreport.Report(err, r)
}
rw.WriteHeader(ierr.StatusCode)
router.LogResponse(reqID, r, ierr.StatusCode, ierr)
if config.DevelopmentErrorsMode {
rw.Write([]byte(ierr.Message))
} else {
rw.Write([]byte(ierr.PublicMessage))
rw.WriteHeader(ierr.StatusCode)
if config.DevelopmentErrorsMode {
rw.Write([]byte(ierr.Message))
} else {
rw.Write([]byte(ierr.PublicMessage))
}
}
}()
h(reqID, rw, r)
}
}