init from gitlab
This commit is contained in:
67
internal/server/router.go
Normal file
67
internal/server/router.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gitlab.com/texm/shokku/internal/server/dto"
|
||||
"gitlab.com/texm/shokku/internal/server/middleware"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func initRouter(debugMode bool, appFS fs.FS) *echo.Echo {
|
||||
r := echo.New()
|
||||
r.Debug = debugMode
|
||||
r.HideBanner = true
|
||||
r.Validator = dto.NewRequestValidator()
|
||||
r.HTTPErrorHandler = errorHandler(debugMode)
|
||||
|
||||
r.Use(middleware.Recover(debugMode))
|
||||
r.Use(middleware.Secure())
|
||||
r.Use(middleware.RequestLogger(debugMode))
|
||||
r.Use(middleware.StaticFiles(appFS))
|
||||
r.Use(middleware.CSRF())
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func errorHandler(debug bool) func(error, echo.Context) {
|
||||
return func(err error, c echo.Context) {
|
||||
if c.Response().Committed {
|
||||
return
|
||||
}
|
||||
|
||||
httpErr, ok := err.(*echo.HTTPError)
|
||||
if ok && httpErr.Internal != nil {
|
||||
if herr, ok := httpErr.Internal.(*echo.HTTPError); ok {
|
||||
httpErr = herr
|
||||
}
|
||||
} else if !ok {
|
||||
httpErr = &echo.HTTPError{
|
||||
Code: http.StatusInternalServerError,
|
||||
Message: http.StatusText(http.StatusInternalServerError),
|
||||
}
|
||||
}
|
||||
|
||||
// Issue #1426
|
||||
code := httpErr.Code
|
||||
message := httpErr.Message
|
||||
if m, strOk := httpErr.Message.(string); strOk {
|
||||
if debug {
|
||||
message = echo.Map{"message": m, "error": httpErr.Error()}
|
||||
} else {
|
||||
message = echo.Map{"message": m}
|
||||
}
|
||||
}
|
||||
|
||||
// Send response
|
||||
if c.Request().Method == http.MethodHead { // Issue #608
|
||||
err = c.NoContent(httpErr.Code)
|
||||
} else {
|
||||
err = c.JSON(code, message)
|
||||
}
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("error handler response")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user