[Bug] Create Rule CLI Crashes on Required Arg (#3127)

This commit is contained in:
Mika Ayenson
2023-09-28 19:28:13 +00:00
committed by GitHub
parent 4828ae07df
commit e4b66c23dc
2 changed files with 12 additions and 12 deletions
+4 -4
View File
@@ -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', ''):
+8 -8
View File
@@ -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 schema_prompt(name, value=None, required=False, **options):
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 schema_prompt(name, value=None, required=False, **options):
result = None
if not result:
if required:
if is_required:
value = None
continue
else:
@@ -187,7 +187,7 @@ def schema_prompt(name, value=None, required=False, **options):
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 schema_prompt(name, value=None, required=False, **options):
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