Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit 391d326

Browse files
[client] only add draft_id to work when draft is created by connector (opencti #9300)
1 parent 3928659 commit 391d326

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

pycti/connector/opencti_connector_helper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,8 @@ def send_stix2_bundle(self, bundle: str, **kwargs) -> list:
16691669
if not draft_id:
16701670
self.connector_logger.error("Draft couldn't be created")
16711671
return []
1672+
if work_id:
1673+
self.api.work.add_draft_context(work_id, draft_id)
16721674

16731675
# If directory setup, write the bundle to the target directory
16741676
if bundle_send_to_directory and bundle_send_to_directory_path is not None:
@@ -1744,8 +1746,6 @@ def send_stix2_bundle(self, bundle: str, **kwargs) -> list:
17441746
if bundle_send_to_queue:
17451747
if work_id:
17461748
self.api.work.add_expectations(work_id, expectations_number)
1747-
if draft_id:
1748-
self.api.work.add_draft_context(work_id, draft_id)
17491749
if entities_types is None:
17501750
entities_types = []
17511751
if self.queue_protocol == "amqp":

pycti/utils/opencti_stix2.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2431,7 +2431,11 @@ def apply_patch_files(self, item):
24312431
)
24322432

24332433
def apply_patch(self, item):
2434-
field_patch = item["opencti_field_patch"]
2434+
field_patch = self.opencti.get_attribute_in_extension(
2435+
"opencti_field_patch", item
2436+
)
2437+
if field_patch is None:
2438+
field_patch = item["opencti_field_patch"]
24352439
field_patch_without_files = [
24362440
op for op in field_patch if op["key"] != "x_opencti_files"
24372441
]
@@ -2458,6 +2462,19 @@ def apply_patch(self, item):
24582462
)
24592463
self.apply_patch_files(item)
24602464

2465+
def apply_opencti_operation(self, item, operation):
2466+
if operation == "delete":
2467+
delete_id = item["id"]
2468+
self.opencti.stix.delete(id=delete_id)
2469+
elif operation == "merge":
2470+
target_id = item["merge_target_id"]
2471+
source_ids = item["merge_source_ids"]
2472+
self.opencti.stix.merge(id=target_id, object_ids=source_ids)
2473+
elif operation == "patch":
2474+
self.apply_patch(item=item)
2475+
else:
2476+
raise ValueError("Not supported opencti_operation")
2477+
24612478
def import_item(
24622479
self,
24632480
item,
@@ -2469,18 +2486,13 @@ def import_item(
24692486
worker_logger = self.opencti.logger_class("worker")
24702487
try:
24712488
self.opencti.set_retry_number(processing_count)
2472-
if "opencti_operation" in item:
2473-
if item["opencti_operation"] == "delete":
2474-
delete_id = item["id"]
2475-
self.opencti.stix.delete(id=delete_id)
2476-
elif item["opencti_operation"] == "merge":
2477-
target_id = item["merge_target_id"]
2478-
source_ids = item["merge_source_ids"]
2479-
self.opencti.stix.merge(id=target_id, object_ids=source_ids)
2480-
elif item["opencti_operation"] == "patch":
2481-
self.apply_patch(item=item)
2482-
else:
2483-
raise ValueError("Not supported opencti_operation")
2489+
opencti_operation = self.opencti.get_attribute_in_extension(
2490+
"opencti_operation", item
2491+
)
2492+
if opencti_operation is not None:
2493+
self.apply_opencti_operation(item, opencti_operation)
2494+
elif "opencti_operation" in item:
2495+
self.apply_opencti_operation(item, item["opencti_operation"])
24842496
elif item["type"] == "relationship":
24852497
# Import relationship
24862498
self.import_relationship(item, update, types)

0 commit comments

Comments
 (0)