in api/internal/filter/schema.go [110:157]
func handleSpecialField(resource string, reqBody []byte) ([]byte, error) {
var bodyMap map[string]interface{}
err := json.Unmarshal(reqBody, &bodyMap)
if err != nil {
return reqBody, fmt.Errorf("read request body failed: %s", err)
}
if _, ok := bodyMap["create_time"]; ok {
return reqBody, errors.New("we don't accept create_time from client")
}
if _, ok := bodyMap["update_time"]; ok {
return reqBody, errors.New("we don't accept update_time from client")
}
// remove script, because it's a map, and need to be parsed into lua code
if resource == "routes" {
var route map[string]interface{}
err := json.Unmarshal(reqBody, &route)
if err != nil {
return nil, fmt.Errorf("read request body failed: %s", err)
}
if _, ok := route["script"]; ok {
delete(route, "script")
reqBody, err = json.Marshal(route)
if err != nil {
return nil, fmt.Errorf("read request body failed: %s", err)
}
}
}
// SSL does not need to pass sni, we need to parse the SSL to get sni
if resource == "ssl" {
var ssl map[string]interface{}
err := json.Unmarshal(reqBody, &ssl)
if err != nil {
return nil, fmt.Errorf("read request body failed: %s", err)
}
ssl["snis"], err = parseCert(ssl["cert"].(string), ssl["key"].(string))
if err != nil {
return nil, fmt.Errorf("SSL parse failed: %s", err)
}
reqBody, err = json.Marshal(ssl)
if err != nil {
return nil, fmt.Errorf("read request body failed: %s", err)
}
}
return reqBody, nil
}