From d8fb956c1420e1214b3be422f5ff59185425f7a6 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Thu, 1 Dec 2022 00:26:51 +0000 Subject: [PATCH] A slightly dynamic administration page. As always, uncertain if this is a good direction. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4062 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- core/core.js | 22 ++++++++++++++++++++++ core/ssb.js | 7 ++++++- src/main.c | 26 +++++++++++++++----------- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/core/core.js b/core/core.js index c5a5e27d..1fc3173d 100644 --- a/core/core.js +++ b/core/core.js @@ -6,6 +6,19 @@ var gProcessIndex = 0; var gProcesses = {}; var gStatsTimer = false; +const k_global_settings = { + index: { + type: 'string', + default_value: '/~core/apps/', + description: 'Default path.', + }, + room: { + type: 'boolean', + default_value: true, + description: 'Whether this instance should behave as a room.', + }, +}; + var gGlobalSettings = { index: "/~core/apps/", }; @@ -240,6 +253,15 @@ async function getProcessBlob(blobId, key, options) { } }; if (process.credentials?.permissions?.administration) { + imports.core.globalSettingsDescriptions = function() { + let settings = Object.assign({}, k_global_settings); + for (let [key, value] of Object.entries(gGlobalSettings)) { + if (settings[key]) { + settings[key].value = value; + } + } + return settings; + }; imports.core.globalSettingsGet = function(key) { return gGlobalSettings[key]; }; diff --git a/core/ssb.js b/core/ssb.js index e84b6fb7..118d49e2 100644 --- a/core/ssb.js +++ b/core/ssb.js @@ -4,6 +4,7 @@ var g_database = new Database('core'); let g_attendants = {}; const k_use_create_history_stream = false; const k_blobs_concurrent_target = 8; +const k_settings = JSON.parse(g_database.get('settings') ?? '{}'); function following(db, id) { var o = db.get(id + ":following"); @@ -195,7 +196,11 @@ ssb.addRpc(['blobs', 'createWants'], function(request) { }); ssb.addRpc(['tunnel', 'isRoom'], function(request) { - request.send_json({"name": "tilde friends tunnel", "membership": false, "features": ["tunnel", "room1"]}); + if (k_settings.room) { + request.send_json({"name": "tilde friends tunnel", "membership": false, "features": ["tunnel", "room1"]}); + } else { + request.send_json(false); + } }); function notify_attendant_changed(id, type) { diff --git a/src/main.c b/src/main.c index f3e4fc22..8da6e526 100644 --- a/src/main.c +++ b/src/main.c @@ -250,17 +250,19 @@ xopt_help: static int _tf_command_export(const char* file, int argc, char* argv[]) { typedef struct args_t { + const char* user; const char* db_path; bool help; } args_t; xoptOption options[] = { { "db-path", 'd', offsetof(args_t, db_path), NULL, XOPT_TYPE_STRING, NULL, "Sqlite database path (default: db.sqlite)." }, + { "user", 'u', offsetof(args_t, user), NULL, XOPT_TYPE_STRING, NULL, "User into whose apps will be exported (default: \"cory\")." }, { "help", 'h', offsetof(args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." }, XOPT_NULLOPTION, }; - args_t args = { 0 }; + args_t args = { .user = "cory" }; const char** extras = NULL; int extra_count = 0; const char *err = NULL; @@ -292,19 +294,21 @@ static int _tf_command_export(const char* file, int argc, char* argv[]) else { const char* k_export[] = { - "/~cory/admin", - "/~cory/api", - "/~cory/apps", - "/~cory/db", - "/~cory/docs", - "/~cory/follow", - "/~cory/ssblit", - "/~cory/todo", + "admin", + "api", + "apps", + "db", + "docs", + "follow", + "ssblit", + "todo", }; for (int i = 0; i < (int)_countof(k_export); i++) { - printf("Exporting %s...\n", k_export[i]); - tf_ssb_export(ssb, k_export[i]); + char buffer[256]; + snprintf(buffer, sizeof(buffer), "/~%s/%s", args.user, k_export[i]); + printf("Exporting %s...\n", buffer); + tf_ssb_export(ssb, buffer); } } tf_ssb_destroy(ssb);