From 09f6e032ec3824c17dacf60d7eee0df232b5fb60 Mon Sep 17 00:00:00 2001 From: vasayxtx Date: Thu, 17 Feb 2022 00:52:07 +0300 Subject: [PATCH] Fix openapi3 validation: path param must be required --- openapi3/loader_test.go | 1 + openapi3/parameter.go | 4 ++++ openapi3filter/req_resp_decoder_test.go | 1 + openapi3filter/validation_test.go | 7 ++++--- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/openapi3/loader_test.go b/openapi3/loader_test.go index eb293148d..384e54d87 100644 --- a/openapi3/loader_test.go +++ b/openapi3/loader_test.go @@ -412,6 +412,7 @@ paths: parameters: - name: id, in: path + required: true schema: type: string responses: diff --git a/openapi3/parameter.go b/openapi3/parameter.go index 2081e4e1d..a0b8ed11f 100644 --- a/openapi3/parameter.go +++ b/openapi3/parameter.go @@ -252,6 +252,10 @@ func (value *Parameter) Validate(ctx context.Context) error { return fmt.Errorf("parameter can't have 'in' value %q", value.In) } + if in == ParameterInPath && !value.Required { + return fmt.Errorf("path parameter %q must be required", value.Name) + } + // Validate a parameter's serialization method. sm, err := value.SerializationMethod() if err != nil { diff --git a/openapi3filter/req_resp_decoder_test.go b/openapi3filter/req_resp_decoder_test.go index 34e63712d..f40a7a53e 100644 --- a/openapi3filter/req_resp_decoder_test.go +++ b/openapi3filter/req_resp_decoder_test.go @@ -908,6 +908,7 @@ func TestDecodeParameter(t *testing.T) { path := "/test" if tc.path != "" { path += "/{" + tc.param.Name + "}" + tc.param.Required = true } info := &openapi3.Info{ diff --git a/openapi3filter/validation_test.go b/openapi3filter/validation_test.go index d4d0a12f1..2f7cf80e6 100644 --- a/openapi3filter/validation_test.go +++ b/openapi3filter/validation_test.go @@ -62,9 +62,10 @@ func TestFilter(t *testing.T) { Parameters: openapi3.Parameters{ { Value: &openapi3.Parameter{ - In: "path", - Name: "pathArg", - Schema: openapi3.NewStringSchema().WithMaxLength(2).NewRef(), + In: "path", + Name: "pathArg", + Schema: openapi3.NewStringSchema().WithMaxLength(2).NewRef(), + Required: true, }, }, {