| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | package middlewareimport "github.com/labstack/echo"type (	// MethodOverrideConfig defines the config for MethodOverride middleware.	MethodOverrideConfig struct {		// Skipper defines a function to skip middleware.		Skipper Skipper		// Getter is a function that gets overridden method from the request.		// Optional. Default values MethodFromHeader(echo.HeaderXHTTPMethodOverride).		Getter MethodOverrideGetter	}	// MethodOverrideGetter is a function that gets overridden method from the request	MethodOverrideGetter func(echo.Context) string)var (	// DefaultMethodOverrideConfig is the default MethodOverride middleware config.	DefaultMethodOverrideConfig = MethodOverrideConfig{		Skipper: DefaultSkipper,		Getter:  MethodFromHeader(echo.HeaderXHTTPMethodOverride),	})// MethodOverride returns a MethodOverride middleware.// MethodOverride  middleware checks for the overridden method from the request and// uses it instead of the original method.//// For security reasons, only `POST` method can be overridden.func MethodOverride() echo.MiddlewareFunc {	return MethodOverrideWithConfig(DefaultMethodOverrideConfig)}// MethodOverrideWithConfig returns a MethodOverride middleware with config.// See: `MethodOverride()`.func MethodOverrideWithConfig(config MethodOverrideConfig) echo.MiddlewareFunc {	// Defaults	if config.Skipper == nil {		config.Skipper = DefaultMethodOverrideConfig.Skipper	}	if config.Getter == nil {		config.Getter = DefaultMethodOverrideConfig.Getter	}	return func(next echo.HandlerFunc) echo.HandlerFunc {		return func(c echo.Context) error {			if config.Skipper(c) {				return next(c)			}			req := c.Request()			if req.Method == echo.POST {				m := config.Getter(c)				if m != "" {					req.Method = m				}			}			return next(c)		}	}}// MethodFromHeader is a `MethodOverrideGetter` that gets overridden method from// the request header.func MethodFromHeader(header string) MethodOverrideGetter {	return func(c echo.Context) string {		return c.Request().Header.Get(header)	}}// MethodFromForm is a `MethodOverrideGetter` that gets overridden method from the// form parameter.func MethodFromForm(param string) MethodOverrideGetter {	return func(c echo.Context) string {		return c.FormValue(param)	}}// MethodFromQuery is a `MethodOverrideGetter` that gets overridden method from// the query parameter.func MethodFromQuery(param string) MethodOverrideGetter {	return func(c echo.Context) string {		return c.QueryParam(param)	}}
 |