@@ -24,6 +24,7 @@ import (
24
24
"github.com/getkin/kin-openapi/openapi3"
25
25
"github.com/getkin/kin-openapi/openapi3filter"
26
26
"github.com/labstack/echo/v4"
27
+ echomiddleware "github.com/labstack/echo/v4/middleware"
27
28
)
28
29
29
30
const EchoContextKey = "oapi-codegen/echo-context"
@@ -59,13 +60,19 @@ type Options struct {
59
60
Options openapi3filter.Options
60
61
ParamDecoder openapi3filter.ContentParameterDecoder
61
62
UserData interface {}
63
+ Skipper echomiddleware.Skipper
62
64
}
63
65
64
66
// Create a validator from a swagger object, with validation options
65
67
func OapiRequestValidatorWithOptions (swagger * openapi3.Swagger , options * Options ) echo.MiddlewareFunc {
66
68
router := openapi3filter .NewRouter ().WithSwagger (swagger )
69
+ skipper := getSkipperFromOptions (options )
67
70
return func (next echo.HandlerFunc ) echo.HandlerFunc {
68
71
return func (c echo.Context ) error {
72
+ if skipper (c ) {
73
+ return next (c )
74
+ }
75
+
69
76
err := ValidateRequestFromContext (c , router , options )
70
77
if err != nil {
71
78
return err
@@ -167,3 +174,16 @@ func GetEchoContext(c context.Context) echo.Context {
167
174
func GetUserData (c context.Context ) interface {} {
168
175
return c .Value (UserDataKey )
169
176
}
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