feat(http): add validation checks to PUT requests (#15096)
feat(http): add validation checks to PUT requestspull/15138/head
commit
1d14ba1d1c
|
@ -342,22 +342,6 @@ func decodePostCheckRequest(ctx context.Context, r *http.Request) (influxdb.Chec
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodePutCheckRequest(ctx context.Context, r *http.Request) (influxdb.Check, error) {
|
func decodePutCheckRequest(ctx context.Context, r *http.Request) (influxdb.Check, error) {
|
||||||
buf := new(bytes.Buffer)
|
|
||||||
_, err := buf.ReadFrom(r.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, &influxdb.Error{
|
|
||||||
Code: influxdb.EInvalid,
|
|
||||||
Err: err,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defer r.Body.Close()
|
|
||||||
chk, err := check.UnmarshalJSON(buf.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
return nil, &influxdb.Error{
|
|
||||||
Code: influxdb.EInvalid,
|
|
||||||
Err: err,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
params := httprouter.ParamsFromContext(ctx)
|
params := httprouter.ParamsFromContext(ctx)
|
||||||
id := params.ByName("id")
|
id := params.ByName("id")
|
||||||
if id == "" {
|
if id == "" {
|
||||||
|
@ -366,11 +350,40 @@ func decodePutCheckRequest(ctx context.Context, r *http.Request) (influxdb.Check
|
||||||
Msg: "url missing id",
|
Msg: "url missing id",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i := new(influxdb.ID)
|
i := new(influxdb.ID)
|
||||||
if err := i.DecodeFromString(id); err != nil {
|
if err := i.DecodeFromString(id); err != nil {
|
||||||
return nil, err
|
return nil, &influxdb.Error{
|
||||||
|
Code: influxdb.EInvalid,
|
||||||
|
Msg: "invalid check id format",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defer r.Body.Close()
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
_, err := buf.ReadFrom(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &influxdb.Error{
|
||||||
|
Code: influxdb.EInvalid,
|
||||||
|
Msg: "unable to read HTTP body",
|
||||||
|
Err: err,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chk, err := check.UnmarshalJSON(buf.Bytes())
|
||||||
|
if err != nil {
|
||||||
|
return nil, &influxdb.Error{
|
||||||
|
Code: influxdb.EInvalid,
|
||||||
|
Msg: "malformed check body",
|
||||||
|
Err: err,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chk.SetID(*i)
|
chk.SetID(*i)
|
||||||
|
|
||||||
|
if err := chk.Valid(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return chk, nil
|
return chk, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1077,9 +1077,11 @@ func TestService_handleUpdateCheck(t *testing.T) {
|
||||||
id: "020f755c3c082000",
|
id: "020f755c3c082000",
|
||||||
chk: &check.Deadman{
|
chk: &check.Deadman{
|
||||||
Base: check.Base{
|
Base: check.Base{
|
||||||
Name: "example",
|
Name: "example",
|
||||||
Status: influxdb.Active,
|
Status: influxdb.Active,
|
||||||
TaskID: 3,
|
TaskID: 3,
|
||||||
|
OwnerID: 42,
|
||||||
|
OrgID: influxTesting.MustIDBase16("020f755c3c082000"),
|
||||||
},
|
},
|
||||||
Level: notification.Critical,
|
Level: notification.Critical,
|
||||||
},
|
},
|
||||||
|
@ -1099,6 +1101,7 @@ func TestService_handleUpdateCheck(t *testing.T) {
|
||||||
"updatedAt": "0001-01-01T00:00:00Z",
|
"updatedAt": "0001-01-01T00:00:00Z",
|
||||||
"id": "020f755c3c082000",
|
"id": "020f755c3c082000",
|
||||||
"orgID": "020f755c3c082000",
|
"orgID": "020f755c3c082000",
|
||||||
|
"ownerID": "000000000000002a",
|
||||||
"level": "CRIT",
|
"level": "CRIT",
|
||||||
"name": "example",
|
"name": "example",
|
||||||
"query": {
|
"query": {
|
||||||
|
@ -1140,7 +1143,10 @@ func TestService_handleUpdateCheck(t *testing.T) {
|
||||||
id: "020f755c3c082000",
|
id: "020f755c3c082000",
|
||||||
chk: &check.Deadman{
|
chk: &check.Deadman{
|
||||||
Base: check.Base{
|
Base: check.Base{
|
||||||
Name: "example",
|
Name: "example",
|
||||||
|
Status: influxdb.Active,
|
||||||
|
OwnerID: 42,
|
||||||
|
OrgID: influxTesting.MustIDBase16("020f755c3c082000"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1183,7 +1189,7 @@ func TestService_handleUpdateCheck(t *testing.T) {
|
||||||
body, _ := ioutil.ReadAll(res.Body)
|
body, _ := ioutil.ReadAll(res.Body)
|
||||||
|
|
||||||
if res.StatusCode != tt.wants.statusCode {
|
if res.StatusCode != tt.wants.statusCode {
|
||||||
t.Errorf("%q. handlePutCheck() = %v, want %v %v", tt.name, res.StatusCode, tt.wants.statusCode, w.Header())
|
t.Errorf("%q. handlePutCheck() = %v, want %v %v %v", tt.name, res.StatusCode, tt.wants.statusCode, w.Header(), string(body))
|
||||||
}
|
}
|
||||||
if tt.wants.contentType != "" && content != tt.wants.contentType {
|
if tt.wants.contentType != "" && content != tt.wants.contentType {
|
||||||
t.Errorf("%q. handlePutCheck() = %v, want %v", tt.name, content, tt.wants.contentType)
|
t.Errorf("%q. handlePutCheck() = %v, want %v", tt.name, content, tt.wants.contentType)
|
||||||
|
|
Loading…
Reference in New Issue