in api/internal/core/store/validate.go [114:161]
func cHashKeySchemaCheck(upstream *entity.UpstreamDef) error {
if upstream.HashOn == "consumer" {
return nil
}
if upstream.HashOn != "vars" &&
upstream.HashOn != "header" &&
upstream.HashOn != "cookie" {
return fmt.Errorf("invalid hash_on type: %s", upstream.HashOn)
}
var schemaDef string
if upstream.HashOn == "vars" {
schemaDef = conf.Schema.Get("main.upstream_hash_vars_schema").String()
if schemaDef == "" {
return fmt.Errorf("schema validate failed: schema not found, path: main.upstream_hash_vars_schema")
}
}
if upstream.HashOn == "header" || upstream.HashOn == "cookie" {
schemaDef = conf.Schema.Get("main.upstream_hash_header_schema").String()
if schemaDef == "" {
return fmt.Errorf("schema validate failed: schema not found, path: main.upstream_hash_header_schema")
}
}
s, err := gojsonschema.NewSchema(gojsonschema.NewStringLoader(schemaDef))
if err != nil {
return fmt.Errorf("schema validate failed: %s", err)
}
ret, err := s.Validate(gojsonschema.NewGoLoader(upstream.Key))
if err != nil {
return fmt.Errorf("schema validate failed: %s", err)
}
if !ret.Valid() {
errString := buffer.Buffer{}
for i, vErr := range ret.Errors() {
if i != 0 {
errString.AppendString("\n")
}
errString.AppendString(vErr.String())
}
return fmt.Errorf("schema validate failed: %s", errString.String())
}
return nil
}