From 4e97549bdcd2e79ea6b10595fd1953183f6a554c Mon Sep 17 00:00:00 2001 From: Samuel Hassine Date: Wed, 12 Jul 2023 19:39:10 +0200 Subject: [PATCH] [client] Implement get_all everywhere --- pycti/entities/opencti_campaign.py | 30 +++++++++++++--- pycti/entities/opencti_course_of_action.py | 32 ++++++++++++++--- pycti/entities/opencti_data_component.py | 38 +++++++++++++++----- pycti/entities/opencti_data_source.py | 33 ++++++++++++++--- pycti/entities/opencti_external_reference.py | 31 +++++++++++++--- pycti/entities/opencti_identity.py | 28 +++++++++++++-- 6 files changed, 162 insertions(+), 30 deletions(-) diff --git a/pycti/entities/opencti_campaign.py b/pycti/entities/opencti_campaign.py index 1315eac2..699e3094 100644 --- a/pycti/entities/opencti_campaign.py +++ b/pycti/entities/opencti_campaign.py @@ -160,7 +160,7 @@ def list(self, **kwargs): get_all = kwargs.get("getAll", False) with_pagination = kwargs.get("withPagination", False) if get_all: - first = 500 + first = 100 LOGGER.info("Listing Campaigns with filters %s.", json.dumps(filters)) query = ( @@ -196,9 +196,31 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - return self.opencti.process_multiple( - result["data"]["campaigns"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["campaigns"]) + final_data = final_data + data + while result["data"]["campaigns"]["pageInfo"]["hasNextPage"]: + after = result["data"]["campaigns"]["pageInfo"]["endCursor"] + LOGGER.info("Listing Campaigns after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "search": search, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple(result["data"]["campaigns"]) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["campaigns"], with_pagination + ) """ Read a Campaign object diff --git a/pycti/entities/opencti_course_of_action.py b/pycti/entities/opencti_course_of_action.py index 75717010..b234048a 100644 --- a/pycti/entities/opencti_course_of_action.py +++ b/pycti/entities/opencti_course_of_action.py @@ -161,9 +161,9 @@ def list(self, **kwargs): get_all = kwargs.get("getAll", False) with_pagination = kwargs.get("withPagination", False) if get_all: - first = 500 + first = 100 - LOGGER.info("Listing Course-Of-Actions with filters %s.", json.dumps(filters)) + LOGGER.info("Listing Courses-Of-Action with filters %s.", json.dumps(filters)) query = ( """ query CoursesOfAction($filters: [CoursesOfActionFiltering], $search: String, $first: Int, $after: ID, $orderBy: CoursesOfActionOrdering, $orderMode: OrderingMode) { @@ -197,9 +197,31 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - return self.opencti.process_multiple( - result["data"]["coursesOfAction"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["coursesOfAction"]) + final_data = final_data + data + while result["data"]["coursesOfAction"]["pageInfo"]["hasNextPage"]: + after = result["data"]["coursesOfAction"]["pageInfo"]["endCursor"] + LOGGER.info("Listing Courses-Of-Action after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "search": search, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple(result["data"]["coursesOfAction"]) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["coursesOfAction"], with_pagination + ) """ Read a Course-Of-Action object diff --git a/pycti/entities/opencti_data_component.py b/pycti/entities/opencti_data_component.py index c20de670..9c551060 100644 --- a/pycti/entities/opencti_data_component.py +++ b/pycti/entities/opencti_data_component.py @@ -5,6 +5,8 @@ from stix2.canonicalization.Canonicalize import canonicalize +from pycti.entities import LOGGER + class DataComponent: def __init__(self, opencti): @@ -173,12 +175,9 @@ def list(self, **kwargs): get_all = kwargs.get("getAll", False) with_pagination = kwargs.get("withPagination", False) if get_all: - first = 500 + first = 100 - self.opencti.log( - "info", - "Listing Data-Components with filters " + json.dumps(filters) + ".", - ) + LOGGER.info("Listing Data-Components with filters " + json.dumps(filters) + ".") query = ( """ query DataComponents($filters: [DataComponentsFiltering!], $search: String, $first: Int, $after: ID, $orderBy: DataComponentsOrdering, $orderMode: OrderingMode) { @@ -212,10 +211,31 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - # TODO: get_all ? - return self.opencti.process_multiple( - result["data"]["dataComponents"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["dataComponents"]) + final_data = final_data + data + while result["data"]["dataComponents"]["pageInfo"]["hasNextPage"]: + after = result["data"]["dataComponents"]["pageInfo"]["endCursor"] + LOGGER.info("Listing Data-Components after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "search": search, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple(result["data"]["dataComponents"]) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["dataComponents"], with_pagination + ) """ Read a Data-Component object diff --git a/pycti/entities/opencti_data_source.py b/pycti/entities/opencti_data_source.py index 32ca4d73..a5cfe7fe 100644 --- a/pycti/entities/opencti_data_source.py +++ b/pycti/entities/opencti_data_source.py @@ -5,6 +5,8 @@ from stix2.canonicalization.Canonicalize import canonicalize +from pycti.entities import LOGGER + class DataSource: def __init__(self, opencti): @@ -157,7 +159,7 @@ def list(self, **kwargs): get_all = kwargs.get("getAll", False) with_pagination = kwargs.get("withPagination", False) if get_all: - first = 500 + first = 100 self.opencti.log( "info", @@ -196,10 +198,31 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - # TODO: get_all ? - return self.opencti.process_multiple( - result["data"]["dataSources"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["dataSources"]) + final_data = final_data + data + while result["data"]["dataSources"]["pageInfo"]["hasNextPage"]: + after = result["data"]["dataSources"]["pageInfo"]["endCursor"] + LOGGER.info("Listing Data-Sources after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "search": search, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple(result["data"]["dataSources"]) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["dataSources"], with_pagination + ) """ Read a Data-Source object diff --git a/pycti/entities/opencti_external_reference.py b/pycti/entities/opencti_external_reference.py index 91cf12da..e7ddc320 100644 --- a/pycti/entities/opencti_external_reference.py +++ b/pycti/entities/opencti_external_reference.py @@ -74,7 +74,7 @@ def list(self, **kwargs): get_all = kwargs.get("getAll", False) with_pagination = kwargs.get("withPagination", False) if get_all: - first = 500 + first = 100 LOGGER.info("Listing External-Reference with filters %s.", json.dumps(filters)) query = ( @@ -109,9 +109,32 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - return self.opencti.process_multiple( - result["data"]["externalReferences"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["externalReferences"]) + final_data = final_data + data + while result["data"]["externalReferences"]["pageInfo"]["hasNextPage"]: + after = result["data"]["externalReferences"]["pageInfo"]["endCursor"] + LOGGER.info("Listing External-References after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple( + result["data"]["externalReferences"] + ) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["externalReferences"], with_pagination + ) """ Read a External-Reference object diff --git a/pycti/entities/opencti_identity.py b/pycti/entities/opencti_identity.py index a32ddda1..707b73bb 100644 --- a/pycti/entities/opencti_identity.py +++ b/pycti/entities/opencti_identity.py @@ -207,9 +207,31 @@ def list(self, **kwargs): "orderMode": order_mode, }, ) - return self.opencti.process_multiple( - result["data"]["identities"], with_pagination - ) + if get_all: + final_data = [] + data = self.opencti.process_multiple(result["data"]["identities"]) + final_data = final_data + data + while result["data"]["identities"]["pageInfo"]["hasNextPage"]: + after = result["data"]["identities"]["pageInfo"]["endCursor"] + LOGGER.info("Listing Identities after " + after) + result = self.opencti.query( + query, + { + "filters": filters, + "search": search, + "first": first, + "after": after, + "orderBy": order_by, + "orderMode": order_mode, + }, + ) + data = self.opencti.process_multiple(result["data"]["identities"]) + final_data = final_data + data + return final_data + else: + return self.opencti.process_multiple( + result["data"]["identities"], with_pagination + ) """ Read a Identity object