OpenAPITools / openapi-style-validator

A customizable style validator to make sure your OpenAPI spec follows your organization's standards.
https://openapitools.github.io/openapi-style-validator/
Apache License 2.0
205 stars 43 forks source link

base64 type properties fail validation for lack of example #132

Open shoffmeister opened 3 years ago

shoffmeister commented 3 years ago

Whenever an object has a property of base64 (i.e. type: string, format: byte) validation will fail the error message

*ERROR* in Model '...', property 'content', field 'example' -> This field should be present and not empty

although the field example is present. This is really tied to the property being of type base64; remove the "format: byte" and the specification document will pass validation.

To reproduce, download the attached Zip file y.zip which contains two files minimally reproducing:

Run mvn verify

//exp: passes validation //act: ERROR in Model

JFCote commented 3 years ago

@shoffmeister Thanks for the bug report! I'm not sure when I'll be able to look at this, I'm very busy for the next 2 weeks but if you send me a PR, I will try to review it quickly and make sure we do a release. Otherwise, it might take a couple of weeks.

Thanks!

gervaisb commented 2 years ago

I made a quick test, it seems that the parser does not set the example property for the "byte" format.

JFCote commented 2 years ago

@gervaisb So either it's a bug with swagger-parser that we use under the hood or swagger-parser follow specification and a byte field should not have example. I can't find any specific information about the byte field examples here: https://swagger.io/docs/specification/adding-examples/

If it's a bug: We need to create a bug in their project. https://github.com/swagger-api/swagger-parser

If it's meant to be like that and follow spec, we need to create a special validation that when the field is "byte", we don't count it as an error when there are no examples.

I don't have time right now to dig deeper but if you have some time, you could go and create an issue in their project since you already have examples.

gervaisb commented 2 years ago

It seems to be a bug on the parser that tries to cast the example to the wrong type: https://github.com/swagger-api/swagger-parser/issues/1630#issuecomment-983017403

tymonx commented 2 years ago

I have the same issue here. As temporary workaround I use format: base64 with additional pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'.

JFCote commented 2 years ago

@gervaisb and @tymonx. As soon as swagger-parser release a new version with this fix, I will update our dependency and create a new release.

Thanks for the workaround in the meantime! :)

acabarbaye commented 2 years ago

same seems to be true with format: binary

gervaisb commented 2 years ago

Hello there,

The parser has been patched, it will now automatically get the bytes of a string. However, there are some implications with this fix, see this comment in the issue: https://github.com/swagger-api/swagger-parser/issues/1630#issuecomment-1076288181 We should be able to fix that issue as soon as they release that fix.

However, regarding the opinionated issues mentioned in the linked comment, should we not support the new swaggerParserBinaryAsString property too?