Skip to content

Commit b89314d

Browse files
committed
fix(api): validate execution and bucket query filters
1 parent 51025e5 commit b89314d

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

internal/api/filters.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,15 @@ func executionFilterFromRequest(r *http.Request) (model.CheckExecutionFilter, er
4040
if err != nil {
4141
return filter, err
4242
}
43+
44+
if limit < 0 {
45+
return filter, fmt.Errorf("limit must be greater than or equal to zero")
46+
}
47+
4348
filter.Limit = limit
4449
}
4550

46-
return filter, nil
51+
return filter, validateExecutionFilter(filter)
4752
}
4853

4954
func (h *Handler) timelineFilterFromRequest(
@@ -180,6 +185,18 @@ func validateBucketFilter(filter model.CheckExecutionAggregateFilter) error {
180185
return fmt.Errorf("check_id is required")
181186
}
182187

188+
if filter.From == nil {
189+
return fmt.Errorf("from is required")
190+
}
191+
192+
if filter.To == nil {
193+
return fmt.Errorf("to is required")
194+
}
195+
196+
if !filter.To.After(*filter.From) {
197+
return fmt.Errorf("to must be after from")
198+
}
199+
183200
switch filter.Bucket {
184201
case "", model.CheckExecutionBucketSecond, model.CheckExecutionBucketMinute,
185202
model.CheckExecutionBucketHour, model.CheckExecutionBucketDay:
@@ -189,3 +206,19 @@ func validateBucketFilter(filter model.CheckExecutionAggregateFilter) error {
189206

190207
return nil
191208
}
209+
210+
func validateExecutionFilter(filter model.CheckExecutionFilter) error {
211+
if filter.ServiceID == "" {
212+
return fmt.Errorf("service_id is required")
213+
}
214+
215+
if filter.CheckID == "" {
216+
return fmt.Errorf("check_id is required")
217+
}
218+
219+
if filter.From != nil && filter.To != nil && !filter.To.After(*filter.From) {
220+
return fmt.Errorf("to must be after from")
221+
}
222+
223+
return nil
224+
}

0 commit comments

Comments
 (0)