@@ -295,6 +295,51 @@ def extract_embedded_relationships(
295295 if "object_marking_refs" in stix_object
296296 else []
297297 )
298+
299+ # Open vocabularies
300+ object_open_vocabularies = {}
301+ if self .mapping_cache .get ("vocabularies_definition_fields" ) is None :
302+ self .mapping_cache ["vocabularies_definition_fields" ] = []
303+ query = """
304+ query getVocabCategories {
305+ vocabularyCategories {
306+ key
307+ fields{
308+ key
309+ required
310+ }
311+ }
312+ }
313+ """
314+ result = self .opencti .query (query )
315+ for category in result ["data" ]["vocabularyCategories" ]:
316+ for field in category ["fields" ]:
317+ self .mapping_cache ["vocabularies_definition_fields" ].append (field )
318+ self .mapping_cache ["category_" + field ["key" ]] = category ["key" ]
319+ if any (
320+ field ["key" ] in stix_object
321+ for field in self .mapping_cache ["vocabularies_definition_fields" ]
322+ ):
323+ for f in self .mapping_cache ["vocabularies_definition_fields" ]:
324+ if stix_object .get (f ["key" ]) is None :
325+ continue
326+ if isinstance (stix_object .get (f ["key" ]), list ):
327+ object_open_vocabularies [f ["key" ]] = []
328+ for vocab in stix_object [f ["key" ]]:
329+ object_open_vocabularies [f ["key" ]].append (
330+ self .opencti .vocabulary .handle_vocab (
331+ vocab , self .mapping_cache , field = f
332+ )["name" ]
333+ )
334+ else :
335+ object_open_vocabularies [
336+ f ["key" ]
337+ ] = self .opencti .vocabulary .handle_vocab (
338+ stix_object [f ["key" ]], self .mapping_cache , field = f
339+ )[
340+ "name"
341+ ]
342+
298343 # Object Labels
299344 object_label_ids = []
300345 if (
@@ -569,6 +614,7 @@ def extract_embedded_relationships(
569614 "created_by" : created_by_id ,
570615 "object_marking" : object_marking_ids ,
571616 "object_label" : object_label_ids ,
617+ "open_vocabs" : object_open_vocabularies ,
572618 "kill_chain_phases" : kill_chain_phases_ids ,
573619 "object_refs" : object_refs_ids ,
574620 "granted_refs" : granted_refs_ids ,
@@ -604,6 +650,7 @@ def import_object(
604650 created_by_id = embedded_relationships ["created_by" ]
605651 object_marking_ids = embedded_relationships ["object_marking" ]
606652 object_label_ids = embedded_relationships ["object_label" ]
653+ open_vocabs = embedded_relationships ["open_vocabs" ]
607654 kill_chain_phases_ids = embedded_relationships ["kill_chain_phases" ]
608655 object_refs_ids = embedded_relationships ["object_refs" ]
609656 external_references_ids = embedded_relationships ["external_references" ]
@@ -614,6 +661,7 @@ def import_object(
614661 "created_by_id" : created_by_id ,
615662 "object_marking_ids" : object_marking_ids ,
616663 "object_label_ids" : object_label_ids ,
664+ "open_vocabs" : open_vocabs ,
617665 "kill_chain_phases_ids" : kill_chain_phases_ids ,
618666 "object_ids" : object_refs_ids ,
619667 "external_references_ids" : external_references_ids ,
@@ -717,6 +765,7 @@ def import_observable(
717765 created_by_id = embedded_relationships ["created_by" ]
718766 object_marking_ids = embedded_relationships ["object_marking" ]
719767 object_label_ids = embedded_relationships ["object_label" ]
768+ open_vocabs = embedded_relationships ["open_vocabs" ]
720769 granted_refs_ids = embedded_relationships ["granted_refs" ]
721770 kill_chain_phases_ids = embedded_relationships ["kill_chain_phases" ]
722771 object_refs_ids = embedded_relationships ["object_refs" ]
@@ -728,6 +777,7 @@ def import_observable(
728777 "created_by_id" : created_by_id ,
729778 "object_marking_ids" : object_marking_ids ,
730779 "object_label_ids" : object_label_ids ,
780+ "open_vocabs" : open_vocabs ,
731781 "granted_refs_ids" : granted_refs_ids ,
732782 "kill_chain_phases_ids" : kill_chain_phases_ids ,
733783 "object_ids" : object_refs_ids ,
@@ -854,6 +904,7 @@ def import_relationship(
854904 created_by_id = embedded_relationships ["created_by" ]
855905 object_marking_ids = embedded_relationships ["object_marking" ]
856906 object_label_ids = embedded_relationships ["object_label" ]
907+ open_vocabs = embedded_relationships ["open_vocabs" ]
857908 granted_refs_ids = embedded_relationships ["granted_refs" ]
858909 kill_chain_phases_ids = embedded_relationships ["kill_chain_phases" ]
859910 object_refs_ids = embedded_relationships ["object_refs" ]
@@ -865,6 +916,7 @@ def import_relationship(
865916 "created_by_id" : created_by_id ,
866917 "object_marking_ids" : object_marking_ids ,
867918 "object_label_ids" : object_label_ids ,
919+ "open_vocabs" : open_vocabs ,
868920 "granted_refs_ids" : granted_refs_ids ,
869921 "kill_chain_phases_ids" : kill_chain_phases_ids ,
870922 "object_ids" : object_refs_ids ,
@@ -947,6 +999,7 @@ def import_sighting(
947999 created_by_id = embedded_relationships ["created_by" ]
9481000 object_marking_ids = embedded_relationships ["object_marking" ]
9491001 object_label_ids = embedded_relationships ["object_label" ]
1002+ open_vocabs = embedded_relationships ["open_vocabs" ]
9501003 granted_refs_ids = embedded_relationships ["granted_refs" ]
9511004 kill_chain_phases_ids = embedded_relationships ["kill_chain_phases" ]
9521005 object_refs_ids = embedded_relationships ["object_refs" ]
@@ -958,6 +1011,7 @@ def import_sighting(
9581011 "created_by_id" : created_by_id ,
9591012 "object_marking_ids" : object_marking_ids ,
9601013 "object_label_ids" : object_label_ids ,
1014+ "open_vocabs" : open_vocabs ,
9611015 "granted_refs_ids" : granted_refs_ids ,
9621016 "kill_chain_phases_ids" : kill_chain_phases_ids ,
9631017 "object_ids" : object_refs_ids ,
0 commit comments