"use strict"; //! {"permissions": ["administration"]} terminal.print("Administration"); if (core.user.credentials.permissions && core.user.credentials.permissions.administration) { core.register("onInput", onInput); terminal.print("Welcome, administrator."); terminal.print("Usage:"); let kCommands = [ [ "set", "List all global settings.", ], [ ["set ", {class: "cyan", value: "key value"}], ["Set global setting key to value. Omit value to unset."], ], [ "permission list", "List all permissions." ], [ ["permission add ", {class: "cyan", value: "user action1 action2 ..."}], ["Grant permission for ", {class: "cyan", value: "action1"}, ", ", {class: "cyan", value: "action2"}, ", ", {class: "cyan", value: "..."}, " to ", {class: "cyan", value: "user"}, "."], ], [ ["permission remove ", {class: "cyan", value: "user action1 action2 ..."}], ["Revoke permission for ", {class: "cyan", value: "action1"}, ", ", {class: "cyan", value: "action2"}, ", ", {class: "cyan", value: "..."}, " from ", {class: "cyan", value: "user"}, "."], ], [ "statistics", "List statistics." ], ]; for (var i = 0; i < kCommands.length; i++) { terminal.print({class: "yellow", value: kCommands[i][0]}); terminal.print({style: "display: block; margin-left: 2em", value: kCommands[i][1]}); } } else { terminal.print("You are not an administrator."); } var kSimpleSettings = [ 'httpPort', 'httpsPort', 'index', 'google-signin-client_id', ]; function printSettings(settings) { terminal.print("Current settings:"); for (let i = 0; i < kSimpleSettings.length; i++) { terminal.print(" ", {class: "magenta", value: kSimpleSettings[i]}, " = ", {class: "yellow", value: settings[kSimpleSettings[i]]}); } } function printPermissions(settings) { terminal.print("Current permissions:"); let permissions = settings.permissions || {}; for (let entry in permissions) { terminal.print(" ", {class: "magenta", value: entry}, ": ", {class: "yellow", value: permissions[entry].join(" ")}); } } function onInput(input) { try { let match; if (input == "set") { administration.getGlobalSettings().then(printSettings); } else if (input == "statistics") { administration.getStatistics().then(function(s) { for (var i in s) { terminal.print(" ".repeat(16 - s[i].toString().length), s[i].toString(), " ", i); } }); } else if (match = /^\s*set\s+(\S+)(?:\s+(.*))?/.exec(input)) { var key = match[1]; var value = match[2]; administration.getGlobalSettings().then(function(settings) { if (kSimpleSettings.indexOf(key) != -1) { if (value) { settings[key] = value; } else { delete settings[key]; } administration.setGlobalSettings(settings).then(function() { administration.getGlobalSettings().then(printSettings); }).catch(function(error) { terminal.print("Error updating settings: " + JSON.stringify(error)); }); } else { terminal.print("Unknown setting: " + key); } }); } else if (match = /^\s*permission\s+(\w+)(?:\s+(.*))?/.exec(input)) { var command = match[1]; var remaining = (match[2] || "").split(/\s+/); if (command == "list") { administration.getGlobalSettings().then(printPermissions); } else if (command == "add") { var user = remaining[0]; administration.getGlobalSettings().then(function(settings) { settings.permissions = settings.permissions || {}; settings.permissions[user] = settings.permissions[user] || []; for (var i = 1; i < remaining.length; i++) { if (settings.permissions[user].indexOf(remaining[i]) == -1) { settings.permissions[user].push(remaining[i]); } } settings.permissions[user].sort(); administration.setGlobalSettings(settings).then(function() { administration.getGlobalSettings().then(printPermissions); }).catch(function(error) { terminal.print("Error updating permissions: " + JSON.stringify(error)); }); }); } else if (command == "remove") { var user = remaining[0]; administration.getGlobalSettings().then(function(settings) { if (settings.permissions && settings.permissions[user]) { for (var i = 1; i < remaining.length; i++) { settings.permissions[user] = settings.permissions[user].filter(x => x != remaining[i]); } if (settings.permissions[user].length == 0) { delete settings.permissions[user]; } } administration.setGlobalSettings(settings).then(function() { administration.getGlobalSettings().then(printPermissions); }).catch(function(error) { terminal.print("Error updating permissions: " + JSON.stringify(error)); }); }); } } else if (typeof input == "string") { terminal.print("I didn't understand that."); } } catch (error) { terminal.print("error: " + error); } }