Skip to content

Commit

Permalink
feat: Add skipper using the echo convention to enable just that (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Wolfe committed May 7, 2020
1 parent f08cb8b commit 41a1d5c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
20 changes: 20 additions & 0 deletions pkg/middleware/oapi_validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/getkin/kin-openapi/openapi3"
"github.com/getkin/kin-openapi/openapi3filter"
"github.com/labstack/echo/v4"
echomiddleware "github.com/labstack/echo/v4/middleware"
)

const EchoContextKey = "oapi-codegen/echo-context"
Expand Down Expand Up @@ -59,13 +60,19 @@ type Options struct {
Options openapi3filter.Options
ParamDecoder openapi3filter.ContentParameterDecoder
UserData interface{}
Skipper echomiddleware.Skipper
}

// Create a validator from a swagger object, with validation options
func OapiRequestValidatorWithOptions(swagger *openapi3.Swagger, options *Options) echo.MiddlewareFunc {
router := openapi3filter.NewRouter().WithSwagger(swagger)
skipper := getSkipperFromOptions(options)
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
if skipper(c) {
return next(c)
}

err := ValidateRequestFromContext(c, router, options)
if err != nil {
return err
Expand Down Expand Up @@ -167,3 +174,16 @@ func GetEchoContext(c context.Context) echo.Context {
func GetUserData(c context.Context) interface{} {
return c.Value(UserDataKey)
}

// attempt to get the skipper from the options whether it is set or not
func getSkipperFromOptions(options *Options) echomiddleware.Skipper {
if options == nil {
return echomiddleware.DefaultSkipper
}

if options.Skipper == nil {
return echomiddleware.DefaultSkipper
}

return options.Skipper
}
18 changes: 16 additions & 2 deletions pkg/middleware/oapi_validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import (
"net/http/httptest"
"testing"

"github.com/deepmap/oapi-codegen/pkg/testutil"
"github.com/getkin/kin-openapi/openapi3"
"github.com/getkin/kin-openapi/openapi3filter"
"github.com/labstack/echo/v4"
echomiddleware "github.com/labstack/echo/v4/middleware"
"github.com/stretchr/testify/assert"

"github.com/deepmap/oapi-codegen/pkg/testutil"
)

var testSchema = `openapi: "3.0.0"
Expand Down Expand Up @@ -259,3 +259,17 @@ func TestOapiRequestValidator(t *testing.T) {
called = false
}
}

func TestGetSkipperFromOptions(t *testing.T) {

options := new(Options)
assert.NotNil(t, getSkipperFromOptions(options))

options = &Options{}
assert.NotNil(t, getSkipperFromOptions(options))

options = &Options{
Skipper: echomiddleware.DefaultSkipper,
}
assert.NotNil(t, getSkipperFromOptions(options))
}

0 comments on commit 41a1d5c

Please sign in to comment.