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

Commit b598933

Browse files
richard-julienJeremyCloarec
authored andcommitted
[client] Add support for trash restore
1 parent 76257aa commit b598933

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

pycti/api/opencti_api_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from pycti import __version__
1212
from pycti.api.opencti_api_connector import OpenCTIApiConnector
1313
from pycti.api.opencti_api_playbook import OpenCTIApiPlaybook
14+
from pycti.api.opencti_api_trash import OpenCTIApiTrash
1415
from pycti.api.opencti_api_work import OpenCTIApiWork
1516
from pycti.entities.opencti_attack_pattern import AttackPattern
1617
from pycti.entities.opencti_campaign import Campaign
@@ -167,6 +168,7 @@ def __init__(
167168
self.session = requests.session()
168169
# Define the dependencies
169170
self.work = OpenCTIApiWork(self)
171+
self.trash = OpenCTIApiTrash(self)
170172
self.playbook = OpenCTIApiPlaybook(self)
171173
self.connector = OpenCTIApiConnector(self)
172174
self.stix2 = OpenCTIStix2(self)

pycti/api/opencti_api_trash.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class OpenCTIApiTrash:
2+
"""OpenCTIApiTrash"""
3+
4+
def __init__(self, api):
5+
self.api = api
6+
7+
def delete_operation_restore(self, operation_id: str):
8+
query = """
9+
mutation DeleteOperationRestore($id: ID!) {
10+
deleteOperationRestore(id: $id)
11+
}
12+
"""
13+
self.api.query(
14+
query,
15+
{
16+
"id": operation_id,
17+
},
18+
)

pycti/utils/opencti_stix2.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2497,7 +2497,9 @@ def apply_opencti_operation(self, item, operation):
24972497
delete_id = item["id"]
24982498
force_delete = operation == "delete-force"
24992499
self.opencti.stix.delete(id=delete_id)
2500-
elif operation == "merge":
2500+
elif operation == "restore":
2501+
self.opencti.trash.delete_operation_restore(item["id"])
2502+
elif item["opencti_operation"] == "merge":
25012503
target_id = item["merge_target_id"]
25022504
source_ids = item["merge_source_ids"]
25032505
self.opencti.stix.merge(id=target_id, object_ids=source_ids)

pycti/utils/opencti_stix2_splitter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
SUPPORTED_STIX_ENTITY_OBJECTS # entities
2020
+ list(STIX_CYBER_OBSERVABLE_MAPPING.keys()) # observables
2121
+ ["relationship", "sighting"] # relationships
22+
+ ["deleteoperation"] # OpenCTI specific type for operation
2223
)
2324

2425

0 commit comments

Comments
 (0)