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

Commit 0ccf9ce

Browse files
committed
[client] implement inferred_entity & inferred_rel
1 parent e228641 commit 0ccf9ce

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
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_draft import OpenCTIApiDraft
14+
from pycti.api.opencti_api_inferred import OpenCTIApiInferred
1415
from pycti.api.opencti_api_internal_file import OpenCTIApiInternalFile
1516
from pycti.api.opencti_api_notification import OpenCTIApiNotification
1617
from pycti.api.opencti_api_pir import OpenCTIApiPir
@@ -175,6 +176,7 @@ def __init__(
175176
# Define the dependencies
176177
self.work = OpenCTIApiWork(self)
177178
self.notification = OpenCTIApiNotification(self)
179+
self.inferred = OpenCTIApiInferred(self)
178180
self.trash = OpenCTIApiTrash(self)
179181
self.draft = OpenCTIApiDraft(self)
180182
self.workspace = OpenCTIApiWorkspace(self)

pycti/api/opencti_api_inferred.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class OpenCTIApiInferred:
2+
"""OpenCTIApiInferred"""
3+
4+
def __init__(self, api):
5+
self.api = api
6+
7+
def create_inferred_rel(self, **kwargs):
8+
input = kwargs.get("input", None)
9+
self.api.app_logger.info("Creating inferred rel", {"input": input})
10+
query = """
11+
mutation inferredRelationAdd($jsonInput: String!) {
12+
inferredRelationAdd(jsonInput: $jsonInput)
13+
}
14+
"""
15+
self.api.query(query, {"jsonInput": input})
16+
17+
def create_inferred_entity(self, **kwargs):
18+
input = kwargs.get("input", None)
19+
self.api.app_logger.info("Creating inferred entity", {"input": input})
20+
query = """
21+
mutation inferredEntityAdd($jsonInput: String!) {
22+
inferredEntityAdd(jsonInput: $jsonInput)
23+
}
24+
"""
25+
self.api.query(query, {"jsonInput": input})

pycti/utils/opencti_stix2.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2769,6 +2769,20 @@ def apply_opencti_operation(self, item, operation):
27692769
self.opencti.pir.pir_unflag_element(id=id, input=input)
27702770
elif operation == "rule_apply":
27712771
self.rule_apply(item=item)
2772+
elif operation == "inferred_entity":
2773+
opencti_inferred_input = self.opencti.get_attribute_in_extension(
2774+
"opencti_inferred_input", item
2775+
)
2776+
if opencti_inferred_input is None:
2777+
opencti_inferred_input = item["opencti_inferred_input"]
2778+
self.opencti.inferred.create_inferred_entity(input=opencti_inferred_input)
2779+
elif operation == "inferred_rel":
2780+
opencti_inferred_input = self.opencti.get_attribute_in_extension(
2781+
"opencti_inferred_input", item
2782+
)
2783+
if opencti_inferred_input is None:
2784+
opencti_inferred_input = item["opencti_inferred_input"]
2785+
self.opencti.inferred.create_inferred_rel(input=opencti_inferred_input)
27722786
elif operation == "rule_clear":
27732787
self.rule_clear(item=item)
27742788
elif operation == "rules_rescan":

0 commit comments

Comments
 (0)