Skip to content

Commit 41a1d5c

Browse files
author
Mark Wolfe
authored
feat: Add skipper using the echo convention to enable just that (#176)
1 parent f08cb8b commit 41a1d5c

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

pkg/middleware/oapi_validate.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2930
const 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
6567
func 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 {
167174
func 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+
}

pkg/middleware/oapi_validate_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import (
2121
"net/http/httptest"
2222
"testing"
2323

24+
"github.com/deepmap/oapi-codegen/pkg/testutil"
2425
"github.com/getkin/kin-openapi/openapi3"
2526
"github.com/getkin/kin-openapi/openapi3filter"
2627
"github.com/labstack/echo/v4"
28+
echomiddleware "github.com/labstack/echo/v4/middleware"
2729
"github.com/stretchr/testify/assert"
28-
29-
"github.com/deepmap/oapi-codegen/pkg/testutil"
3030
)
3131

3232
var testSchema = `openapi: "3.0.0"
@@ -259,3 +259,17 @@ func TestOapiRequestValidator(t *testing.T) {
259259
called = false
260260
}
261261
}
262+
263+
func TestGetSkipperFromOptions(t *testing.T) {
264+
265+
options := new(Options)
266+
assert.NotNil(t, getSkipperFromOptions(options))
267+
268+
options = &Options{}
269+
assert.NotNil(t, getSkipperFromOptions(options))
270+
271+
options = &Options{
272+
Skipper: echomiddleware.DefaultSkipper,
273+
}
274+
assert.NotNil(t, getSkipperFromOptions(options))
275+
}

0 commit comments

Comments
 (0)