Add object markings to object factory
parent
0c47936ee0
commit
659ad3df89
|
@ -1,8 +1,9 @@
|
||||||
|
|
||||||
class ObjectFactory(object):
|
class ObjectFactory(object):
|
||||||
|
|
||||||
def __init__(self, created_by=None):
|
def __init__(self, created_by=None, markings=None):
|
||||||
self.created_by = created_by
|
self.created_by = created_by
|
||||||
|
self.markings = markings
|
||||||
|
|
||||||
def create(self, cls=None, **kwargs):
|
def create(self, cls=None, **kwargs):
|
||||||
if cls is None:
|
if cls is None:
|
||||||
|
@ -10,5 +11,7 @@ class ObjectFactory(object):
|
||||||
|
|
||||||
if self.created_by is not None:
|
if self.created_by is not None:
|
||||||
kwargs['created_by_ref'] = self.created_by
|
kwargs['created_by_ref'] = self.created_by
|
||||||
|
if self.markings is not None:
|
||||||
|
kwargs['object_marking_refs'] = self.markings
|
||||||
|
|
||||||
return cls(**kwargs)
|
return cls(**kwargs)
|
||||||
|
|
|
@ -69,7 +69,7 @@ class MarkingProperty(Property):
|
||||||
class MarkingDefinition(_STIXBase):
|
class MarkingDefinition(_STIXBase):
|
||||||
_type = 'marking-definition'
|
_type = 'marking-definition'
|
||||||
_properties = {
|
_properties = {
|
||||||
'created': TimestampProperty(default=lambda: NOW, required=True),
|
'created': TimestampProperty(default=lambda: NOW),
|
||||||
'external_references': ListProperty(ExternalReference),
|
'external_references': ListProperty(ExternalReference),
|
||||||
'created_by_ref': ReferenceProperty(type="identity"),
|
'created_by_ref': ReferenceProperty(type="identity"),
|
||||||
'object_marking_refs': ListProperty(ReferenceProperty(type="marking-definition")),
|
'object_marking_refs': ListProperty(ReferenceProperty(type="marking-definition")),
|
||||||
|
|
|
@ -102,7 +102,7 @@ class ListProperty(Property):
|
||||||
except TypeError:
|
except TypeError:
|
||||||
raise ValueError("must be an iterable.")
|
raise ValueError("must be an iterable.")
|
||||||
try:
|
try:
|
||||||
if isinstance(value, basestring):
|
if isinstance(value, _STIXBase) or isinstance(value, basestring):
|
||||||
value = [value]
|
value = [value]
|
||||||
except NameError:
|
except NameError:
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
|
|
|
@ -14,3 +14,17 @@ def test_object_factory_created_by_ref_obj():
|
||||||
factory = stix2.ObjectFactory(created_by=id_obj)
|
factory = stix2.ObjectFactory(created_by=id_obj)
|
||||||
ind = factory.create(stix2.Indicator, **INDICATOR_KWARGS)
|
ind = factory.create(stix2.Indicator, **INDICATOR_KWARGS)
|
||||||
assert ind.created_by_ref == IDENTITY_ID
|
assert ind.created_by_ref == IDENTITY_ID
|
||||||
|
|
||||||
|
|
||||||
|
def test_object_factory_obj_markings():
|
||||||
|
stmt_marking = stix2.StatementMarking("Copyright 2016, Example Corp")
|
||||||
|
mark_def = stix2.MarkingDefinition(definition_type="statement",
|
||||||
|
definition=stmt_marking)
|
||||||
|
factory = stix2.ObjectFactory(markings=[mark_def, stix2.TLP_AMBER])
|
||||||
|
ind = factory.create(stix2.Indicator, **INDICATOR_KWARGS)
|
||||||
|
assert mark_def.id in ind.object_marking_refs
|
||||||
|
assert stix2.TLP_AMBER.id in ind.object_marking_refs
|
||||||
|
|
||||||
|
factory = stix2.ObjectFactory(markings=stix2.TLP_RED)
|
||||||
|
ind = factory.create(stix2.Indicator, **INDICATOR_KWARGS)
|
||||||
|
assert stix2.TLP_RED.id in ind.object_marking_refs
|
||||||
|
|
|
@ -29,6 +29,19 @@ EXPECTED_STATEMENT_MARKING_DEFINITION = """{
|
||||||
"type": "marking-definition"
|
"type": "marking-definition"
|
||||||
}"""
|
}"""
|
||||||
|
|
||||||
|
EXPECTED_CAMPAIGN_WITH_OBJECT_MARKING = """{
|
||||||
|
"created": "2016-04-06T20:03:00.000Z",
|
||||||
|
"created_by_ref": "identity--f431f809-377b-45e0-aa1c-6a4751cae5ff",
|
||||||
|
"description": "Campaign by Green Group against a series of targets in the financial services sector.",
|
||||||
|
"id": "campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
|
||||||
|
"modified": "2016-04-06T20:03:00.000Z",
|
||||||
|
"name": "Green Group Attacks Against Finance",
|
||||||
|
"object_marking_refs": [
|
||||||
|
"marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9"
|
||||||
|
],
|
||||||
|
"type": "campaign"
|
||||||
|
}"""
|
||||||
|
|
||||||
EXPECTED_GRANULAR_MARKING = """{
|
EXPECTED_GRANULAR_MARKING = """{
|
||||||
"marking_ref": "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
"marking_ref": "marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
||||||
"selectors": [
|
"selectors": [
|
||||||
|
@ -84,6 +97,29 @@ def test_marking_def_example_with_positional_statement():
|
||||||
assert str(marking_definition) == EXPECTED_STATEMENT_MARKING_DEFINITION
|
assert str(marking_definition) == EXPECTED_STATEMENT_MARKING_DEFINITION
|
||||||
|
|
||||||
|
|
||||||
|
def test_marking_def_invalid_type():
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
stix2.MarkingDefinition(
|
||||||
|
id="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
||||||
|
created="2017-01-20T00:00:00.000Z",
|
||||||
|
definition_type="my-definiition-type",
|
||||||
|
definition=stix2.StatementMarking("Copyright 2016, Example Corp")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_campaign_with_markings_example():
|
||||||
|
campaign = stix2.Campaign(
|
||||||
|
id="campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
|
||||||
|
created_by_ref="identity--f431f809-377b-45e0-aa1c-6a4751cae5ff",
|
||||||
|
created="2016-04-06T20:03:00Z",
|
||||||
|
modified="2016-04-06T20:03:00Z",
|
||||||
|
name="Green Group Attacks Against Finance",
|
||||||
|
description="Campaign by Green Group against a series of targets in the financial services sector.",
|
||||||
|
object_marking_refs=TLP_WHITE
|
||||||
|
)
|
||||||
|
assert str(campaign) == EXPECTED_CAMPAIGN_WITH_OBJECT_MARKING
|
||||||
|
|
||||||
|
|
||||||
def test_granular_example():
|
def test_granular_example():
|
||||||
granular_marking = stix2.GranularMarking(
|
granular_marking = stix2.GranularMarking(
|
||||||
marking_ref="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
marking_ref="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
||||||
|
@ -119,7 +155,6 @@ def test_campaign_with_granular_markings_example():
|
||||||
marking_ref="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
marking_ref="marking-definition--613f2e26-407d-48c7-9eca-b8e91df99dc9",
|
||||||
selectors=["description"])
|
selectors=["description"])
|
||||||
])
|
])
|
||||||
print(str(campaign))
|
|
||||||
assert str(campaign) == EXPECTED_CAMPAIGN_WITH_GRANULAR_MARKINGS
|
assert str(campaign) == EXPECTED_CAMPAIGN_WITH_GRANULAR_MARKINGS
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue