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
This commit is contained in:
parent
b1ff215ad7
commit
d8fb956c14
22
core/core.js
22
core/core.js
@ -6,6 +6,19 @@ var gProcessIndex = 0;
|
|||||||
var gProcesses = {};
|
var gProcesses = {};
|
||||||
var gStatsTimer = false;
|
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 = {
|
var gGlobalSettings = {
|
||||||
index: "/~core/apps/",
|
index: "/~core/apps/",
|
||||||
};
|
};
|
||||||
@ -240,6 +253,15 @@ async function getProcessBlob(blobId, key, options) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (process.credentials?.permissions?.administration) {
|
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) {
|
imports.core.globalSettingsGet = function(key) {
|
||||||
return gGlobalSettings[key];
|
return gGlobalSettings[key];
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,7 @@ var g_database = new Database('core');
|
|||||||
let g_attendants = {};
|
let g_attendants = {};
|
||||||
const k_use_create_history_stream = false;
|
const k_use_create_history_stream = false;
|
||||||
const k_blobs_concurrent_target = 8;
|
const k_blobs_concurrent_target = 8;
|
||||||
|
const k_settings = JSON.parse(g_database.get('settings') ?? '{}');
|
||||||
|
|
||||||
function following(db, id) {
|
function following(db, id) {
|
||||||
var o = db.get(id + ":following");
|
var o = db.get(id + ":following");
|
||||||
@ -195,7 +196,11 @@ ssb.addRpc(['blobs', 'createWants'], function(request) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ssb.addRpc(['tunnel', 'isRoom'], 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) {
|
function notify_attendant_changed(id, type) {
|
||||||
|
26
src/main.c
26
src/main.c
@ -250,17 +250,19 @@ xopt_help:
|
|||||||
static int _tf_command_export(const char* file, int argc, char* argv[])
|
static int _tf_command_export(const char* file, int argc, char* argv[])
|
||||||
{
|
{
|
||||||
typedef struct args_t {
|
typedef struct args_t {
|
||||||
|
const char* user;
|
||||||
const char* db_path;
|
const char* db_path;
|
||||||
bool help;
|
bool help;
|
||||||
} args_t;
|
} args_t;
|
||||||
|
|
||||||
xoptOption options[] = {
|
xoptOption options[] = {
|
||||||
{ "db-path", 'd', offsetof(args_t, db_path), NULL, XOPT_TYPE_STRING, NULL, "Sqlite database path (default: db.sqlite)." },
|
{ "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." },
|
{ "help", 'h', offsetof(args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." },
|
||||||
XOPT_NULLOPTION,
|
XOPT_NULLOPTION,
|
||||||
};
|
};
|
||||||
|
|
||||||
args_t args = { 0 };
|
args_t args = { .user = "cory" };
|
||||||
const char** extras = NULL;
|
const char** extras = NULL;
|
||||||
int extra_count = 0;
|
int extra_count = 0;
|
||||||
const char *err = NULL;
|
const char *err = NULL;
|
||||||
@ -292,19 +294,21 @@ static int _tf_command_export(const char* file, int argc, char* argv[])
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
const char* k_export[] = {
|
const char* k_export[] = {
|
||||||
"/~cory/admin",
|
"admin",
|
||||||
"/~cory/api",
|
"api",
|
||||||
"/~cory/apps",
|
"apps",
|
||||||
"/~cory/db",
|
"db",
|
||||||
"/~cory/docs",
|
"docs",
|
||||||
"/~cory/follow",
|
"follow",
|
||||||
"/~cory/ssblit",
|
"ssblit",
|
||||||
"/~cory/todo",
|
"todo",
|
||||||
};
|
};
|
||||||
for (int i = 0; i < (int)_countof(k_export); i++)
|
for (int i = 0; i < (int)_countof(k_export); i++)
|
||||||
{
|
{
|
||||||
printf("Exporting %s...\n", k_export[i]);
|
char buffer[256];
|
||||||
tf_ssb_export(ssb, k_export[i]);
|
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);
|
tf_ssb_destroy(ssb);
|
||||||
|
Loading…
Reference in New Issue
Block a user