From 3850a046ff28c025f6daec894617a95c36e70a7f Mon Sep 17 00:00:00 2001 From: chrisr3d Date: Tue, 11 Dec 2018 10:09:48 +0100 Subject: [PATCH] fix: Applying the interoperability parameter to UUIDs referenced in various SDOs & SROs --- stix2/v20/common.py | 7 ++++++- stix2/v20/sdo.py | 7 +++++++ stix2/v20/sro.py | 20 +++++++++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/stix2/v20/common.py b/stix2/v20/common.py index 612ec46..82b9cad 100644 --- a/stix2/v20/common.py +++ b/stix2/v20/common.py @@ -135,7 +135,12 @@ class MarkingDefinition(_STIXBase, _MarkingsMixin): if not isinstance(kwargs['definition'], marking_type): defn = _get_dict(kwargs['definition']) kwargs['definition'] = marking_type(**defn) - self._properties['id'].interoperability = kwargs.get('interoperability', False) + interoperability = kwargs.get('interoperability', False) + self._properties['id'].interoperability = interoperability + if kwargs.get('created_by_ref'): + self._properties['created_by_ref'].interoperability = interoperability + if kwargs.get('object_marking_refs'): + self._properties['object_marking_refs'].contained.interoperability = interoperability super(MarkingDefinition, self).__init__(**kwargs) diff --git a/stix2/v20/sdo.py b/stix2/v20/sdo.py index b6fe37c..f03bac9 100644 --- a/stix2/v20/sdo.py +++ b/stix2/v20/sdo.py @@ -22,6 +22,8 @@ class STIXDomainObject(_STIXBase, _MarkingsMixin): self.__interoperability = interoperability self._properties['id'].interoperability = interoperability self._properties['created_by_ref'].interoperability = interoperability + if kwargs.get('object_marking_refs'): + self._properties['object_marking_refs'].contained.interoperability = interoperability super(STIXDomainObject, self).__init__(*args, **kwargs) @@ -262,6 +264,11 @@ class Report(STIXDomainObject): ('granular_markings', ListProperty(GranularMarking)), ]) + def __init__(self, *args, **kwargs): + self._properties['object_refs'].contained.interoperability = kwargs.get('interoperability', False) + + super(Report, self).__init__(*args, **kwargs) + class ThreatActor(STIXDomainObject): """For more detailed information on this object's properties, see diff --git a/stix2/v20/sro.py b/stix2/v20/sro.py index e488229..115f984 100644 --- a/stix2/v20/sro.py +++ b/stix2/v20/sro.py @@ -12,7 +12,16 @@ from .common import ExternalReference, GranularMarking class STIXRelationshipObject(_STIXBase, _MarkingsMixin): - pass + def __init__(self, *args, **kwargs): + interoperability = kwargs.get('interoperability', False) + self.__interoperability = interoperability + self._properties['id'].interoperability = interoperability + if kwargs.get('created_by_ref'): + self._properties['created_by_ref'].interoperability = interoperability + if kwargs.get('object_marking_refs'): + self._properties['object_marking_refs'].contained.interoperability = interoperability + + super(STIXRelationshipObject, self).__init__(*args, **kwargs) class Relationship(STIXRelationshipObject): @@ -49,6 +58,9 @@ class Relationship(STIXRelationshipObject): kwargs['relationship_type'] = relationship_type if target_ref and not kwargs.get('target_ref'): kwargs['target_ref'] = target_ref + interoperability = kwargs.get('interoperability', False) + self._properties['source_ref'].interoperability = interoperability + self._properties['target_ref'].interoperability = interoperability super(Relationship, self).__init__(**kwargs) @@ -85,5 +97,11 @@ class Sighting(STIXRelationshipObject): # Allow sighting_of_ref as a positional arg. if sighting_of_ref and not kwargs.get('sighting_of_ref'): kwargs['sighting_of_ref'] = sighting_of_ref + interoperability = kwargs.get('interoperability', False) + self._properties['sighting_of_ref'].interoperability = interoperability + if kwargs.get('observed_data_refs'): + self._properties['observed_data_refs'].contained.interoperability = interoperability + if kwargs.get('where_sighted_refs'): + self._properties['where_sighted_refs'].contained.interoperability = interoperability super(Sighting, self).__init__(**kwargs)