Skip to content

Commit

Permalink
fix: [stix2 import] Fixed the converters composition
Browse files Browse the repository at this point in the history
- The `getattr` statements were actually making
  their default argument execute itself and
  re-initialising each converter attribute as if
  it was there first call and the attribute did
  not exist
  • Loading branch information
chrisr3d committed Feb 16, 2024
1 parent 16c5021 commit 11c1ce1
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 61 deletions.
19 changes: 2 additions & 17 deletions misp_stix_converter/stix2misp/external_stix2_to_misp.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,18 +159,15 @@ def cluster_distribution(self) -> dict:

@property
def observable_object_parser(self) -> STIX2ObservableObjectConverter:
return getattr(
self, '_observable_objects_parser',
if not hasattr(self, '_observable_object_parser'):
self._set_observable_object_parser()
)
return self._observable_object_parser

def _set_attack_pattern_parser(self) -> ExternalSTIX2AttackPatternConverter:
self._attack_pattern_parser = ExternalSTIX2AttackPatternConverter(self)
return self._attack_pattern_parser

def _set_campaign_parser(self) -> ExternalSTIX2CampaignConverter:
self._campaign_parser = ExternalSTIX2CampaignConverter(self)
return self._campaign_parser

def _set_cluster_distribution(
self, distribution: int, sharing_group_id: Union[int, None]):
Expand All @@ -181,47 +178,36 @@ def _set_cluster_distribution(

def _set_course_of_action_parser(self) -> ExternalSTIX2CourseOfActionConverter:
self._course_of_action_parser = ExternalSTIX2CourseOfActionConverter(self)
return self._course_of_action_parser

def _set_identity_parser(self) -> ExternalSTIX2IdentityConverter:
self._identity_parser = ExternalSTIX2IdentityConverter(self)
return self._identity_parser

def _set_indicator_parser(self) -> ExternalSTIX2IndicatorConverter:
self._indicator_parser = ExternalSTIX2IndicatorConverter(self)
return self._indicator_parser

def _set_intrusion_set_parser(self) -> ExternalSTIX2IntrusionSetConverter:
self._intrusion_set_parser = ExternalSTIX2IntrusionSetConverter(self)
return self._intrusion_set_parser

def _set_location_parser(self) -> ExternalSTIX2LocationConverter:
self._location_parser = ExternalSTIX2LocationConverter(self)
return self._location_parser

def _set_malware_analysis_parser(self) -> ExternalSTIX2MalwareAnalysisConverter:
self._malware_analysis_parser = ExternalSTIX2MalwareAnalysisConverter(self)
return self._malware_analysis_parser

def _set_malware_parser(self) -> ExternalSTIX2MalwareConverter:
self._malware_parser = ExternalSTIX2MalwareConverter(self)
return self._malware_parser

def _set_observable_object_parser(self) -> STIX2ObservableObjectConverter:
self._observable_object_parser = STIX2ObservableObjectConverter(self)
return self._observable_object_parser

def _set_threat_actor_parser(self) -> ExternalSTIX2ThreatActorConverter:
self._threat_actor_parser = ExternalSTIX2ThreatActorConverter(self)
return self._threat_actor_parser

def _set_tool_parser(self) -> ExternalSTIX2ToolConverter:
self._tool_parser = ExternalSTIX2ToolConverter(self)
return self._tool_parser

def _set_vulnerability_parser(self) -> ExternalSTIX2VulnerabilityConverter:
self._vulnerability_parser = ExternalSTIX2VulnerabilityConverter(self)
return self._vulnerability_parser

############################################################################
# STIX OBJECTS LOADING METHODS #
Expand Down Expand Up @@ -1733,7 +1719,6 @@ def _populate_object_attributes_from_observable(
}
)


