Skip to content

Commit

Permalink
feat(openapi3filter): add ExludeRequestQuery (#886)
Browse files Browse the repository at this point in the history
  • Loading branch information
zekth committed Dec 8, 2023
1 parent 36afc12 commit c00d180
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/docs/openapi3filter.txt
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@ type Options struct {
// Set ExcludeRequestBody so ValidateRequest skips request body validation
ExcludeRequestBody bool

// Set ExcludeRequestQueryParams so ValidateRequest skips request query params validation
ExcludeRequestQueryParams bool

// Set ExcludeResponseBody so ValidateResponse skips response body validation
ExcludeResponseBody bool

Expand Down
3 changes: 3 additions & 0 deletions openapi3filter/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ type Options struct {
// Set ExcludeRequestBody so ValidateRequest skips request body validation
ExcludeRequestBody bool

// Set ExcludeRequestQueryParams so ValidateRequest skips request query params validation
ExcludeRequestQueryParams bool

// Set ExcludeResponseBody so ValidateResponse skips response body validation
ExcludeResponseBody bool

Expand Down
3 changes: 3 additions & 0 deletions openapi3filter/validate_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ func ValidateRequest(ctx context.Context, input *RequestValidationInput) (err er

// For each parameter of the Operation
for _, parameter := range operationParameters {
if options.ExcludeRequestQueryParams && parameter.Value.In == openapi3.ParameterInQuery {
continue
}
if err = ValidateParameter(ctx, input, parameter.Value); err != nil && !options.MultiError {
return
}
Expand Down
46 changes: 46 additions & 0 deletions openapi3filter/validate_request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,3 +221,49 @@ components:
})
}
}

func TestValidateRequestExcludeQueryParams(t *testing.T) {
const spec = `
openapi: 3.0.0
info:
title: 'Validator'
version: 0.0.1
paths:
/category:
post:
parameters:
- name: category
in: query
schema:
type: integer
required: true
responses:
'200':
description: Ok
`
req, err := http.NewRequest(http.MethodPost, "/category?category=foo", nil)
require.NoError(t, err)
router := setupTestRouter(t, spec)
route, pathParams, err := router.FindRoute(req)
require.NoError(t, err)

err = ValidateRequest(context.Background(), &RequestValidationInput{
Request: req,
PathParams: pathParams,
Route: route,
Options: &Options{
ExcludeRequestQueryParams: true,
},
})
require.NoError(t, err)

err = ValidateRequest(context.Background(), &RequestValidationInput{
Request: req,
PathParams: pathParams,
Route: route,
Options: &Options{
ExcludeRequestQueryParams: false,
},
})
require.Error(t, err)
}

0 comments on commit c00d180

Please sign in to comment.