diff --git a/detection_rules/cli_utils.py b/detection_rules/cli_utils.py index bc26007d7e9..8ec2ce9287e 100644 --- a/detection_rules/cli_utils.py +++ b/detection_rules/cli_utils.py @@ -140,9 +140,9 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos threat_map = [] while click.confirm('add mitre tactic?'): - tactic = schema_prompt('mitre tactic name', type='string', enum=tactics, required=True) + tactic = schema_prompt('mitre tactic name', type='string', enum=tactics, is_required=True) technique_ids = schema_prompt(f'technique or sub-technique IDs for {tactic}', type='array', - required=False, enum=list(matrix[tactic])) or [] + is_required=False, enum=list(matrix[tactic])) or [] try: threat_map.append(build_threat_map_entry(tactic, *technique_ids)) @@ -158,7 +158,7 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos continue if name == 'threshold': - contents[name] = {n: schema_prompt(f'threshold {n}', required=n in options['required'], **opts.copy()) + contents[name] = {n: schema_prompt(f'threshold {n}', is_required=n in options['required'], **opts.copy()) for n, opts in options['properties'].items()} continue @@ -166,7 +166,7 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos contents[name] = schema_prompt(name, value=kwargs.pop(name)) continue - result = schema_prompt(name, required=name in required_fields, **options.copy()) + result = schema_prompt(name, is_required=name in required_fields, **options.copy()) if result: if name not in required_fields and result == options.get('default', ''): diff --git a/detection_rules/misc.py b/detection_rules/misc.py index bb0de69381d..e940f920316 100644 --- a/detection_rules/misc.py +++ b/detection_rules/misc.py @@ -115,7 +115,7 @@ def nest_from_dot(dots, value): return nested -def schema_prompt(name, value=None, required=False, **options): +def schema_prompt(name, value=None, is_required=False, **options): """Interactively prompt based on schema requirements.""" name = str(name) field_type = options.get('type') @@ -136,7 +136,7 @@ def schema_prompt(name, value=None, required=False, **options): if name == 'rule_id': default = str(uuid.uuid4()) - if len(enum) == 1 and required and field_type != "array": + if len(enum) == 1 and is_required and field_type != "array": return enum[0] def _check_type(_val): @@ -168,7 +168,7 @@ def _convert_type(_val): prompt = '{name}{default}{required}{multi}'.format( name=name, default=' [{}] ("n/a" to leave blank) '.format(default) if default else '', - required=' (required) ' if required else '', + required=' (required) ' if is_required else '', multi=' (multi, comma separated) ' if field_type == 'array' else '').strip() + ': ' while True: @@ -177,7 +177,7 @@ def _convert_type(_val): result = None if not result: - if required: + if is_required: value = None continue else: @@ -187,7 +187,7 @@ def _convert_type(_val): result_list = result.split(',') if not (min_item < len(result_list) < max_items): - if required: + if is_required: value = None break else: @@ -195,19 +195,19 @@ def _convert_type(_val): for value in result_list: if not _check_type(value): - if required: + if is_required: value = None break else: return [] - if required and value is None: + if is_required and value is None: continue else: return [_convert_type(r) for r in result_list] else: if _check_type(result): return _convert_type(result) - elif required: + elif is_required: value = None continue return