Add created_by_ref common property
parent
87330fcf74
commit
e2f60bc8c5
|
@ -61,12 +61,13 @@ class _STIXBase(collections.Mapping):
|
||||||
kwargs[prop_name] = prop_metadata['fixed']
|
kwargs[prop_name] = prop_metadata['fixed']
|
||||||
|
|
||||||
if prop_metadata.get('validate'):
|
if prop_metadata.get('validate'):
|
||||||
if not prop_metadata['validate'](cls, kwargs[prop_name]):
|
if (prop_name in kwargs and
|
||||||
|
not prop_metadata['validate'](cls, kwargs[prop_name])):
|
||||||
msg = prop_metadata.get('error_msg', DEFAULT_ERROR).format(
|
msg = prop_metadata.get('error_msg', DEFAULT_ERROR).format(
|
||||||
type=class_name,
|
type=class_name,
|
||||||
field=prop_name,
|
field=prop_name,
|
||||||
expected=prop_metadata.get('expected',
|
expected=prop_metadata.get('expected',
|
||||||
prop_metadata['default'])(cls),
|
prop_metadata.get('default', lambda x: ''))(cls),
|
||||||
)
|
)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
elif prop_metadata.get('fixed'):
|
elif prop_metadata.get('fixed'):
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
"""STIX 2 Common Data Types and Properties"""
|
"""STIX 2 Common Data Types and Properties"""
|
||||||
|
|
||||||
|
import re
|
||||||
from .base import _STIXBase
|
from .base import _STIXBase
|
||||||
from .utils import NOW
|
from .utils import NOW
|
||||||
|
|
||||||
|
@ -15,6 +16,14 @@ ID_PROPERTY = {
|
||||||
'error_msg': "{type} {field} values must begin with '{expected}'."
|
'error_msg': "{type} {field} values must begin with '{expected}'."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ref_regex = ("^[a-z][a-z-]+[a-z]--[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}"
|
||||||
|
"-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
|
||||||
|
|
||||||
|
REF_PROPERTY = {
|
||||||
|
'validate': (lambda x, val: re.match(ref_regex, val)),
|
||||||
|
'error_msg': "{type} {field} values must consist of a valid STIX type name and a valid UUID, separated by '--'."
|
||||||
|
}
|
||||||
|
|
||||||
COMMON_PROPERTIES = {
|
COMMON_PROPERTIES = {
|
||||||
'type': TYPE_PROPERTY,
|
'type': TYPE_PROPERTY,
|
||||||
'id': ID_PROPERTY,
|
'id': ID_PROPERTY,
|
||||||
|
@ -24,6 +33,7 @@ COMMON_PROPERTIES = {
|
||||||
'modified': {
|
'modified': {
|
||||||
'default': NOW,
|
'default': NOW,
|
||||||
},
|
},
|
||||||
|
'created_by_ref': REF_PROPERTY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ def test_my_uuid4_fixture(uuid4):
|
||||||
INDICATOR_ID = "indicator--01234567-89ab-cdef-0123-456789abcdef"
|
INDICATOR_ID = "indicator--01234567-89ab-cdef-0123-456789abcdef"
|
||||||
MALWARE_ID = "malware--fedcba98-7654-3210-fedc-ba9876543210"
|
MALWARE_ID = "malware--fedcba98-7654-3210-fedc-ba9876543210"
|
||||||
RELATIONSHIP_ID = "relationship--00000000-1111-2222-3333-444444444444"
|
RELATIONSHIP_ID = "relationship--00000000-1111-2222-3333-444444444444"
|
||||||
|
IDENTITY_ID = "identity--d4d765ce-cff7-40e8-b7a6-e205d005ac2c"
|
||||||
|
|
||||||
# Minimum required args for an Indicator instance
|
# Minimum required args for an Indicator instance
|
||||||
INDICATOR_KWARGS = dict(
|
INDICATOR_KWARGS = dict(
|
||||||
|
@ -175,6 +176,12 @@ def test_indicator_required_field_pattern():
|
||||||
assert str(excinfo.value) == "Missing required field(s) for Indicator: (pattern)."
|
assert str(excinfo.value) == "Missing required field(s) for Indicator: (pattern)."
|
||||||
|
|
||||||
|
|
||||||
|
def test_indicator_created_ref_invalid_format():
|
||||||
|
with pytest.raises(ValueError) as excinfo:
|
||||||
|
indicator = stix2.Indicator(created_by_ref='myprefix--12345678', **INDICATOR_KWARGS)
|
||||||
|
assert str(excinfo.value) == "Indicator created_by_ref values must consist of a valid STIX type name and a valid UUID, separated by '--'."
|
||||||
|
|
||||||
|
|
||||||
def test_cannot_assign_to_indicator_attributes(indicator):
|
def test_cannot_assign_to_indicator_attributes(indicator):
|
||||||
with pytest.raises(ValueError) as excinfo:
|
with pytest.raises(ValueError) as excinfo:
|
||||||
indicator.valid_from = dt.datetime.now()
|
indicator.valid_from = dt.datetime.now()
|
||||||
|
|
Loading…
Reference in New Issue