///|
fn demo_input() -> String {
"build: \u{1b}[32mPASS\u{1b}[0m\n" +
"artifact: \u{1b}]8;;javascript:alert(1)\u{1b}\\click me\u{1b}]8;;\u{1b}\\\n" +
"clipboard: \u{1b}]52;c;SGFja2VkIQ==\u{7}\n" +
"rewrite: trusted\rforged\n" +
"source: safe.mbt\u{202e}txt.exe\n"
}
///|
fn load_input(config : @cli.Config) -> String raise {
if config.command == Demo {
demo_input()
} else {
guard config.input is Some(input) else { fail("missing input text") }
input
}
}
///|
fn execute() -> Unit raise {
let argv = @env.args()
let config = match @cli.parse_config(argv[1:]) {
Ok(config) => config
Err(message) => fail("\{message}\n\n\{@cli.usage()}")
}
if config.command == Help {
println(@cli.usage())
return
}
let input = load_input(config)
let result = @tp.audit(input, policy=config.policy)
let rendered = @cli.render_source(config, input, result)
match config.output {
Some(_) =>
fail(
"--output requires the optional file-system adapter; print to stdout in this build",
)
None => println(rendered)
}
if config.command != Clean && config.command != Demo && result.failed {
fail("audit threshold reached")
}
}
///|
fn main {
try! execute()
}