Skip to content

Commit 6cd1fab

Browse files
committed
create min/max constraint in db - add min/max to confidence common property
1 parent 9653bd7 commit 6cd1fab

File tree

3 files changed

+39
-21
lines changed

3 files changed

+39
-21
lines changed

stix2/datastore/relational_db/database_backends/database_backend_base.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ def determine_sql_type_for_hex_property(): # noqa: F811
7171
def determine_sql_type_for_timestamp_property(): # noqa: F811
7272
pass
7373

74+
def create_regex_constraint_clause(self, column_name, pattern):
75+
pass
76+
7477
# ------------------------------------------------------------------
7578
# Common SQL types for STIX property classes
7679

@@ -127,6 +130,20 @@ def array_allowed():
127130
def create_regex_constraint_expression(self, column_name, pattern):
128131
return CheckConstraint(self.create_regex_constraint_clause(column_name, pattern))
129132

133+
@staticmethod
134+
def check_for_none(val):
135+
return val is None
136+
137+
def create_min_max_constraint_expression(self, int_property, column_name):
138+
if not self.check_for_none(int_property.min) and not self.check_for_none(int_property.max):
139+
return CheckConstraint(f"{column_name} >= {int_property.min} and {column_name} <= {int_property.max}")
140+
elif not self.check_for_none(int_property.min):
141+
return CheckConstraint(f"{column_name} >= {int_property.min}")
142+
elif not self.check_for_none(int_property.max):
143+
return CheckConstraint(f"{column_name} <= {int_property.max}")
144+
else:
145+
return None
146+
130147
def create_regex_constraint_and_expression(self, clause1, clause2):
131148
return (
132149
CheckConstraint(

stix2/datastore/relational_db/table_creation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ def generate_table_information(self, name, db_backend, **kwargs): # noqa: F811
630630
return Column(
631631
name,
632632
self.determine_sql_type(db_backend),
633+
db_backend.create_min_max_constraint_expression(self, name),
633634
nullable=not self.required,
634635
default=self._fixed_value if hasattr(self, "_fixed_value") else None,
635636
)

stix2/v21/sdo.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
)
3232

3333

34-
class AttackPattern(_DomainObject):
34+
class git diff AttackPattern(_DomainObject):
3535
"""For more detailed information on this object's properties, see
3636
`the STIX 2.1 specification <https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_axjijf603msy>`__.
3737
"""
@@ -50,7 +50,7 @@ class AttackPattern(_DomainObject):
5050
('kill_chain_phases', ListProperty(KillChainPhase)),
5151
('revoked', BooleanProperty(default=lambda: False)),
5252
('labels', ListProperty(StringProperty)),
53-
('confidence', IntegerProperty()),
53+
('confidence', IntegerProperty(min=0, max=100)),
5454
('lang', StringProperty()),
5555
('external_references', ListProperty(ExternalReference)),
5656
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -80,7 +80,7 @@ class Campaign(_DomainObject):
8080
('objective', StringProperty()),
8181
('revoked', BooleanProperty(default=lambda: False)),
8282
('labels', ListProperty(StringProperty)),
83-
('confidence', IntegerProperty()),
83+
('confidence', IntegerProperty(min=0, max=100)),
8484
('lang', StringProperty()),
8585
('external_references', ListProperty(ExternalReference)),
8686
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -116,7 +116,7 @@ class CourseOfAction(_DomainObject):
116116
('description', StringProperty()),
117117
('revoked', BooleanProperty(default=lambda: False)),
118118
('labels', ListProperty(StringProperty)),
119-
('confidence', IntegerProperty()),
119+
('confidence', IntegerProperty(min=0, max=100)),
120120
('lang', StringProperty()),
121121
('external_references', ListProperty(ExternalReference)),
122122
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -144,7 +144,7 @@ class Grouping(_DomainObject):
144144
('object_refs', ListProperty(ReferenceProperty(valid_types=["SCO", "SDO", "SRO"], spec_version='2.1'), required=True)),
145145
('revoked', BooleanProperty(default=lambda: False)),
146146
('labels', ListProperty(StringProperty)),
147-
('confidence', IntegerProperty()),
147+
('confidence', IntegerProperty(min=0, max=100)),
148148
('lang', StringProperty()),
149149
('external_references', ListProperty(ExternalReference)),
150150
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -174,7 +174,7 @@ class Identity(_DomainObject):
174174
('contact_information', StringProperty()),
175175
('revoked', BooleanProperty(default=lambda: False)),
176176
('labels', ListProperty(StringProperty)),
177-
('confidence', IntegerProperty()),
177+
('confidence', IntegerProperty(min=0, max=100)),
178178
('lang', StringProperty()),
179179
('external_references', ListProperty(ExternalReference)),
180180
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -201,7 +201,7 @@ class Incident(_DomainObject):
201201
('kill_chain_phases', ListProperty(KillChainPhase)),
202202
('revoked', BooleanProperty(default=lambda: False)),
203203
('labels', ListProperty(StringProperty)),
204-
('confidence', IntegerProperty()),
204+
('confidence', IntegerProperty(min=0, max=100)),
205205
('lang', StringProperty()),
206206
('external_references', ListProperty(ExternalReference)),
207207
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -234,7 +234,7 @@ class Indicator(_DomainObject):
234234
('kill_chain_phases', ListProperty(KillChainPhase)),
235235
('revoked', BooleanProperty(default=lambda: False)),
236236
('labels', ListProperty(StringProperty)),
237-
('confidence', IntegerProperty()),
237+
('confidence', IntegerProperty(min=0, max=100)),
238238
('lang', StringProperty()),
239239
('external_references', ListProperty(ExternalReference)),
240240
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -292,7 +292,7 @@ class Infrastructure(_DomainObject):
292292
('last_seen', TimestampProperty()),
293293
('revoked', BooleanProperty(default=lambda: False)),
294294
('labels', ListProperty(StringProperty)),
295-
('confidence', IntegerProperty()),
295+
('confidence', IntegerProperty(min=0, max=100)),
296296
('lang', StringProperty()),
297297
('external_references', ListProperty(ExternalReference)),
298298
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -335,7 +335,7 @@ class IntrusionSet(_DomainObject):
335335
('secondary_motivations', ListProperty(OpenVocabProperty(ATTACK_MOTIVATION))),
336336
('revoked', BooleanProperty(default=lambda: False)),
337337
('labels', ListProperty(StringProperty)),
338-
('confidence', IntegerProperty()),
338+
('confidence', IntegerProperty(min=0, max=100)),
339339
('lang', StringProperty()),
340340
('external_references', ListProperty(ExternalReference)),
341341
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -380,7 +380,7 @@ class Location(_DomainObject):
380380
('postal_code', StringProperty()),
381381
('revoked', BooleanProperty(default=lambda: False)),
382382
('labels', ListProperty(StringProperty)),
383-
('confidence', IntegerProperty()),
383+
('confidence', IntegerProperty(min=0, max=100)),
384384
('lang', StringProperty()),
385385
('external_references', ListProperty(ExternalReference)),
386386
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -490,7 +490,7 @@ class Malware(_DomainObject):
490490
('sample_refs', ListProperty(ReferenceProperty(valid_types=['artifact', 'file'], spec_version='2.1'))),
491491
('revoked', BooleanProperty(default=lambda: False)),
492492
('labels', ListProperty(StringProperty)),
493-
('confidence', IntegerProperty()),
493+
('confidence', IntegerProperty(min=0, max=100)),
494494
('lang', StringProperty()),
495495
('external_references', ListProperty(ExternalReference)),
496496
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -546,7 +546,7 @@ class MalwareAnalysis(_DomainObject):
546546
('sample_ref', ReferenceProperty(valid_types="SCO", spec_version='2.1')),
547547
('revoked', BooleanProperty(default=lambda: False)),
548548
('labels', ListProperty(StringProperty)),
549-
('confidence', IntegerProperty()),
549+
('confidence', IntegerProperty(min=0, max=100)),
550550
('lang', StringProperty()),
551551
('external_references', ListProperty(ExternalReference)),
552552
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -579,7 +579,7 @@ class Note(_DomainObject):
579579
('object_refs', ListProperty(ReferenceProperty(valid_types=["SCO", "SDO", "SRO"], spec_version='2.1'), required=True)),
580580
('revoked', BooleanProperty(default=lambda: False)),
581581
('labels', ListProperty(StringProperty)),
582-
('confidence', IntegerProperty()),
582+
('confidence', IntegerProperty(min=0, max=100)),
583583
('lang', StringProperty()),
584584
('external_references', ListProperty(ExternalReference)),
585585
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -608,7 +608,7 @@ class ObservedData(_DomainObject):
608608
('object_refs', ListProperty(ReferenceProperty(valid_types=["SCO", "SRO"], spec_version='2.1'))),
609609
('revoked', BooleanProperty(default=lambda: False)),
610610
('labels', ListProperty(StringProperty)),
611-
('confidence', IntegerProperty()),
611+
('confidence', IntegerProperty(min=0, max=100)),
612612
('lang', StringProperty()),
613613
('external_references', ListProperty(ExternalReference)),
614614
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -661,7 +661,7 @@ class Opinion(_DomainObject):
661661
('object_refs', ListProperty(ReferenceProperty(valid_types=["SCO", "SDO", "SRO"], spec_version='2.1'), required=True)),
662662
('revoked', BooleanProperty(default=lambda: False)),
663663
('labels', ListProperty(StringProperty)),
664-
('confidence', IntegerProperty()),
664+
('confidence', IntegerProperty(min=0, max=100)),
665665
('lang', StringProperty()),
666666
('external_references', ListProperty(ExternalReference)),
667667
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -690,7 +690,7 @@ class Report(_DomainObject):
690690
('object_refs', ListProperty(ReferenceProperty(valid_types=["SCO", "SDO", "SRO"], spec_version='2.1'), required=True)),
691691
('revoked', BooleanProperty(default=lambda: False)),
692692
('labels', ListProperty(StringProperty)),
693-
('confidence', IntegerProperty()),
693+
('confidence', IntegerProperty(min=0, max=100)),
694694
('lang', StringProperty()),
695695
('external_references', ListProperty(ExternalReference)),
696696
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -727,7 +727,7 @@ class ThreatActor(_DomainObject):
727727
('personal_motivations', ListProperty(OpenVocabProperty(ATTACK_MOTIVATION))),
728728
('revoked', BooleanProperty(default=lambda: False)),
729729
('labels', ListProperty(StringProperty)),
730-
('confidence', IntegerProperty()),
730+
('confidence', IntegerProperty(min=0, max=100)),
731731
('lang', StringProperty()),
732732
('external_references', ListProperty(ExternalReference)),
733733
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -767,7 +767,7 @@ class Tool(_DomainObject):
767767
('tool_version', StringProperty()),
768768
('revoked', BooleanProperty(default=lambda: False)),
769769
('labels', ListProperty(StringProperty)),
770-
('confidence', IntegerProperty()),
770+
('confidence', IntegerProperty(min=0, max=100)),
771771
('lang', StringProperty()),
772772
('external_references', ListProperty(ExternalReference)),
773773
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -793,7 +793,7 @@ class Vulnerability(_DomainObject):
793793
('description', StringProperty()),
794794
('revoked', BooleanProperty(default=lambda: False)),
795795
('labels', ListProperty(StringProperty)),
796-
('confidence', IntegerProperty()),
796+
('confidence', IntegerProperty(min=0, max=100)),
797797
('lang', StringProperty()),
798798
('external_references', ListProperty(ExternalReference)),
799799
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),
@@ -846,7 +846,7 @@ def wrapper(cls):
846846
+ [
847847
('revoked', BooleanProperty(default=lambda: False)),
848848
('labels', ListProperty(StringProperty)),
849-
('confidence', IntegerProperty()),
849+
('confidence', IntegerProperty(min=0, max=100)),
850850
('lang', StringProperty()),
851851
('external_references', ListProperty(ExternalReference)),
852852
('object_marking_refs', ListProperty(ReferenceProperty(valid_types='marking-definition', spec_version='2.1'))),

0 commit comments

Comments
 (0)