64 lines
2.4 KiB
Plaintext
64 lines
2.4 KiB
Plaintext
CLI(Request& context)
|
|
{
|
|
context.header["Content-Type"] = "text/plain; charset=utf-8";
|
|
DValue input = cli_input(context);
|
|
String action = first(input["action"].to_string(), "ping");
|
|
if(action == "ping")
|
|
{
|
|
print("uce-unit-cli: ok\n");
|
|
print("script=", context.params["SCRIPT_FILENAME"], "\n");
|
|
return;
|
|
}
|
|
if(action == "echo")
|
|
{
|
|
print(input["message"].to_string(), "\n");
|
|
return;
|
|
}
|
|
if(action == "arg")
|
|
{
|
|
print(cli_arg(context, "message", "fallback"), "\n");
|
|
print(cli_arg(context, "missing", "fallback"), "\n");
|
|
return;
|
|
}
|
|
if(action == "task_repeat_unbounded")
|
|
{
|
|
String marker = "/tmp/uce-task-repeat-unbounded.txt";
|
|
file_unlink(marker);
|
|
pid_t pid = task_repeat("uce-task-repeat-unbounded", 0.05, [marker]() { file_put_contents(marker, "ran"); }, 0);
|
|
usleep(200000);
|
|
bool ran = file_get_contents(marker) == "ran";
|
|
if(pid > 0) task_kill(pid, 15);
|
|
file_unlink(marker);
|
|
print(pid > 0 && ran ? "task repeat unbounded ok\n" : "task repeat unbounded failed\n");
|
|
return;
|
|
}
|
|
if(action == "mysql_unsigned_params")
|
|
{
|
|
MySQL db;
|
|
StringMap params; params["limit"] = "1";
|
|
String parsed = db.parse_query_parameters("SELECT 7 LIMIT :limit!", params);
|
|
StringMap comparison; comparison["left"] = "7"; comparison["right"] = "8";
|
|
String inequality = db.parse_query_parameters("SELECT :left!=:right", comparison);
|
|
StringMap empty_name; empty_name[""] = "1";
|
|
db.parameter_error = false; db.statement_info = "";
|
|
db.parse_query_parameters("SELECT 1 LIMIT :!", empty_name);
|
|
bool empty_rejected = db.parameter_error;
|
|
StringMap invalid; invalid["limit"] = "1;SELECT 9";
|
|
db.parameter_error = false;
|
|
db.statement_info = "";
|
|
db.parse_query_parameters("SELECT 1 LIMIT :limit!", invalid);
|
|
bool ok = parsed.find("LIMIT 1") != String::npos && inequality.find("'7'!='8'") != String::npos && empty_rejected && db.parameter_error && db.statement_info.find("must contain only decimal digits") != String::npos;
|
|
print(ok ? "mysql unsigned params ok\n" : "mysql unsigned params failed: parsed=" + parsed + ", parameter_error=" + (db.parameter_error ? "1" : "0") + ", statement=" + db.statement_info + "\n");
|
|
return;
|
|
}
|
|
context.set_status(400, "CLI Error");
|
|
print("unknown cli action: ", action, "\n");
|
|
}
|
|
|
|
RENDER(Request& context)
|
|
{
|
|
context.set_status(404, "Not Found");
|
|
context.header["Content-Type"] = "text/plain; charset=utf-8";
|
|
print("This unit is intended for local CLI socket invocation.\n");
|
|
}
|