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

Commit 52b81eb

Browse files
[client] Start renaming coverage (#opencti/11707)
1 parent 285a4bc commit 52b81eb

File tree

3 files changed

+33
-30
lines changed

3 files changed

+33
-30
lines changed

pycti/api/opencti_api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
from pycti.entities.opencti_opinion import Opinion
5353
from pycti.entities.opencti_report import Report
5454
from pycti.entities.opencti_role import Role
55-
from pycti.entities.opencti_security_assessment import SecurityAssessment
55+
from pycti.entities.opencti_security_coverage import SecurityCoverage
5656
from pycti.entities.opencti_settings import Settings
5757
from pycti.entities.opencti_stix import Stix
5858
from pycti.entities.opencti_stix_core_object import StixCoreObject
@@ -224,7 +224,7 @@ def __init__(
224224
self.narrative = Narrative(self)
225225
self.language = Language(self)
226226
self.vulnerability = Vulnerability(self)
227-
self.security_assessment = SecurityAssessment(self)
227+
self.security_coverage = SecurityCoverage(self)
228228
self.attack_pattern = AttackPattern(self)
229229
self.course_of_action = CourseOfAction(self)
230230
self.data_component = DataComponent(self)

pycti/entities/opencti_security_assessment.py renamed to pycti/entities/opencti_security_coverage.py

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from stix2.canonicalization.Canonicalize import canonicalize
77

88

9-
class SecurityAssessment:
9+
class SecurityCoverage:
1010
def __init__(self, opencti):
1111
self.opencti = opencti
1212
self.properties = """
@@ -17,8 +17,11 @@ def __init__(self, opencti):
1717
spec_version
1818
created_at
1919
updated_at
20-
objectAssess {
21-
id
20+
objectCovered {
21+
__typename
22+
... on StixCoreObject {
23+
id
24+
}
2225
}
2326
objectMarking {
2427
id
@@ -34,25 +37,24 @@ def __init__(self, opencti):
3437
"""
3538

3639
@staticmethod
37-
def generate_id(name):
38-
name = name.lower().strip()
39-
data = {"name": name}
40+
def generate_id(covered_ref):
41+
data = {"covered_ref": covered_ref.lower().strip()}
4042
data = canonicalize(data, utf8=False)
4143
id = str(uuid.uuid5(uuid.UUID("00abedb4-aa42-466c-9c01-fed23315a9b7"), data))
42-
return "securityAssessment--" + id
44+
return "security-coverage--" + id
4345

4446
@staticmethod
4547
def generate_id_from_data(data):
46-
return SecurityAssessment.generate_id(data["name"])
48+
return SecurityCoverage.generate_id(data["covered_ref"])
4749

4850
"""
49-
List SecurityAssessment objects
51+
List securityCoverage objects
5052
5153
:param filters: the filters to apply
5254
:param search: the search keyword
5355
:param first: return the first n rows from the after ID (or the beginning if not set)
5456
:param after: ID of the first row for pagination
55-
:return List of SecurityAssessment objects
57+
:return List of SecurityCoverage objects
5658
"""
5759

5860
def list(self, **kwargs):
@@ -67,12 +69,12 @@ def list(self, **kwargs):
6769
with_pagination = kwargs.get("withPagination", False)
6870

6971
self.opencti.app_logger.info(
70-
"Listing SecurityAssessment with filters", {"filters": json.dumps(filters)}
72+
"Listing SecurityCoverage with filters", {"filters": json.dumps(filters)}
7173
)
7274
query = (
7375
"""
74-
query SecurityAssessment($filters: FilterGroup, $search: String, $first: Int, $after: ID, $orderBy: SecurityAssessmentOrdering, $orderMode: OrderingMode) {
75-
securityAssessments(filters: $filters, search: $search, first: $first, after: $after, orderBy: $orderBy, orderMode: $orderMode) {
76+
query SecurityCoverage($filters: FilterGroup, $search: String, $first: Int, $after: ID, $orderBy: SecurityCoverageOrdering, $orderMode: OrderingMode) {
77+
securityCoverages(filters: $filters, search: $search, first: $first, after: $after, orderBy: $orderBy, orderMode: $orderMode) {
7678
edges {
7779
node {
7880
"""
@@ -105,12 +107,12 @@ def list(self, **kwargs):
105107

106108
if get_all:
107109
final_data = []
108-
data = self.opencti.process_multiple(result["data"]["securityAssessments"])
110+
data = self.opencti.process_multiple(result["data"]["securityCoverages"])
109111
final_data = final_data + data
110-
while result["data"]["securityAssessments"]["pageInfo"]["hasNextPage"]:
111-
after = result["data"]["securityAssessments"]["pageInfo"]["endCursor"]
112+
while result["data"]["securityCoverages"]["pageInfo"]["hasNextPage"]:
113+
after = result["data"]["securityCoverages"]["pageInfo"]["endCursor"]
112114
self.opencti.app_logger.info(
113-
"Listing SecurityAssessment", {"after": after}
115+
"Listing SecurityCoverage", {"after": after}
114116
)
115117
result = self.opencti.query(
116118
query,
@@ -124,33 +126,33 @@ def list(self, **kwargs):
124126
},
125127
)
126128
data = self.opencti.process_multiple(
127-
result["data"]["securityAssessments"]
129+
result["data"]["securityCoverages"]
128130
)
129131
final_data = final_data + data
130132
return final_data
131133
else:
132134
return self.opencti.process_multiple(
133-
result["data"]["securityAssessments"], with_pagination
135+
result["data"]["securityCoverages"], with_pagination
134136
)
135137

136138
"""
137-
Read a SecurityAssessment object
139+
Read a SecurityCoverage object
138140
139-
:param id: the id of the SecurityAssessment
141+
:param id: the id of the SecurityCoverage
140142
:param filters: the filters to apply if no id provided
141-
:return SecurityAssessment object
143+
:return SecurityCoverage object
142144
"""
143145

144146
def read(self, **kwargs):
145147
id = kwargs.get("id", None)
146148
filters = kwargs.get("filters", None)
147149
custom_attributes = kwargs.get("customAttributes", None)
148150
if id is not None:
149-
self.opencti.app_logger.info("Reading SecurityAssessment", {"id": id})
151+
self.opencti.app_logger.info("Reading SecurityCoverage", {"id": id})
150152
query = (
151153
"""
152-
query SecurityAssessment($id: String!) {
153-
securityAssessment(id: $id) {
154+
query SecurityCoverage($id: String!) {
155+
securityCoverage(id: $id) {
154156
"""
155157
+ (
156158
custom_attributes
@@ -164,7 +166,7 @@ def read(self, **kwargs):
164166
)
165167
result = self.opencti.query(query, {"id": id})
166168
return self.opencti.process_multiple_fields(
167-
result["data"]["securityAssessment"]
169+
result["data"]["securityCoverage"]
168170
)
169171
elif filters is not None:
170172
result = self.list(filters=filters)
@@ -174,6 +176,6 @@ def read(self, **kwargs):
174176
return None
175177
else:
176178
self.opencti.app_logger.error(
177-
"[opencti_tool] Missing parameters: id or filters"
179+
"[opencti_security_coverage] Missing parameters: id or filters"
178180
)
179181
return None

pycti/utils/opencti_stix2.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ def get_readers(self):
885885
"Tool": self.opencti.tool.read,
886886
"Vocabulary": self.opencti.vocabulary.read,
887887
"Vulnerability": self.opencti.vulnerability.read,
888-
"SecurityAssessment": self.opencti.security_assessment.read,
888+
"Security-Coverage": self.opencti.security_coverage.read,
889889
}
890890

891891
def get_reader(self, entity_type: str):
@@ -962,6 +962,7 @@ def get_stix_helper(self):
962962
"narrative": self.opencti.narrative,
963963
"task": self.opencti.task,
964964
"x-opencti-task": self.opencti.task,
965+
"Security-Coverage": self.opencti.security_coverage,
965966
"vocabulary": self.opencti.vocabulary,
966967
# relationships
967968
"relationship": self.opencti.stix_core_relationship,

0 commit comments

Comments
 (0)