Add a way to set arbitrary data accessible by all tasks. Use it to allow autologin for testing multiple instances more easily.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3689 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
00c1ec660e
commit
84a3d7348d
@ -196,8 +196,9 @@ function getPermissionsForUser(userName) {
|
|||||||
function query(headers) {
|
function query(headers) {
|
||||||
var session = getCookies(headers).session;
|
var session = getCookies(headers).session;
|
||||||
var entry;
|
var entry;
|
||||||
if (entry = readSession(session)) {
|
var autologin = tildefriends.args.autologin;
|
||||||
return {session: entry, permissions: getPermissions(session)};
|
if (entry = autologin ? {name: autologin} : readSession(session)) {
|
||||||
|
return {session: entry, permissions: autologin ? getPermissionsForUser(autologin) : getPermissions(session)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,6 +306,7 @@ typedef struct tf_run_args_t {
|
|||||||
const char* db_path;
|
const char* db_path;
|
||||||
const char* secrets_path;
|
const char* secrets_path;
|
||||||
int count;
|
int count;
|
||||||
|
const char* args;
|
||||||
bool help;
|
bool help;
|
||||||
} tf_run_args_t;
|
} tf_run_args_t;
|
||||||
|
|
||||||
@ -324,6 +325,7 @@ static int _tf_run_task(const tf_run_args_t* args, int index)
|
|||||||
tf_task_set_ssb_port(task, args->ssb_port ? args->ssb_port + index : 0);
|
tf_task_set_ssb_port(task, args->ssb_port ? args->ssb_port + index : 0);
|
||||||
tf_task_set_http_port(task, args->http_port ? args->http_port + index : 0);
|
tf_task_set_http_port(task, args->http_port ? args->http_port + index : 0);
|
||||||
tf_task_set_https_port(task, args->https_port ? args->https_port + index : 0);
|
tf_task_set_https_port(task, args->https_port ? args->https_port + index : 0);
|
||||||
|
tf_task_set_args(task, args->args);
|
||||||
const char* db_path = args->db_path;
|
const char* db_path = args->db_path;
|
||||||
const char* secrets_path = args->secrets_path;
|
const char* secrets_path = args->secrets_path;
|
||||||
char db_path_buffer[256];
|
char db_path_buffer[256];
|
||||||
@ -363,6 +365,7 @@ static int _tf_command_run(const char* file, int argc, char* argv[])
|
|||||||
{ "db-path", 'd', offsetof(tf_run_args_t, db_path), NULL, XOPT_TYPE_STRING, NULL, "Sqlite database path (default: db.sqlite)." },
|
{ "db-path", 'd', offsetof(tf_run_args_t, db_path), NULL, XOPT_TYPE_STRING, NULL, "Sqlite database path (default: db.sqlite)." },
|
||||||
{ "secrets-path", 'i', offsetof(tf_run_args_t, secrets_path), NULL, XOPT_TYPE_STRING, NULL, "Secrets/identity path." },
|
{ "secrets-path", 'i', offsetof(tf_run_args_t, secrets_path), NULL, XOPT_TYPE_STRING, NULL, "Secrets/identity path." },
|
||||||
{ "count", 'n', offsetof(tf_run_args_t, count), NULL, XOPT_TYPE_INT, NULL, "Number of instances to run." },
|
{ "count", 'n', offsetof(tf_run_args_t, count), NULL, XOPT_TYPE_INT, NULL, "Number of instances to run." },
|
||||||
|
{ "args", 'a', offsetof(tf_run_args_t, args), NULL, XOPT_TYPE_STRING, NULL, "Arguments of the form key=value,foo=bar,verbose=true." },
|
||||||
{ "help", 'h', offsetof(tf_run_args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." },
|
{ "help", 'h', offsetof(tf_run_args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." },
|
||||||
XOPT_NULLOPTION,
|
XOPT_NULLOPTION,
|
||||||
};
|
};
|
||||||
|
35
src/task.c
35
src/task.c
@ -107,6 +107,7 @@ typedef struct _tf_task_t {
|
|||||||
int _https_port;
|
int _https_port;
|
||||||
char _db_path[256];
|
char _db_path[256];
|
||||||
char _secrets_path[256];
|
char _secrets_path[256];
|
||||||
|
const char* _args;
|
||||||
} tf_task_t;
|
} tf_task_t;
|
||||||
|
|
||||||
typedef struct _export_record_t {
|
typedef struct _export_record_t {
|
||||||
@ -1260,6 +1261,35 @@ void tf_task_activate(tf_task_t* task)
|
|||||||
JS_SetPropertyStr(context, tildefriends, "ssb_port", JS_NewInt32(context, task->_ssb_port));
|
JS_SetPropertyStr(context, tildefriends, "ssb_port", JS_NewInt32(context, task->_ssb_port));
|
||||||
JS_SetPropertyStr(context, tildefriends, "http_port", JS_NewInt32(context, task->_http_port));
|
JS_SetPropertyStr(context, tildefriends, "http_port", JS_NewInt32(context, task->_http_port));
|
||||||
JS_SetPropertyStr(context, tildefriends, "https_port", JS_NewInt32(context, task->_https_port));
|
JS_SetPropertyStr(context, tildefriends, "https_port", JS_NewInt32(context, task->_https_port));
|
||||||
|
JSValue args = JS_NewObject(context);
|
||||||
|
JS_SetPropertyStr(context, tildefriends, "args", args);
|
||||||
|
if (task->_args)
|
||||||
|
{
|
||||||
|
char* saveptr = NULL;
|
||||||
|
char* copy = strdup(task->_args);
|
||||||
|
char* start = copy;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
char* assignment = strtok_r(start, ",", &saveptr);
|
||||||
|
start = NULL;
|
||||||
|
if (!assignment)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
char* equals = strchr(assignment, '=');
|
||||||
|
if (equals)
|
||||||
|
{
|
||||||
|
*equals = '\0';
|
||||||
|
JS_SetPropertyStr(context, args, assignment, JS_NewString(context, equals + 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Assignment missing '=': %s.\n", assignment);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(copy);
|
||||||
|
}
|
||||||
JS_SetPropertyStr(context, global, "tildefriends", tildefriends);
|
JS_SetPropertyStr(context, global, "tildefriends", tildefriends);
|
||||||
|
|
||||||
if (task->_trusted)
|
if (task->_trusted)
|
||||||
@ -1463,6 +1493,11 @@ void tf_task_set_secrets_path(tf_task_t* task, const char* secrets_path)
|
|||||||
snprintf(task->_secrets_path, sizeof(task->_secrets_path), "%s", secrets_path);
|
snprintf(task->_secrets_path, sizeof(task->_secrets_path), "%s", secrets_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tf_task_set_args(tf_task_t* task, const char* args)
|
||||||
|
{
|
||||||
|
task->_args = args;
|
||||||
|
}
|
||||||
|
|
||||||
const char* tf_task_get_name(tf_task_t* task)
|
const char* tf_task_get_name(tf_task_t* task)
|
||||||
{
|
{
|
||||||
return task->_scriptName;
|
return task->_scriptName;
|
||||||
|
@ -40,6 +40,7 @@ void tf_task_set_http_port(tf_task_t* task, int port);
|
|||||||
void tf_task_set_https_port(tf_task_t* task, int port);
|
void tf_task_set_https_port(tf_task_t* task, int port);
|
||||||
void tf_task_set_db_path(tf_task_t* task, const char* path);
|
void tf_task_set_db_path(tf_task_t* task, const char* path);
|
||||||
void tf_task_set_secrets_path(tf_task_t* task, const char* path);
|
void tf_task_set_secrets_path(tf_task_t* task, const char* path);
|
||||||
|
void tf_task_set_args(tf_task_t* task, const char* args);
|
||||||
void tf_task_activate(tf_task_t* task);
|
void tf_task_activate(tf_task_t* task);
|
||||||
void tf_task_run(tf_task_t* task);
|
void tf_task_run(tf_task_t* task);
|
||||||
int tf_task_execute(tf_task_t* task, const char* file);
|
int tf_task_execute(tf_task_t* task, const char* file);
|
||||||
|
Loading…
Reference in New Issue
Block a user