mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-10-09 19:52:30 +02:00
Move panic handling out of router
This commit is contained in:
39
server.go
39
server.go
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user