@@ -24,6 +24,7 @@ import (
2424 "github.com/getkin/kin-openapi/openapi3"
2525 "github.com/getkin/kin-openapi/openapi3filter"
2626 "github.com/labstack/echo/v4"
27+ echomiddleware "github.com/labstack/echo/v4/middleware"
2728)
2829
2930const EchoContextKey = "oapi-codegen/echo-context"
@@ -59,13 +60,19 @@ type Options struct {
5960 Options openapi3filter.Options
6061 ParamDecoder openapi3filter.ContentParameterDecoder
6162 UserData interface {}
63+ Skipper echomiddleware.Skipper
6264}
6365
6466// Create a validator from a swagger object, with validation options
6567func OapiRequestValidatorWithOptions (swagger * openapi3.Swagger , options * Options ) echo.MiddlewareFunc {
6668 router := openapi3filter .NewRouter ().WithSwagger (swagger )
69+ skipper := getSkipperFromOptions (options )
6770 return func (next echo.HandlerFunc ) echo.HandlerFunc {
6871 return func (c echo.Context ) error {
72+ if skipper (c ) {
73+ return next (c )
74+ }
75+
6976 err := ValidateRequestFromContext (c , router , options )
7077 if err != nil {
7178 return err
@@ -167,3 +174,16 @@ func GetEchoContext(c context.Context) echo.Context {
167174func GetUserData (c context.Context ) interface {} {
168175 return c .Value (UserDataKey )
169176}
177+
178+ // attempt to get the skipper from the options whether it is set or not
179+ func getSkipperFromOptions (options * Options ) echomiddleware.Skipper {
180+ if options == nil {
181+ return echomiddleware .DefaultSkipper
182+ }
183+
184+ if options .Skipper == nil {
185+ return echomiddleware .DefaultSkipper
186+ }
187+
188+ return options .Skipper
189+ }
0 commit comments