From b45b0d3a14f86dbfe45756072091a816a9bf9558 Mon Sep 17 00:00:00 2001 From: Luke Lyon Date: Wed, 21 Oct 2020 12:07:31 -0600 Subject: [PATCH 1/3] updates to alert modifications based on Response v 7.0.1.14483 --- src/cbapi/response/models.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cbapi/response/models.py b/src/cbapi/response/models.py index 7b7cc853..14be157a 100644 --- a/src/cbapi/response/models.py +++ b/src/cbapi/response/models.py @@ -294,9 +294,10 @@ def refresh(self): self._info = result[0] self._last_refresh_time = time.time() return True - + def set_ignored(self, ignored_flag=True): - payload = {"updates": {"is_ignored": ignored_flag, "requested_status": "False Positive"}} + """Ignore all future Alerts from the Report that triggered this Alert.""" + payload = {"set_ignored": ignored_flag, "requested_status": "False Positive" if ignored_flag else "Unresolved"} payload["alert_ids"] = [self.unique_id] return self._cb.post_object("/api/v1/alerts", payload) @@ -306,6 +307,9 @@ def assign(self, target): return self._cb.post_object("/api/v1/alerts", payload) def change_status(self, new_status): + allowed_statuses = ["In Progress", "Unresolved", "Resolved", "False Positive"] + if new_status not in allowed_statuses: + raise ApiError("Alert status must be one of {0}".format(allowed_statuses)) payload = {"requested_status": new_status} payload["alert_ids"] = [self.unique_id] return self._cb.post_object("/api/v1/alerts", payload) From 9c847aecf34886ce837e1d426dd0b87976a0e009 Mon Sep 17 00:00:00 2001 From: Luke Lyon Date: Wed, 21 Oct 2020 14:21:56 -0600 Subject: [PATCH 2/3] Make response.Alert.change_status use single API route instead of bulk --- src/cbapi/response/models.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cbapi/response/models.py b/src/cbapi/response/models.py index 14be157a..d210becd 100644 --- a/src/cbapi/response/models.py +++ b/src/cbapi/response/models.py @@ -295,9 +295,9 @@ def refresh(self): self._last_refresh_time = time.time() return True - def set_ignored(self, ignored_flag=True): + def set_ignored(self, ignored_flag=True, status="False Positive"): """Ignore all future Alerts from the Report that triggered this Alert.""" - payload = {"set_ignored": ignored_flag, "requested_status": "False Positive" if ignored_flag else "Unresolved"} + payload = {"set_ignored": ignored_flag, "requested_status": status} payload["alert_ids"] = [self.unique_id] return self._cb.post_object("/api/v1/alerts", payload) @@ -310,9 +310,9 @@ def change_status(self, new_status): allowed_statuses = ["In Progress", "Unresolved", "Resolved", "False Positive"] if new_status not in allowed_statuses: raise ApiError("Alert status must be one of {0}".format(allowed_statuses)) - payload = {"requested_status": new_status} - payload["alert_ids"] = [self.unique_id] - return self._cb.post_object("/api/v1/alerts", payload) + payload = {"status": new_status} + payload["unique_id"] = self.unique_id + return self._cb.post_object("/api/v1/alert/{0}".format(self.unique_id), payload) @property def process(self): From 6f1786b9b514c721f87bebf3f4d388c1c9e9cc5a Mon Sep 17 00:00:00 2001 From: Luke Lyon Date: Wed, 21 Oct 2020 14:43:51 -0600 Subject: [PATCH 3/3] Update AlertQuery set_ignored to use valid keys --- src/cbapi/response/models.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cbapi/response/models.py b/src/cbapi/response/models.py index d210becd..aa454e7b 100644 --- a/src/cbapi/response/models.py +++ b/src/cbapi/response/models.py @@ -254,8 +254,9 @@ def _bulk_update(self, payload): return None - def set_ignored(self, ignored_flag=True): - payload = {"updates": {"is_ignored": ignored_flag, "requested_status": "False Positive"}} + def set_ignored(self, ignored_flag=True, status="False Positive"): + """Ignore all future Alerts from the Report that triggered this Alert.""" + payload = {"set_ignored": ignored_flag, "requested_status": status} return self._bulk_update(payload) def assign(self, target): @@ -263,6 +264,9 @@ def assign(self, target): return self._bulk_update(payload) def change_status(self, new_status): + allowed_statuses = ["In Progress", "Unresolved", "Resolved", "False Positive"] + if new_status not in allowed_statuses: + raise ApiError("Alert status must be one of {0}".format(allowed_statuses)) payload = {"requested_status": new_status} return self._bulk_update(payload)