mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
bump(go-openapi/validate): d509235108fcf6ab4913d2dcb3a2260c0db2108e
This commit is contained in:
parent
2b530438f1
commit
66a4e5122a
2
Godeps/Godeps.json
generated
2
Godeps/Godeps.json
generated
@ -1263,7 +1263,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/go-openapi/validate",
|
"ImportPath": "github.com/go-openapi/validate",
|
||||||
"Rev": "deaf2c9013bc1a7f4c774662259a506ba874d80f"
|
"Rev": "d509235108fcf6ab4913d2dcb3a2260c0db2108e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/godbus/dbus",
|
"ImportPath": "github.com/godbus/dbus",
|
||||||
|
1
vendor/github.com/go-openapi/validate/.drone.sec
generated
vendored
1
vendor/github.com/go-openapi/validate/.drone.sec
generated
vendored
@ -1 +0,0 @@
|
|||||||
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.lisG21ATunZSCBP6vaqK_AZCIR18tN563RdqkAb6PGOipqTeg8R7VwZQIeDqS-2Vond6NX_KSC_D_uxxv0hBf2DiGXmwMUmP4nRXrsmbzT2qQKKIHYRDC_6jb2-FSfK14ezIe1Q07UiiJecDsN3CFEccS8E68Tdnp78p7yDwbTvpumnZmwYfyhlImtjFQv2YpyFVsjEHWK0R4e9T3ONQWcx6D2rSoxABbutrS03QwsJhHCeD9joL_gxfkFKm3CW8yWPSk2QYtx_Q1hu-tZR4IPb2tQPXPX3mtyhwBqziWgmJRDFCEjlCO5aCobiMm_9K5X05gue_DcgW163zh1P9jg.nleER2An8CUn_OuR.b77RFEFp0gC8j5yCAoARNKYmQIvWq99ibmf5ffJgdhQBF3sRYJLt_XflJ_2lsaiFOxvc45T2fnkMVy2lHFcri7F9f1BRiT_0AcDthxsecGzG8BZ9QvaM6b4Dn0rhjrOq8rsF0m3ZnbPBkkg3LV5EkbHWstMo2fgJPJhJswlGWhqJPJBDecG1nMBC8SMH32X-zVlSM-BLiaghvOGNxyb_RLZJZ3CLczIdQ2JO2UeYkOGCPGzernvkHDMpqQXc-8cmulDdHgCy87qFLy5ttGFgYbnTm92h_ChOGKZixeX0PL0pQY5wXd2xTO7Tg_Ov5E5FoVwIkwOextedVsF9iz_b_mwtCY3LXrvbJTW7zWrwBVsVyAXxT5iu0HyQ3tBVxT2GxS-yM5ApqLozcZCQg9flMyfSgThu82FfzEr0fI5vKw8zo0GdO4GBuVSppM9m6ToG6hlwyHD9g2YTZw9068hyq1_kZQhugJRjgGbpa2gyGqzx16fg0zVoupVIiq5KfvRlAQFeOVVjQwb0BWf25tJUj5tV3O9ge6dbKSXizEca33FJJwJWoXhd7DCREXUU9pBz06NCCf495BGoVbq3oLPDQc2mpcuy0XAPxSwXcc5Ts8DNs7MrxBlYdw81wMXuztIpOY4.XjKlMWl_H40XszToi2VU5g
|
|
40
vendor/github.com/go-openapi/validate/.drone.yml
generated
vendored
40
vendor/github.com/go-openapi/validate/.drone.yml
generated
vendored
@ -1,40 +0,0 @@
|
|||||||
clone:
|
|
||||||
path: github.com/go-openapi/validate
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
GO_VERSION:
|
|
||||||
- "1.6"
|
|
||||||
|
|
||||||
build:
|
|
||||||
integration:
|
|
||||||
image: golang:$$GO_VERSION
|
|
||||||
pull: true
|
|
||||||
commands:
|
|
||||||
- go get -u github.com/axw/gocov/gocov
|
|
||||||
- go get -u gopkg.in/matm/v1/gocov-html
|
|
||||||
- go get -u github.com/cee-dub/go-junit-report
|
|
||||||
- go get -u github.com/stretchr/testify/assert
|
|
||||||
- go get -u gopkg.in/yaml.v2
|
|
||||||
- go get -u github.com/go-openapi/analysis
|
|
||||||
- go get -u github.com/go-openapi/errors
|
|
||||||
- go get -u github.com/go-openapi/loads
|
|
||||||
- go get -u github.com/go-openapi/strfmt
|
|
||||||
- go get -u github.com/go-openapi/runtime
|
|
||||||
- go test -race
|
|
||||||
- go test -v -cover -coverprofile=coverage.out -covermode=count
|
|
||||||
|
|
||||||
notify:
|
|
||||||
slack:
|
|
||||||
channel: bots
|
|
||||||
webhook_url: $$SLACK_URL
|
|
||||||
username: drone
|
|
||||||
|
|
||||||
publish:
|
|
||||||
coverage:
|
|
||||||
server: https://coverage.vmware.run
|
|
||||||
token: $$GITHUB_TOKEN
|
|
||||||
# threshold: 70
|
|
||||||
# must_increase: true
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
GO_VERSION: "1.6"
|
|
13
vendor/github.com/go-openapi/validate/.pullapprove.yml
generated
vendored
13
vendor/github.com/go-openapi/validate/.pullapprove.yml
generated
vendored
@ -1,13 +0,0 @@
|
|||||||
approve_by_comment: true
|
|
||||||
approve_regex: '^(:shipit:|:\+1:|\+1|LGTM|lgtm|Approved)'
|
|
||||||
reject_regex: ^[Rr]ejected
|
|
||||||
reset_on_push: false
|
|
||||||
reviewers:
|
|
||||||
members:
|
|
||||||
- casualjim
|
|
||||||
- chancez
|
|
||||||
- frapposelli
|
|
||||||
- vburenin
|
|
||||||
- pytlesk4
|
|
||||||
name: pullapprove
|
|
||||||
required: 1
|
|
22
vendor/github.com/go-openapi/validate/.travis.yml
generated
vendored
Normal file
22
vendor/github.com/go-openapi/validate/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
language: go
|
||||||
|
go:
|
||||||
|
- 1.7
|
||||||
|
install:
|
||||||
|
- go get -u github.com/axw/gocov/gocov
|
||||||
|
- go get -u gopkg.in/matm/v1/gocov-html
|
||||||
|
- go get -u github.com/cee-dub/go-junit-report
|
||||||
|
- go get -u github.com/stretchr/testify/assert
|
||||||
|
- go get -u github.com/kr/pretty
|
||||||
|
- go get -u gopkg.in/yaml.v2
|
||||||
|
- go get -u github.com/go-openapi/analysis
|
||||||
|
- go get -u github.com/go-openapi/errors
|
||||||
|
- go get -u github.com/go-openapi/loads
|
||||||
|
- go get -u github.com/go-openapi/strfmt
|
||||||
|
- go get -u github.com/go-openapi/runtime
|
||||||
|
script:
|
||||||
|
- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
after_success:
|
||||||
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
notifications:
|
||||||
|
slack:
|
||||||
|
secure: EmObnQuM9Mw8J9vpFaKKHqSMN4Wsr/A9+v7ewAD5cEhA0T1P4m7MbJMiJOhxUhj/X+BFh2DamW+P2lT8mybj5wg8wnkQ2BteKA8Tawi6f9PRw2NRheO8tAi8o/npLnlmet0kc93mn+oLuqHw36w4+j5mkOl2FghkfGiUVhwrhkCP7KXQN+3TU87e+/HzQumlJ3nsE+6terVxkH3PmaUTsS5ONaODZfuxFpfb7RsoEl3skHf6d+tr+1nViLxxly7558Nc33C+W1mr0qiEvMLZ+kJ/CpGWBJ6CUJM3jm6hNe2eMuIPwEK2hxZob8c7n22VPap4K6a0bBRoydoDXaba+2sD7Ym6ivDO/DVyL44VeBBLyIiIBylDGQdZH+6SoWm90Qe/i7tnY/T5Ao5igT8f3cfQY1c3EsTfqmlDfrhmACBmwSlgkdVBLTprHL63JMY24LWmh4jhxsmMRZhCL4dze8su1w6pLN/pD1pGHtKYCEVbdTmaM3PblNRFf12XB7qosmQsgUndH4Vq3bTbU0s1pKjeDhRyLvFzvR0TBbo0pDLEoF1A/i5GVFWa7yLZNUDudQERRh7qv/xBl2excIaQ1sV4DSVm7bAE9l6Kp+yeHQJW2uN6Y3X8wu9gB9nv9l5HBze7wh8KE6PyWAOLYYqZg9/sAtsv/2GcQqXcKFF1zcA=
|
2
vendor/github.com/go-openapi/validate/README.md
generated
vendored
2
vendor/github.com/go-openapi/validate/README.md
generated
vendored
@ -1,3 +1,3 @@
|
|||||||
# Validation helpers [](https://ci.vmware.run/go-openapi/validate) [](https://coverage.vmware.run/go-openapi/validate) [](https://slackin.goswagger.io)
|
# Validation helpers [](https://travis-ci.org/go-openapi/validate) [](https://codecov.io/gh/go-openapi/validate) [](https://slackin.goswagger.io)
|
||||||
|
|
||||||
[](https://raw.githubusercontent.com/go-openapi/validate/master/LICENSE) [](http://godoc.org/github.com/go-openapi/validate)
|
[](https://raw.githubusercontent.com/go-openapi/validate/master/LICENSE) [](http://godoc.org/github.com/go-openapi/validate)
|
||||||
|
5
vendor/github.com/go-openapi/validate/formats.go
generated
vendored
5
vendor/github.com/go-openapi/validate/formats.go
generated
vendored
@ -15,6 +15,7 @@
|
|||||||
package validate
|
package validate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/go-openapi/spec"
|
"github.com/go-openapi/spec"
|
||||||
@ -51,7 +52,9 @@ func (f *formatValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
r := doit()
|
r := doit()
|
||||||
// fmt.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", f.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("format validator for %q applies %t for %T (kind: %v)\n", f.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
73
vendor/github.com/go-openapi/validate/object_validator.go
generated
vendored
73
vendor/github.com/go-openapi/validate/object_validator.go
generated
vendored
@ -15,8 +15,10 @@
|
|||||||
package validate
|
package validate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/go-openapi/errors"
|
"github.com/go-openapi/errors"
|
||||||
"github.com/go-openapi/spec"
|
"github.com/go-openapi/spec"
|
||||||
@ -45,10 +47,45 @@ func (o *objectValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
|||||||
// there is a problem in the type validator where it will be unhappy about null values
|
// there is a problem in the type validator where it will be unhappy about null values
|
||||||
// so that requires more testing
|
// so that requires more testing
|
||||||
r := reflect.TypeOf(source) == specSchemaType && (kind == reflect.Map || kind == reflect.Struct)
|
r := reflect.TypeOf(source) == specSchemaType && (kind == reflect.Map || kind == reflect.Struct)
|
||||||
//fmt.Printf("object validator for %q applies %t for %T (kind: %v)\n", o.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("object validator for %q applies %t for %T (kind: %v)\n", o.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *objectValidator) isPropertyName() bool {
|
||||||
|
p := strings.Split(o.Path, ".")
|
||||||
|
return p[len(p)-1] == "properties" && p[len(p)-2] != "properties"
|
||||||
|
}
|
||||||
|
func (o *objectValidator) checkArrayMustHaveItems(res *Result, val map[string]interface{}) {
|
||||||
|
if t, typeFound := val["type"]; typeFound {
|
||||||
|
if tpe, ok := t.(string); ok && tpe == "array" {
|
||||||
|
if _, itemsKeyFound := val["items"]; !itemsKeyFound {
|
||||||
|
res.AddErrors(errors.Required("items", o.Path))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *objectValidator) checkItemsMustBeTypeArray(res *Result, val map[string]interface{}) {
|
||||||
|
if !o.isPropertyName() {
|
||||||
|
if _, itemsKeyFound := val["items"]; itemsKeyFound {
|
||||||
|
t, typeFound := val["type"]
|
||||||
|
if typeFound {
|
||||||
|
if tpe, ok := t.(string); !ok || tpe != "array" {
|
||||||
|
res.AddErrors(errors.InvalidType(o.Path, o.In, "array", nil))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// there is no type
|
||||||
|
res.AddErrors(errors.Required("type", o.Path))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (o *objectValidator) precheck(res *Result, val map[string]interface{}) {
|
||||||
|
o.checkArrayMustHaveItems(res, val)
|
||||||
|
o.checkItemsMustBeTypeArray(res, val)
|
||||||
|
}
|
||||||
func (o *objectValidator) Validate(data interface{}) *Result {
|
func (o *objectValidator) Validate(data interface{}) *Result {
|
||||||
val := data.(map[string]interface{})
|
val := data.(map[string]interface{})
|
||||||
numKeys := int64(len(val))
|
numKeys := int64(len(val))
|
||||||
@ -61,14 +98,8 @@ func (o *objectValidator) Validate(data interface{}) *Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res := new(Result)
|
res := new(Result)
|
||||||
if len(o.Required) > 0 {
|
|
||||||
for _, k := range o.Required {
|
o.precheck(res, val)
|
||||||
if _, ok := val[k]; !ok {
|
|
||||||
res.AddErrors(errors.Required(o.Path+"."+k, o.In))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if o.AdditionalProperties != nil && !o.AdditionalProperties.Allows {
|
if o.AdditionalProperties != nil && !o.AdditionalProperties.Allows {
|
||||||
for k := range val {
|
for k := range val {
|
||||||
@ -99,6 +130,8 @@ func (o *objectValidator) Validate(data interface{}) *Result {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createdFromDefaults := map[string]bool{}
|
||||||
|
|
||||||
for pName, pSchema := range o.Properties {
|
for pName, pSchema := range o.Properties {
|
||||||
rName := pName
|
rName := pName
|
||||||
if o.Path != "" {
|
if o.Path != "" {
|
||||||
@ -106,7 +139,24 @@ func (o *objectValidator) Validate(data interface{}) *Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if v, ok := val[pName]; ok {
|
if v, ok := val[pName]; ok {
|
||||||
res.Merge(NewSchemaValidator(&pSchema, o.Root, rName, o.KnownFormats).Validate(v))
|
r := NewSchemaValidator(&pSchema, o.Root, rName, o.KnownFormats).Validate(v)
|
||||||
|
res.Merge(r)
|
||||||
|
} else if pSchema.Default != nil {
|
||||||
|
createdFromDefaults[pName] = true
|
||||||
|
pName := pName // shaddow
|
||||||
|
def := pSchema.Default
|
||||||
|
res.Defaulters = append(res.Defaulters, DefaulterFunc(func() {
|
||||||
|
val[pName] = def
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(o.Required) > 0 {
|
||||||
|
for _, k := range o.Required {
|
||||||
|
if _, ok := val[k]; !ok && !createdFromDefaults[k] {
|
||||||
|
res.AddErrors(errors.Required(o.Path+"."+k, o.In))
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,9 +187,6 @@ func (o *objectValidator) validatePatternProperty(key string, value interface{},
|
|||||||
|
|
||||||
res := validator.Validate(value)
|
res := validator.Validate(value)
|
||||||
result.Merge(res)
|
result.Merge(res)
|
||||||
if res.IsValid() {
|
|
||||||
succeededOnce = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
vendor/github.com/go-openapi/validate/result.go
generated
vendored
30
vendor/github.com/go-openapi/validate/result.go
generated
vendored
@ -14,12 +14,32 @@
|
|||||||
|
|
||||||
package validate
|
package validate
|
||||||
|
|
||||||
import "github.com/go-openapi/errors"
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/go-openapi/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Debug is true when the SWAGGER_DEBUG env var is not empty
|
||||||
|
Debug = os.Getenv("SWAGGER_DEBUG") != ""
|
||||||
|
)
|
||||||
|
|
||||||
|
type Defaulter interface {
|
||||||
|
Apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
type DefaulterFunc func()
|
||||||
|
|
||||||
|
func (f DefaulterFunc) Apply() {
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
|
||||||
// Result represents a validation result
|
// Result represents a validation result
|
||||||
type Result struct {
|
type Result struct {
|
||||||
Errors []error
|
Errors []error
|
||||||
MatchCount int
|
MatchCount int
|
||||||
|
Defaulters []Defaulter
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge merges this result with the other one, preserving match counts etc
|
// Merge merges this result with the other one, preserving match counts etc
|
||||||
@ -29,11 +49,13 @@ func (r *Result) Merge(other *Result) *Result {
|
|||||||
}
|
}
|
||||||
r.AddErrors(other.Errors...)
|
r.AddErrors(other.Errors...)
|
||||||
r.MatchCount += other.MatchCount
|
r.MatchCount += other.MatchCount
|
||||||
|
r.Defaulters = append(r.Defaulters, other.Defaulters...)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddErrors adds errors to this validation result
|
// AddErrors adds errors to this validation result
|
||||||
func (r *Result) AddErrors(errors ...error) {
|
func (r *Result) AddErrors(errors ...error) {
|
||||||
|
// TODO: filter already existing errors
|
||||||
r.Errors = append(r.Errors, errors...)
|
r.Errors = append(r.Errors, errors...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,3 +81,9 @@ func (r *Result) AsError() error {
|
|||||||
}
|
}
|
||||||
return errors.CompositeValidationError(r.Errors...)
|
return errors.CompositeValidationError(r.Errors...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Result) ApplyDefaults() {
|
||||||
|
for _, d := range r.Defaulters {
|
||||||
|
d.Apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
38
vendor/github.com/go-openapi/validate/schema.go
generated
vendored
38
vendor/github.com/go-openapi/validate/schema.go
generated
vendored
@ -15,6 +15,8 @@
|
|||||||
package validate
|
package validate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/go-openapi/spec"
|
"github.com/go-openapi/spec"
|
||||||
@ -80,12 +82,16 @@ func (s *SchemaValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
|||||||
|
|
||||||
// Validate validates the data against the schema
|
// Validate validates the data against the schema
|
||||||
func (s *SchemaValidator) Validate(data interface{}) *Result {
|
func (s *SchemaValidator) Validate(data interface{}) *Result {
|
||||||
|
result := new(Result)
|
||||||
|
if s == nil {
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
if data == nil {
|
if data == nil {
|
||||||
v := s.validators[0].Validate(data)
|
v := s.validators[0].Validate(data)
|
||||||
v.Merge(s.validators[6].Validate(data))
|
v.Merge(s.validators[6].Validate(data))
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
result := new(Result)
|
|
||||||
|
|
||||||
tpe := reflect.TypeOf(data)
|
tpe := reflect.TypeOf(data)
|
||||||
kind := tpe.Kind()
|
kind := tpe.Kind()
|
||||||
@ -98,8 +104,35 @@ func (s *SchemaValidator) Validate(data interface{}) *Result {
|
|||||||
d = swag.ToDynamicJSON(data)
|
d = swag.ToDynamicJSON(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isnumber := s.Schema.Type.Contains("number") || s.Schema.Type.Contains("integer")
|
||||||
|
if num, ok := data.(json.Number); ok && isnumber {
|
||||||
|
if s.Schema.Type.Contains("integer") { // avoid lossy conversion
|
||||||
|
in, erri := num.Int64()
|
||||||
|
if erri != nil {
|
||||||
|
result.AddErrors(erri)
|
||||||
|
result.Inc()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
d = in
|
||||||
|
} else {
|
||||||
|
nf, errf := num.Float64()
|
||||||
|
if errf != nil {
|
||||||
|
result.AddErrors(errf)
|
||||||
|
result.Inc()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
d = nf
|
||||||
|
}
|
||||||
|
|
||||||
|
tpe = reflect.TypeOf(d)
|
||||||
|
kind = tpe.Kind()
|
||||||
|
}
|
||||||
|
|
||||||
for _, v := range s.validators {
|
for _, v := range s.validators {
|
||||||
if !v.Applies(s.Schema, kind) {
|
if !v.Applies(s.Schema, kind) {
|
||||||
|
if Debug {
|
||||||
|
log.Printf("%T does not apply for %v", v, kind)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +152,6 @@ func (s *SchemaValidator) commonValidator() valueValidator {
|
|||||||
return &basicCommonValidator{
|
return &basicCommonValidator{
|
||||||
Path: s.Path,
|
Path: s.Path,
|
||||||
In: s.in,
|
In: s.in,
|
||||||
Default: s.Schema.Default,
|
|
||||||
Enum: s.Schema.Enum,
|
Enum: s.Schema.Enum,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +187,6 @@ func (s *SchemaValidator) stringValidator() valueValidator {
|
|||||||
return &stringValidator{
|
return &stringValidator{
|
||||||
Path: s.Path,
|
Path: s.Path,
|
||||||
In: s.in,
|
In: s.in,
|
||||||
Default: s.Schema.Default,
|
|
||||||
MaxLength: s.Schema.MaxLength,
|
MaxLength: s.Schema.MaxLength,
|
||||||
MinLength: s.Schema.MinLength,
|
MinLength: s.Schema.MinLength,
|
||||||
Pattern: s.Schema.Pattern,
|
Pattern: s.Schema.Pattern,
|
||||||
@ -166,7 +197,6 @@ func (s *SchemaValidator) formatValidator() valueValidator {
|
|||||||
return &formatValidator{
|
return &formatValidator{
|
||||||
Path: s.Path,
|
Path: s.Path,
|
||||||
In: s.in,
|
In: s.in,
|
||||||
//Default: s.Schema.Default,
|
|
||||||
Format: s.Schema.Format,
|
Format: s.Schema.Format,
|
||||||
KnownFormats: s.KnownFormats,
|
KnownFormats: s.KnownFormats,
|
||||||
}
|
}
|
||||||
|
17
vendor/github.com/go-openapi/validate/schema_props.go
generated
vendored
17
vendor/github.com/go-openapi/validate/schema_props.go
generated
vendored
@ -15,6 +15,7 @@
|
|||||||
package validate
|
package validate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/go-openapi/errors"
|
"github.com/go-openapi/errors"
|
||||||
@ -80,12 +81,15 @@ func newSchemaPropsValidator(path string, in string, allOf, oneOf, anyOf []spec.
|
|||||||
|
|
||||||
func (s *schemaPropsValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
func (s *schemaPropsValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
||||||
r := reflect.TypeOf(source) == specSchemaType
|
r := reflect.TypeOf(source) == specSchemaType
|
||||||
// fmt.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", s.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", s.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
||||||
mainResult := new(Result)
|
mainResult := new(Result)
|
||||||
|
var firstSuccess *Result
|
||||||
if len(s.anyOfValidators) > 0 {
|
if len(s.anyOfValidators) > 0 {
|
||||||
var bestFailures *Result
|
var bestFailures *Result
|
||||||
succeededOnce := false
|
succeededOnce := false
|
||||||
@ -94,6 +98,9 @@ func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
|||||||
if result.IsValid() {
|
if result.IsValid() {
|
||||||
bestFailures = nil
|
bestFailures = nil
|
||||||
succeededOnce = true
|
succeededOnce = true
|
||||||
|
if firstSuccess == nil {
|
||||||
|
firstSuccess = result
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if bestFailures == nil || result.MatchCount > bestFailures.MatchCount {
|
if bestFailures == nil || result.MatchCount > bestFailures.MatchCount {
|
||||||
@ -106,11 +113,14 @@ func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
|||||||
}
|
}
|
||||||
if bestFailures != nil {
|
if bestFailures != nil {
|
||||||
mainResult.Merge(bestFailures)
|
mainResult.Merge(bestFailures)
|
||||||
|
} else if firstSuccess != nil {
|
||||||
|
mainResult.Merge(firstSuccess)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(s.oneOfValidators) > 0 {
|
if len(s.oneOfValidators) > 0 {
|
||||||
var bestFailures *Result
|
var bestFailures *Result
|
||||||
|
var firstSuccess *Result
|
||||||
validated := 0
|
validated := 0
|
||||||
|
|
||||||
for _, oneOfSchema := range s.oneOfValidators {
|
for _, oneOfSchema := range s.oneOfValidators {
|
||||||
@ -118,6 +128,9 @@ func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
|||||||
if result.IsValid() {
|
if result.IsValid() {
|
||||||
validated++
|
validated++
|
||||||
bestFailures = nil
|
bestFailures = nil
|
||||||
|
if firstSuccess == nil {
|
||||||
|
firstSuccess = result
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if validated == 0 && (bestFailures == nil || result.MatchCount > bestFailures.MatchCount) {
|
if validated == 0 && (bestFailures == nil || result.MatchCount > bestFailures.MatchCount) {
|
||||||
@ -130,6 +143,8 @@ func (s *schemaPropsValidator) Validate(data interface{}) *Result {
|
|||||||
if bestFailures != nil {
|
if bestFailures != nil {
|
||||||
mainResult.Merge(bestFailures)
|
mainResult.Merge(bestFailures)
|
||||||
}
|
}
|
||||||
|
} else if firstSuccess != nil {
|
||||||
|
mainResult.Merge(firstSuccess)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
vendor/github.com/go-openapi/validate/slice_validator.go
generated
vendored
3
vendor/github.com/go-openapi/validate/slice_validator.go
generated
vendored
@ -67,6 +67,9 @@ func (s *schemaSliceValidator) Validate(data interface{}) *Result {
|
|||||||
itemsSize = int64(len(s.Items.Schemas))
|
itemsSize = int64(len(s.Items.Schemas))
|
||||||
for i := int64(0); i < itemsSize; i++ {
|
for i := int64(0); i < itemsSize; i++ {
|
||||||
validator := NewSchemaValidator(&s.Items.Schemas[i], s.Root, fmt.Sprintf("%s.%d", s.Path, i), s.KnownFormats)
|
validator := NewSchemaValidator(&s.Items.Schemas[i], s.Root, fmt.Sprintf("%s.%d", s.Path, i), s.KnownFormats)
|
||||||
|
if val.Len() <= int(i) {
|
||||||
|
break
|
||||||
|
}
|
||||||
result.Merge(validator.Validate(val.Index(int(i)).Interface()))
|
result.Merge(validator.Validate(val.Index(int(i)).Interface()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
86
vendor/github.com/go-openapi/validate/spec.go
generated
vendored
86
vendor/github.com/go-openapi/validate/spec.go
generated
vendored
@ -19,6 +19,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/go-openapi/analysis"
|
"github.com/go-openapi/analysis"
|
||||||
@ -193,6 +194,13 @@ func (s *SpecValidator) validateDuplicatePropertyNames() *Result {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SpecValidator) resolveRef(ref *spec.Ref) (*spec.Schema, error) {
|
||||||
|
if s.spec.SpecFilePath() != "" {
|
||||||
|
return spec.ResolveRefWithBase(s.spec.Spec(), ref, &spec.ExpandOptions{RelativeBase: s.spec.SpecFilePath()})
|
||||||
|
}
|
||||||
|
return spec.ResolveRef(s.spec.Spec(), ref)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SpecValidator) validateSchemaPropertyNames(nm string, sch spec.Schema, knowns map[string]struct{}) []dupProp {
|
func (s *SpecValidator) validateSchemaPropertyNames(nm string, sch spec.Schema, knowns map[string]struct{}) []dupProp {
|
||||||
var dups []dupProp
|
var dups []dupProp
|
||||||
|
|
||||||
@ -200,7 +208,7 @@ func (s *SpecValidator) validateSchemaPropertyNames(nm string, sch spec.Schema,
|
|||||||
schc := &sch
|
schc := &sch
|
||||||
for schc.Ref.String() != "" {
|
for schc.Ref.String() != "" {
|
||||||
// gather property names
|
// gather property names
|
||||||
reso, err := spec.ResolveRef(s.spec.Spec(), &schc.Ref)
|
reso, err := s.resolveRef(&schc.Ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -236,7 +244,7 @@ func (s *SpecValidator) validateCircularAncestry(nm string, sch spec.Schema, kno
|
|||||||
schn := nm
|
schn := nm
|
||||||
schc := &sch
|
schc := &sch
|
||||||
for schc.Ref.String() != "" {
|
for schc.Ref.String() != "" {
|
||||||
reso, err := spec.ResolveRef(s.spec.Spec(), &schc.Ref)
|
reso, err := s.resolveRef(&schc.Ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -335,15 +343,15 @@ func (s *SpecValidator) validateSchemaItems(schema spec.Schema, prefix, opID str
|
|||||||
return errors.New(422, "%s for %q is a collection without an element type", prefix, opID)
|
return errors.New(422, "%s for %q is a collection without an element type", prefix, opID)
|
||||||
}
|
}
|
||||||
|
|
||||||
schemas := schema.Items.Schemas
|
|
||||||
if schema.Items.Schema != nil {
|
if schema.Items.Schema != nil {
|
||||||
schemas = []spec.Schema{*schema.Items.Schema}
|
schema = *schema.Items.Schema
|
||||||
}
|
if _, err := regexp.Compile(schema.Pattern); err != nil {
|
||||||
for _, sch := range schemas {
|
return errors.New(422, "%s for %q has invalid items pattern: %q", prefix, opID, schema.Pattern)
|
||||||
if err := s.validateSchemaItems(sch, prefix, opID); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return s.validateSchemaItems(schema, prefix, opID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -524,8 +532,15 @@ func (s *SpecValidator) validateParameters() *Result {
|
|||||||
}
|
}
|
||||||
var fromPath []string
|
var fromPath []string
|
||||||
for _, i := range params {
|
for _, i := range params {
|
||||||
fromPath = append(fromPath, knowns[i])
|
knownsi := knowns[i]
|
||||||
knowns[i] = "!"
|
iparams := extractPathParams(knownsi)
|
||||||
|
if len(iparams) > 0 {
|
||||||
|
fromPath = append(fromPath, iparams...)
|
||||||
|
for _, iparam := range iparams {
|
||||||
|
knownsi = strings.Replace(knownsi, iparam, "!", 1)
|
||||||
|
}
|
||||||
|
knowns[i] = knownsi
|
||||||
|
}
|
||||||
}
|
}
|
||||||
knownPath := strings.Join(knowns, "/")
|
knownPath := strings.Join(knowns, "/")
|
||||||
if orig, ok := knownPaths[knownPath]; ok {
|
if orig, ok := knownPaths[knownPath]; ok {
|
||||||
@ -544,7 +559,9 @@ func (s *SpecValidator) validateParameters() *Result {
|
|||||||
for pr.Ref.String() != "" {
|
for pr.Ref.String() != "" {
|
||||||
obj, _, err := pr.Ref.GetPointer().Get(sw)
|
obj, _, err := pr.Ref.GetPointer().Get(sw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if Debug {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
}
|
||||||
res.AddErrors(err)
|
res.AddErrors(err)
|
||||||
break PARAMETERS
|
break PARAMETERS
|
||||||
}
|
}
|
||||||
@ -575,6 +592,10 @@ func (s *SpecValidator) validateParameters() *Result {
|
|||||||
pr = obj.(spec.Parameter)
|
pr = obj.(spec.Parameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, err := regexp.Compile(pr.Pattern); err != nil {
|
||||||
|
res.AddErrors(errors.New(422, "operation %q has invalid pattern in param %q: %q", op.ID, pr.Name, pr.Pattern))
|
||||||
|
}
|
||||||
|
|
||||||
if pr.In == "body" {
|
if pr.In == "body" {
|
||||||
if firstBodyParam != "" {
|
if firstBodyParam != "" {
|
||||||
res.AddErrors(errors.New(422, "operation %q has more than 1 body param (accepted: %q, dropped: %q)", op.ID, firstBodyParam, pr.Name))
|
res.AddErrors(errors.New(422, "operation %q has more than 1 body param (accepted: %q, dropped: %q)", op.ID, firstBodyParam, pr.Name))
|
||||||
@ -595,18 +616,35 @@ func (s *SpecValidator) validateParameters() *Result {
|
|||||||
func parsePath(path string) (segments []string, params []int) {
|
func parsePath(path string) (segments []string, params []int) {
|
||||||
for i, p := range strings.Split(path, "/") {
|
for i, p := range strings.Split(path, "/") {
|
||||||
segments = append(segments, p)
|
segments = append(segments, p)
|
||||||
if len(p) > 0 && p[0] == '{' && p[len(p)-1] == '}' {
|
if d0 := strings.Index(p, "{"); d0 >= 0 && d0 < strings.Index(p, "}") {
|
||||||
params = append(params, i)
|
params = append(params, i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func extractPathParams(segment string) (params []string) {
|
||||||
|
for {
|
||||||
|
d0 := strings.IndexByte(segment, '{')
|
||||||
|
if d0 < 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
d1 := strings.IndexByte(segment[d0:], '}')
|
||||||
|
if d1 > 0 {
|
||||||
|
params = append(params, segment[d0:d0+d1+1])
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
segment = segment[d1:]
|
||||||
|
}
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SpecValidator) validateReferencesValid() *Result {
|
func (s *SpecValidator) validateReferencesValid() *Result {
|
||||||
// each reference must point to a valid object
|
// each reference must point to a valid object
|
||||||
res := new(Result)
|
res := new(Result)
|
||||||
for _, r := range s.analyzer.AllRefs() {
|
for _, r := range s.analyzer.AllRefs() {
|
||||||
if !r.IsValidURI() {
|
if !r.IsValidURI(s.spec.SpecFilePath()) {
|
||||||
res.AddErrors(errors.New(404, "invalid ref %q", r.String()))
|
res.AddErrors(errors.New(404, "invalid ref %q", r.String()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -698,7 +736,9 @@ func (s *SpecValidator) validateDefaultValueValidAgainstSchema() *Result {
|
|||||||
}
|
}
|
||||||
// check simple paramters first
|
// check simple paramters first
|
||||||
if param.Default != nil && param.Schema == nil {
|
if param.Default != nil && param.Schema == nil {
|
||||||
//fmt.Println(param.Name, "in", param.In, "has a default without a schema")
|
if Debug {
|
||||||
|
log.Println(param.Name, "in", param.In, "has a default without a schema")
|
||||||
|
}
|
||||||
// check param valid
|
// check param valid
|
||||||
res.Merge(NewParamValidator(¶m, s.KnownFormats).Validate(param.Default))
|
res.Merge(NewParamValidator(¶m, s.KnownFormats).Validate(param.Default))
|
||||||
}
|
}
|
||||||
@ -721,9 +761,15 @@ func (s *SpecValidator) validateDefaultValueValidAgainstSchema() *Result {
|
|||||||
if h.Items != nil {
|
if h.Items != nil {
|
||||||
res.Merge(s.validateDefaultValueItemsAgainstSchema(nm, "header", &h, h.Items))
|
res.Merge(s.validateDefaultValueItemsAgainstSchema(nm, "header", &h, h.Items))
|
||||||
}
|
}
|
||||||
|
if _, err := regexp.Compile(h.Pattern); err != nil {
|
||||||
|
res.AddErrors(errors.New(422, "operation %q has invalid pattern in default header %q: %q", op.ID, nm, h.Pattern))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, r := range op.Responses.StatusCodeResponses {
|
if dr.Schema != nil {
|
||||||
|
res.Merge(s.validateDefaultValueSchemaAgainstSchema("default", "response", dr.Schema))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for code, r := range op.Responses.StatusCodeResponses {
|
||||||
for nm, h := range r.Headers {
|
for nm, h := range r.Headers {
|
||||||
if h.Default != nil {
|
if h.Default != nil {
|
||||||
res.Merge(NewHeaderValidator(nm, &h, s.KnownFormats).Validate(h.Default))
|
res.Merge(NewHeaderValidator(nm, &h, s.KnownFormats).Validate(h.Default))
|
||||||
@ -731,6 +777,12 @@ func (s *SpecValidator) validateDefaultValueValidAgainstSchema() *Result {
|
|||||||
if h.Items != nil {
|
if h.Items != nil {
|
||||||
res.Merge(s.validateDefaultValueItemsAgainstSchema(nm, "header", &h, h.Items))
|
res.Merge(s.validateDefaultValueItemsAgainstSchema(nm, "header", &h, h.Items))
|
||||||
}
|
}
|
||||||
|
if _, err := regexp.Compile(h.Pattern); err != nil {
|
||||||
|
res.AddErrors(errors.New(422, "operation %q has invalid pattern in %v's header %q: %q", op.ID, code, nm, h.Pattern))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if r.Schema != nil {
|
||||||
|
res.Merge(s.validateDefaultValueSchemaAgainstSchema(strconv.Itoa(code), "response", r.Schema))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -758,6 +810,9 @@ func (s *SpecValidator) validateDefaultValueSchemaAgainstSchema(path, in string,
|
|||||||
res.Merge(s.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.items[%d]", path, i), in, &sch))
|
res.Merge(s.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.items[%d]", path, i), in, &sch))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if _, err := regexp.Compile(schema.Pattern); err != nil {
|
||||||
|
res.AddErrors(errors.New(422, "%s in %s has invalid pattern: %q", path, in, schema.Pattern))
|
||||||
|
}
|
||||||
if schema.AdditionalItems != nil && schema.AdditionalItems.Schema != nil {
|
if schema.AdditionalItems != nil && schema.AdditionalItems.Schema != nil {
|
||||||
res.Merge(s.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalItems", path), in, schema.AdditionalItems.Schema))
|
res.Merge(s.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalItems", path), in, schema.AdditionalItems.Schema))
|
||||||
}
|
}
|
||||||
@ -787,6 +842,9 @@ func (s *SpecValidator) validateDefaultValueItemsAgainstSchema(path, in string,
|
|||||||
if items.Items != nil {
|
if items.Items != nil {
|
||||||
res.Merge(s.validateDefaultValueItemsAgainstSchema(path+"[0]", in, root, items.Items))
|
res.Merge(s.validateDefaultValueItemsAgainstSchema(path+"[0]", in, root, items.Items))
|
||||||
}
|
}
|
||||||
|
if _, err := regexp.Compile(items.Pattern); err != nil {
|
||||||
|
res.AddErrors(errors.New(422, "%s in %s has invalid pattern: %q", path, in, items.Pattern))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
19
vendor/github.com/go-openapi/validate/type.go
generated
vendored
19
vendor/github.com/go-openapi/validate/type.go
generated
vendored
@ -15,6 +15,7 @@
|
|||||||
package validate
|
package validate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -32,16 +33,6 @@ type typeValidator struct {
|
|||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
var jsonTypeNames = map[string]struct{}{
|
|
||||||
"array": struct{}{},
|
|
||||||
"boolean": struct{}{},
|
|
||||||
"integer": struct{}{},
|
|
||||||
"null": struct{}{},
|
|
||||||
"number": struct{}{},
|
|
||||||
"object": struct{}{},
|
|
||||||
"string": struct{}{},
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *typeValidator) schemaInfoForType(data interface{}) (string, string) {
|
func (t *typeValidator) schemaInfoForType(data interface{}) (string, string) {
|
||||||
switch data.(type) {
|
switch data.(type) {
|
||||||
case []byte:
|
case []byte:
|
||||||
@ -121,7 +112,9 @@ func (t *typeValidator) SetPath(path string) {
|
|||||||
func (t *typeValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
func (t *typeValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
||||||
stpe := reflect.TypeOf(source)
|
stpe := reflect.TypeOf(source)
|
||||||
r := (len(t.Type) > 0 || t.Format != "") && (stpe == specSchemaType || stpe == specParameterType || stpe == specHeaderType)
|
r := (len(t.Type) > 0 || t.Format != "") && (stpe == specSchemaType || stpe == specParameterType || stpe == specHeaderType)
|
||||||
//fmt.Printf("type validator for %q applies %t for %T (kind: %v)\n", t.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("type validator for %q applies %t for %T (kind: %v)\n", t.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +133,9 @@ func (t *typeValidator) Validate(data interface{}) *Result {
|
|||||||
kind := val.Kind()
|
kind := val.Kind()
|
||||||
|
|
||||||
schType, format := t.schemaInfoForType(data)
|
schType, format := t.schemaInfoForType(data)
|
||||||
//fmt.Println("path:", t.Path, "schType:", schType, "format:", format, "expType:", t.Type, "expFmt:", t.Format, "kind:", val.Kind().String())
|
if Debug {
|
||||||
|
log.Println("path:", t.Path, "schType:", schType, "format:", format, "expType:", t.Type, "expFmt:", t.Format, "kind:", val.Kind().String())
|
||||||
|
}
|
||||||
isLowerInt := t.Format == "int64" && format == "int32"
|
isLowerInt := t.Format == "int64" && format == "int32"
|
||||||
isLowerFloat := t.Format == "float64" && format == "float32"
|
isLowerFloat := t.Format == "float64" && format == "float32"
|
||||||
isFloatInt := schType == "number" && swag.IsFloat64AJSONInteger(val.Float()) && t.Type.Contains("integer")
|
isFloatInt := schType == "number" && swag.IsFloat64AJSONInteger(val.Float()) && t.Type.Contains("integer")
|
||||||
|
15
vendor/github.com/go-openapi/validate/update-fixtures.sh
generated
vendored
Executable file
15
vendor/github.com/go-openapi/validate/update-fixtures.sh
generated
vendored
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu -o pipefail
|
||||||
|
dir=$(git rev-parse --show-toplevel)
|
||||||
|
scratch=$(mktemp -d -t tmp.XXXXXXXXXX)
|
||||||
|
|
||||||
|
function finish {
|
||||||
|
rm -rf "$scratch"
|
||||||
|
}
|
||||||
|
trap finish EXIT SIGHUP SIGINT SIGTERM
|
||||||
|
|
||||||
|
cd "$scratch"
|
||||||
|
git clone https://github.com/json-schema-org/JSON-Schema-Test-Suite Suite
|
||||||
|
cp -r Suite/tests/draft4/* "$dir/fixtures/jsonschema_suite"
|
||||||
|
cp -a Suite/remotes "$dir/fixtures/jsonschema_suite"
|
31
vendor/github.com/go-openapi/validate/validator.go
generated
vendored
31
vendor/github.com/go-openapi/validate/validator.go
generated
vendored
@ -16,6 +16,7 @@ package validate
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/go-openapi/errors"
|
"github.com/go-openapi/errors"
|
||||||
@ -156,10 +157,17 @@ func (b *basicCommonValidator) Applies(source interface{}, kind reflect.Kind) bo
|
|||||||
func (b *basicCommonValidator) Validate(data interface{}) (res *Result) {
|
func (b *basicCommonValidator) Validate(data interface{}) (res *Result) {
|
||||||
if len(b.Enum) > 0 {
|
if len(b.Enum) > 0 {
|
||||||
for _, enumValue := range b.Enum {
|
for _, enumValue := range b.Enum {
|
||||||
if data != nil && reflect.DeepEqual(enumValue, data) {
|
actualType := reflect.TypeOf(enumValue)
|
||||||
|
if actualType == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
expectedValue := reflect.ValueOf(data)
|
||||||
|
if expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) {
|
||||||
|
if reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), enumValue) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return sErr(errors.EnumFail(b.Path, b.In, data, b.Enum))
|
return sErr(errors.EnumFail(b.Path, b.In, data, b.Enum))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -474,10 +482,14 @@ func (n *numberValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
|||||||
isInt := kind >= reflect.Int && kind <= reflect.Uint64
|
isInt := kind >= reflect.Int && kind <= reflect.Uint64
|
||||||
isFloat := kind == reflect.Float32 || kind == reflect.Float64
|
isFloat := kind == reflect.Float32 || kind == reflect.Float64
|
||||||
r := isInt || isFloat
|
r := isInt || isFloat
|
||||||
// fmt.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", n.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", n.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
// fmt.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", n.Path, false, source, kind)
|
if Debug {
|
||||||
|
log.Printf("schema props validator for %q applies %t for %T (kind: %v)\n", n.Path, false, source, kind)
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -536,15 +548,22 @@ func (s *stringValidator) Applies(source interface{}, kind reflect.Kind) bool {
|
|||||||
switch source.(type) {
|
switch source.(type) {
|
||||||
case *spec.Parameter, *spec.Schema, *spec.Items, *spec.Header:
|
case *spec.Parameter, *spec.Schema, *spec.Items, *spec.Header:
|
||||||
r := kind == reflect.String
|
r := kind == reflect.String
|
||||||
// fmt.Printf("string validator for %q applies %t for %T (kind: %v)\n", s.Path, r, source, kind)
|
if Debug {
|
||||||
|
log.Printf("string validator for %q applies %t for %T (kind: %v)\n", s.Path, r, source, kind)
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
// fmt.Printf("string validator for %q applies %t for %T (kind: %v)\n", s.Path, false, source, kind)
|
if Debug {
|
||||||
|
log.Printf("string validator for %q applies %t for %T (kind: %v)\n", s.Path, false, source, kind)
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stringValidator) Validate(val interface{}) *Result {
|
func (s *stringValidator) Validate(val interface{}) *Result {
|
||||||
data := val.(string)
|
data, ok := val.(string)
|
||||||
|
if !ok {
|
||||||
|
return sErr(errors.InvalidType(s.Path, s.In, "string", val))
|
||||||
|
}
|
||||||
|
|
||||||
if s.Required && !s.AllowEmptyValue && (s.Default == nil || s.Default == "") {
|
if s.Required && !s.AllowEmptyValue && (s.Default == nil || s.Default == "") {
|
||||||
if err := RequiredString(s.Path, s.In, data); err != nil {
|
if err := RequiredString(s.Path, s.In, data); err != nil {
|
||||||
|
6
vendor/github.com/go-openapi/validate/values.go
generated
vendored
6
vendor/github.com/go-openapi/validate/values.go
generated
vendored
@ -196,7 +196,11 @@ func MinimumUint(path, in string, data, min uint64, exclusive bool) *errors.Vali
|
|||||||
|
|
||||||
// MultipleOf validates if the provided number is a multiple of the factor
|
// MultipleOf validates if the provided number is a multiple of the factor
|
||||||
func MultipleOf(path, in string, data, factor float64) *errors.Validation {
|
func MultipleOf(path, in string, data, factor float64) *errors.Validation {
|
||||||
if !swag.IsFloat64AJSONInteger(data / factor) {
|
mult := data / factor
|
||||||
|
if factor < 1 {
|
||||||
|
mult = 1 / factor * data
|
||||||
|
}
|
||||||
|
if !swag.IsFloat64AJSONInteger(mult) {
|
||||||
return errors.NotMultipleOf(path, in, factor)
|
return errors.NotMultipleOf(path, in, factor)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user