################################################################################
# MISP DATA STRUCTURES CREATION FUNCTIONS. #
################################################################################
Expand Down
24 changes: 6 additions & 18 deletions misp_stix_converter/stix2misp/internal_stix2_to_misp.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,15 @@ def __init__(self, distribution: Optional[int] = 0,

@property
def custom_object_parser(self) -> STIX2CustomObjectConverter:
return getattr(
self, '_custom_object_parser', self._set_custom_object_parser()
)
if not hasattr(self, '_custom_object_parser'):
self._set_custom_object_parser()
return self._custom_object_parser

@property
def note_parser(self) -> STIX2NoteConverter:
return getattr(self, '_note_parser', self._set_note_parser())
if not hasattr(self, '_note_parser'):
self._set_note_parser()
return self._note_parser

@property
def observed_data_parser(self) -> InternalSTIX2ObservedDataConverter:
Expand All @@ -66,63 +68,49 @@ def observed_data_parser(self) -> InternalSTIX2ObservedDataConverter:

def _set_attack_pattern_parser(self) -> InternalSTIX2AttackPatternConverter:
self._attack_pattern_parser = InternalSTIX2AttackPatternConverter(self)
return self._attack_pattern_parser

def _set_campaign_parser(self) -> InternalSTIX2CampaignConverter:
self._campaign_parser = InternalSTIX2CampaignConverter(self)
return self._campaign_parser

def _set_course_of_action_parser(self) -> InternalSTIX2CourseOfActionConverter:
self._course_of_action_parser = InternalSTIX2CourseOfActionConverter(self)
return self._course_of_action_parser

def _set_custom_object_parser(self) -> STIX2CustomObjectConverter:
self._custom_object_parser = STIX2CustomObjectConverter(self)
return self._custom_object_parser

def _set_identity_parser(self) -> InternalSTIX2IdentityConverter:
self._identity_parser = InternalSTIX2IdentityConverter(self)
return self._identity_parser

def _set_indicator_parser(self) -> InternalSTIX2IndicatorConverter:
self._indicator_parser = InternalSTIX2IndicatorConverter(self)
return self._indicator_parser

def _set_intrusion_set_parser(self) -> InternalSTIX2IntrusionSetConverter:
self._intrusion_set_parser = InternalSTIX2IntrusionSetConverter(self)
return self._intrusion_set_parser

def _set_location_parser(self) -> InternalSTIX2LocationConverter:
self._location_parser = InternalSTIX2LocationConverter(self)
return self._location_parser

def _set_malware_analysis_parser(self) -> InternalSTIX2MalwareAnalysisConverter:
self._malware_analysis_parser = InternalSTIX2MalwareAnalysisConverter(self)
return self._malware_analysis_parser

def _set_malware_parser(self) -> InternalSTIX2MalwareConverter:
self._malware_parser = InternalSTIX2MalwareConverter(self)
return self._malware_parser

def _set_note_parser(self) -> STIX2NoteConverter:
self._note_parser = STIX2NoteConverter(self)
return self._note_parser

def _set_observed_data_parser(self) -> InternalSTIX2ObservedDataConverter:
self._observed_data_parser = InternalSTIX2ObservedDataConverter(self)
return self._observed_data_parser

def _set_threat_actor_parser(self) -> InternalSTIX2ThreatActorConverter:
self._threat_actor_parser = InternalSTIX2ThreatActorConverter(self)
return self._threat_actor_parser

def _set_tool_parser(self) -> InternalSTIX2ToolConverter:
self._tool_parser = InternalSTIX2ToolConverter(self)
return self._tool_parser

def _set_vulnerability_parser(self) -> InternalSTIX2VulnerabilityConverter:
self._vulnerability_parser = InternalSTIX2VulnerabilityConverter(self)
return self._vulnerability_parser

############################################################################
# STIX OBJECTS LOADING METHODS #
Expand Down
60 changes: 34 additions & 26 deletions misp_stix_converter/stix2misp/stix2_to_misp.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,55 +299,61 @@ def parse_stix_content(

@property
def attack_pattern_parser(self) -> _ATTACK_PATTERN_PARSER_TYPING:
return getattr(
self, '_attack_pattern_parser', self._set_attack_pattern_parser()
)
if not hasattr(self, '_attack_pattern_parser'):
self._set_attack_pattern_parser()
return self._attack_pattern_parser

@property
def campaign_parser(self) -> _CAMPAIGN_PARSER_TYPING:
return getattr(
self, '_campaign_parser', self._set_campaign_parser()
)
if not hasattr(self, '_campaign_parser'):
self._set_campaign_parser()
return self._campaign_parser

@property
def course_of_action_parser(self) -> _COURSE_OF_ACTION_PARSER_TYPING:
return getattr(
self, '_course_of_action_parser',
if not hasattr(self, '_course_of_action_parser'):
self._set_course_of_action_parser()
)
return self._course_of_action_parser

@property
def generic_info_field(self) -> str:
return f'STIX {self.stix_version} Bundle imported with the MISP-STIX import feature.'

@property
def identity_parser(self) -> _IDENTITY_PARSER_TYPING:
return getattr(self, '_identity_parser', self._set_identity_parser())
if not hasattr(self, '_identity_parser'):
self._set_identity_parser()
return self._identity_parser

@property
def indicator_parser(self) -> _INDICATOR_PARSER_TYPING:
return getattr(self, '_indicator_parser', self._set_indicator_parser())
if not hasattr(self, '_indicator_parser'):
self._set_indicator_parser()
return self._indicator_parser

@property
def intrusion_set_parser(self) -> _INTRUSION_SET_PARSER_TYPING:
return getattr(
self, '_intrusion_set_parser', self._set_intrusion_set_parser()
)
if not hasattr(self, '_intrusion_set_parser'):
self._set_intrusion_set_parser()
return self._intrusion_set_parser

@property
def location_parser(self) -> _LOCATION_PARSER_TYPING:
return getattr(self, '_location_parser', self._set_location_parser())
if not hasattr(self, '_location_parser'):
self._set_location_parser()
return self._location_parser

@property
def malware_analysis_parser(self) -> _MALWARE_ANALYSIS_PARSER_TYPING:
return getattr(
self, '_malware_analysis_parser',
if not hasattr(self, '_malware_analysis_parser'):
self._set_malware_analysis_parser()
)
return self._malware_analysis_parser

@property
def malware_parser(self) -> _MALWARE_PARSER_TYPING:
return getattr(self, '_malware_parser', self._set_malware_parser())
if not hasattr(self, '_malware_parser'):
self._set_malware_parser()
return self._malware_parser

@property
def misp_event(self) -> MISPEvent:
Expand All @@ -369,19 +375,21 @@ def stix_version(self) -> str:

@property
def threat_actor_parser(self) -> _THREAT_ACTOR_PARSER_TYPING:
return getattr(
self, '_threat_actor_parser', self._set_threat_actor_parser()
)
if not hasattr(self, '_threat_actor_parser'):
self._set_threat_actor_parser()
return self._threat_actor_parser

@property
def tool_parser(self) -> _TOOL_PARSER_TYPING:
return getattr(self, '_tool_parser', self._set_tool_parser())
if not hasattr(self, '_tool_parser'):
self._set_tool_parser()
return self._tool_parser

@property
def vulnerability_parser(self) -> _VULNERABILITY_PARSER_TYPING:
return getattr(
self, '_vulnerability_parser', self._set_vulnerability_parser()
)
if not hasattr(self, '_vulnerability_parser'):
self._set_vulnerability_parser()
return self._vulnerability_parser

############################################################################
# STIX OBJECTS LOADING METHODS #
Expand Down

0 comments on commit 11c1ce1

Please sign in to comment.