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

Commit 4f6a446

Browse files
[client] External reference not always created and correctly assigned (#259)
1 parent 9fc1912 commit 4f6a446

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

pycti/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
__version__ = "5.3.3"
2+
__version__ = "5.3.4"
33

44
from .api.opencti_api_client import OpenCTIApiClient
55
from .api.opencti_api_connector import OpenCTIApiConnector

pycti/entities/opencti_external_reference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ def create(self, **kwargs):
173173
x_opencti_stix_ids = kwargs.get("x_opencti_stix_ids", None)
174174
update = kwargs.get("update", False)
175175

176-
if source_name is not None and url is not None:
176+
if source_name is not None or url is not None:
177177
self.opencti.log(
178178
"info", "Creating External Reference {" + source_name + "}."
179179
)

pycti/utils/opencti_stix2.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -433,18 +433,29 @@ def extract_embedded_relationships(
433433
external_references_ids = []
434434
if "external_references" in stix_object:
435435
for external_reference in stix_object["external_references"]:
436-
if "url" in external_reference and "source_name" in external_reference:
437-
url = external_reference["url"]
438-
source_name = external_reference["source_name"]
439-
else:
436+
url = external_reference["url"] if "url" in external_reference else None
437+
source_name = (
438+
external_reference["source_name"]
439+
if "source_name" in external_reference
440+
else None
441+
)
442+
external_id = (
443+
external_reference["external_id"]
444+
if "external_id" in external_reference
445+
else None
446+
)
447+
generated_ref_id = self.opencti.external_reference.generate_id(
448+
url, source_name, external_id
449+
)
450+
if generated_ref_id is None:
440451
continue
441-
if url in self.mapping_cache:
442-
external_reference_id = self.mapping_cache[url]["id"]
452+
if external_id in self.mapping_cache:
453+
external_reference_id = self.mapping_cache[external_id]
443454
else:
444455
external_reference_id = self.opencti.external_reference.create(
445456
source_name=source_name,
446457
url=url,
447-
external_id=external_reference["external_id"]
458+
external_id=external_id
448459
if "external_id" in external_reference
449460
else None,
450461
description=external_reference["description"]
@@ -472,7 +483,7 @@ def extract_embedded_relationships(
472483
data=base64.b64decode(file["data"]),
473484
mime_type=file["mime_type"],
474485
)
475-
self.mapping_cache[url] = {"id": external_reference_id}
486+
self.mapping_cache[generated_ref_id] = generated_ref_id
476487
external_references_ids.append(external_reference_id)
477488
if stix_object["type"] in [
478489
"threat-actor",

0 commit comments

Comments
 (0)