Skip to content

Commit c9c7497

Browse files
committed
[client] implement inferred_entity & inferred_rel
1 parent f49241e commit c9c7497

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
@@ -176,6 +177,7 @@ def __init__(
176177
# Define the dependencies
177178
self.work = OpenCTIApiWork(self)
178179
self.notification = OpenCTIApiNotification(self)
180+
self.inferred = OpenCTIApiInferred(self)
179181
self.trash = OpenCTIApiTrash(self)
180182
self.draft = OpenCTIApiDraft(self)
181183
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
@@ -2781,6 +2781,20 @@ def apply_opencti_operation(self, item, operation):
27812781
self.opencti.pir.pir_unflag_element(id=id, input=input)
27822782
elif operation == "rule_apply":
27832783
self.rule_apply(item=item)
2784+
elif operation == "inferred_entity":
2785+
opencti_inferred_input = self.opencti.get_attribute_in_extension(
2786+
"opencti_inferred_input", item
2787+
)
2788+
if opencti_inferred_input is None:
2789+
opencti_inferred_input = item["opencti_inferred_input"]
2790+
self.opencti.inferred.create_inferred_entity(input=opencti_inferred_input)
2791+
elif operation == "inferred_rel":
2792+
opencti_inferred_input = self.opencti.get_attribute_in_extension(
2793+
"opencti_inferred_input", item
2794+
)
2795+
if opencti_inferred_input is None:
2796+
opencti_inferred_input = item["opencti_inferred_input"]
2797+
self.opencti.inferred.create_inferred_rel(input=opencti_inferred_input)
27842798
elif operation == "rule_clear":
27852799
self.rule_clear(item=item)
27862800
elif operation == "rules_rescan":

0 commit comments

Comments
 (0)