docs/test: add tests and documentation for competition-aware patterns and commands
This commit is contained in:
@@ -27,17 +27,38 @@ def greet(name):
|
||||
# {{{ set_flag_format
|
||||
# Sets the flag format for the current competition in config.toml
|
||||
@basic_group.command(name="set-flag-format")
|
||||
@click.argument("pattern")
|
||||
def set_flag_format(pattern: str):
|
||||
"""Set the flag regex format for the active competition."""
|
||||
from ctf.utils import load_config, write_config
|
||||
@click.argument("pattern", required=False)
|
||||
@click.option("-o", "--original", help="Suggest regex patterns from an original flag example.")
|
||||
def set_flag_format(pattern: str, original: str):
|
||||
"""Set the flag regex format for the active competition.
|
||||
|
||||
You can either specify the regex PATTERN directly, or provide an example flag
|
||||
via the -o/--original option to generate and select from a list of suggested patterns.
|
||||
"""
|
||||
from ctf.utils import load_config, write_config, suggest_patterns
|
||||
|
||||
if pattern is None and original is None:
|
||||
raise click.UsageError("Either PATTERN positional argument or --original/-o option must be specified.")
|
||||
if pattern is not None and original is not None:
|
||||
raise click.UsageError("Cannot specify both PATTERN and --original/-o option.")
|
||||
|
||||
config_path = "/home/venus/code/ctf/config.toml"
|
||||
config = load_config(config_path)
|
||||
|
||||
if "Competition" not in config:
|
||||
config["Competition"] = {}
|
||||
|
||||
if original:
|
||||
if not original.strip():
|
||||
raise click.UsageError("Original flag cannot be empty or whitespace only.")
|
||||
patterns = suggest_patterns(original)
|
||||
click.echo("Suggested regex patterns:")
|
||||
for i, pat in enumerate(patterns, 1):
|
||||
click.echo(f" {i}. {pat}")
|
||||
|
||||
val = click.prompt("Select a pattern index", type=click.IntRange(1, len(patterns)))
|
||||
pattern = patterns[val - 1]
|
||||
|
||||
config["Competition"]["flag_format"] = pattern
|
||||
write_config(config, config_path)
|
||||
click.echo(f"Flag format set to: {pattern}")
|
||||
|
||||
Reference in New Issue
Block a user