[Bug] Create Rule CLI Crashes on Required Arg (#3127)
This commit is contained in:
@@ -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', ''):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user