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

Commit f454952

Browse files
[client] Improve client to support playbook looping control (opencti/#6930)
OpenCTI-Platform/opencti#6930
1 parent ae00059 commit f454952

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

pycti/api/opencti_api_client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@ def __init__(
207207
def set_applicant_id_header(self, applicant_id):
208208
self.request_headers["opencti-applicant-id"] = applicant_id
209209

210+
def set_playbook_id_header(self, playbook_id):
211+
self.request_headers["opencti-playbook-id"] = playbook_id
212+
213+
def set_event_id(self, event_id):
214+
self.request_headers["opencti-event-id"] = event_id
215+
210216
def set_synchronized_upsert_header(self, synchronized):
211217
self.request_headers["synchronized-upsert"] = (
212218
"true" if synchronized is True else "false"

pycti/api/opencti_api_playbook.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ def playbook_step_execution(self, playbook: dict, bundle: str):
99
"Executing playbook step", {"playbook_id": playbook["playbook_id"]}
1010
)
1111
query = """
12-
mutation PlaybookStepExecution($execution_id: ID!, $execution_start: DateTime!, $data_instance_id: ID!, $playbook_id: ID!, $previous_step_id: ID!, $step_id: ID!, $previous_bundle: String!, $bundle: String!) {
13-
playbookStepExecution(execution_id: $execution_id, execution_start: $execution_start, data_instance_id: $data_instance_id, playbook_id: $playbook_id, previous_step_id: $previous_step_id, step_id: $step_id, previous_bundle: $previous_bundle, bundle: $bundle)
12+
mutation PlaybookStepExecution($execution_id: ID!, $event_id: ID!, $execution_start: DateTime!, $data_instance_id: ID!, $playbook_id: ID!, $previous_step_id: ID!, $step_id: ID!, $previous_bundle: String!, $bundle: String!) {
13+
playbookStepExecution(execution_id: $execution_id, event_id: $event_id, execution_start: $execution_start, data_instance_id: $data_instance_id, playbook_id: $playbook_id, previous_step_id: $previous_step_id, step_id: $step_id, previous_bundle: $previous_bundle, bundle: $bundle)
1414
}
1515
"""
1616
self.api.query(
1717
query,
1818
{
1919
"execution_id": playbook["execution_id"],
20+
"event_id": playbook["event_id"],
2021
"execution_start": playbook["execution_start"],
2122
"playbook_id": playbook["playbook_id"],
2223
"data_instance_id": playbook["data_instance_id"],

pycti/connector/opencti_connector_helper.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,18 +282,20 @@ def _data_handler(self, json_data) -> None:
282282
is_playbook = "playbook" in json_data["internal"]
283283
# If playbook, compute object on data bundle
284284
if is_playbook:
285-
execution_id = json_data["internal"]["playbook"]["execution_id"]
286285
execution_start = self.helper.date_now()
287-
playbook_id = json_data["internal"]["playbook"]["playbook_id"]
288-
data_instance_id = json_data["internal"]["playbook"][
286+
event_id = json_data["internal"]["playbook"].get("event_id")
287+
execution_id = json_data["internal"]["playbook"].get("execution_id")
288+
playbook_id = json_data["internal"]["playbook"].get("playbook_id")
289+
data_instance_id = json_data["internal"]["playbook"].get(
289290
"data_instance_id"
290-
]
291+
)
291292
previous_bundle = json.dumps((json_data["event"]["bundle"]))
292293
step_id = json_data["internal"]["playbook"]["step_id"]
293294
previous_step_id = json_data["internal"]["playbook"][
294295
"previous_step_id"
295296
]
296297
playbook_data = {
298+
"event_id": event_id,
297299
"execution_id": execution_id,
298300
"execution_start": execution_start,
299301
"playbook_id": playbook_id,

0 commit comments

Comments
 (0)