diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js index 19dfde37..8dcdabb0 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js @@ -21,7 +21,7 @@ if (auth === true) { - +

@@ -57,19 +57,19 @@ if (auth === true) { Grant Admin to SSID -Modify Admin for SSID +Polyzoot a User -Polyzoot a User +Modify Admin for SSID -Reload Config +Edit Config Restore Favs for User - +Reload Config diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js index 00cf5837..43616e52 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js @@ -47,7 +47,7 @@ wtv-expire-all: wtv-admin:/ban`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js index 2a8b5682..94177dfd 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js @@ -39,7 +39,7 @@ wtv-noback-all: wtv-admin:/deleteaccount`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js index 5d96215f..d10326ba 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js @@ -48,7 +48,7 @@ wtv-noback-all: wtv-admin:/deleteuser`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js index 96d63cac..6aed0b8b 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js @@ -28,7 +28,7 @@ wtv-noback-all: wtv-admin:/findaccount`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/operatortweaks.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/operatortweaks.js new file mode 100644 index 00000000..90ad83ba --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/operatortweaks.js @@ -0,0 +1,272 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); + +function generateFormField(type, confvar, options = null) { + if (confvar.indexOf('.') > 0) { + var confvar_split = confvar.split('.'); + console.log(confvar_split) + // not operater error resistant, be mindful if you modify this page + if (user_config.config[confvar_split[0]]) + var confvar_value = user_config.config[confvar_split[0]][confvar_split[1]] || minisrv_config.config[confvar_split[0]][confvar_split[1]] + else + var confvar_value = minisrv_config.config[confvar_split[0]][confvar_split[1]]; + + confvar = confvar.replace(".", "-"); + } else + var confvar_value = user_config.config[confvar] || minisrv_config.config[confvar]; + + if (type == "input") + return `` + if (type == "checkbox") + return `\n` + if (type == "select") { + var out = `"; + } +} + +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + var user_config = wtvshared.getUserConfig(); + headers = "200 OK\r\nContent-Type: text/html"; + data = ` + + +${minisrv_config.config.service_name} Operator Tweaks + + + + + + +
+
+

${minisrv_config.config.service_name} Operator Tweaks

+ +These settings can be updated without restarting minisrv +
+ + + + + + +
+
+
+ +
+service_owner
The name of the server +operator +
+service_owner_account
The minisrv account name of the server +operator +
+service_owner_contact
The email address or username of the +server operator where users can contact them +
+service_owner_
contact_method

The method by which the user can +contact the server operator (eg. email, Discord, Twitter, etc...) +
+service_name
The name of the service (eg. WebTV) +
+service_logo
The logo for the service. Filename only. Must exist in the SharedROMCache service vault. +
+service_splash_logo
The splash page logo for the service. Absolute path. Can be file:// or wtv url. +
+show_detailed_splash
Show service information and client connection speed on the splash page. +
+hide_ssid_in_logs
Filter SSIDs in console logs and log files. +
+filter_
passwords_in_logs

Filter passwords (if the form field contains 'pass') in console logs and log files. +
+verbosity
Console log debug level. +
+show_diskmap
Useful for debugging wtv-disk downloads. +
+allow_guests
Allows users to use the service without having to register. +Guest session data is destroyed upon logout, and some features are not available to guests. +
+enable_
lzpf_compression

Toggles whether LZPF compression will be considered or not +
+enable_
gzip_compression

Toggles whether GZIP compression will be considered or not +
+Max Users Per Account +
+Min Username Length +
+Max Username Length +
+Enable Passwords
+When disabled, accounts will not be able to use passwords, if they had a password set prior, the account will be accessible without it. +
+Min Password Length +
+Max Password Length +
+Password Field Size +The size of the field on the login password page +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+${generateFormField('input', 'service_owner')} +
+${generateFormField('input', 'service_owner_account')} +
+${generateFormField('input', 'service_owner_contact')} +
+${generateFormField('input', 'service_owner_contact_method')} +
+${generateFormField('input', 'service_name')} +
+${generateFormField('input', 'service_logo')} +
+${generateFormField('input', 'service_splash_logo')} +
+${generateFormField('checkbox', 'show_detailed_splash')} +
+${generateFormField('checkbox', 'hide_ssid_in_logs')} +
+${generateFormField('checkbox', 'filter_passwords_in_logs')} +
+${generateFormField('select', 'verbosity', [ + { "name": "Quiet (0)", value: 0 }, + { "name": "Show Headers (1)", value: 1 }, + { "name": "Verbose, without Headers (2)", value: 2 }, + { "name": "Verbose, with headers (3)", value: 3 }, + { "name": "Debug (4)", value: 4 }, +])} +
+${generateFormField('checkbox', 'show_diskmap')} +
+${generateFormField('checkbox', 'allow_guests')} +
+${generateFormField('checkbox', 'enable_lzpf_compression')} +
+${generateFormField('checkbox', 'enable_gzip_compression')} +
+${generateFormField('input', 'user_accounts.max_users_per_account', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,1,50,6)' maxlength=2")} +
+${generateFormField('input', 'user_accounts.min_username_length', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,3,50,5)' maxlength=2")} +
+${generateFormField('input', 'user_accounts.max_username_length', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,3,50,18)' maxlength=2")} +
+${generateFormField('checkbox', 'passwords.enabled', "onchange='passwordFieldToggle(this)'")} +
+${generateFormField('input', 'passwords.min_length', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,3,32,5)' maxlength=2")} +
+${generateFormField('input', 'passwords.max_length', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,3,256,32)' maxlength=2")} +
+${generateFormField('input', 'passwords.form_size', "size=2 onkeypress='return forceNumeric(event)' onchange='validateNumber(this,5,99,16)' maxlength=2")} +
+
+
+

+ +
+ + +
+ + +
+
+
+ + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js index 5ce97658..2c0c4d15 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js @@ -58,7 +58,7 @@ wtv-noback-all: wtv-admin:/polyzoot`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js index 50446a1b..ee7d4f47 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js @@ -39,7 +39,7 @@ wtv-noback-all: wtv-admin:/regenfavs`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js index f9b02c6f..163ac9ed 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js @@ -25,7 +25,7 @@ wtv-noback-all: wtv-admin:/reloadconfig`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js index 81db23e9..1dadeb37 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js @@ -44,7 +44,7 @@ wtv-noback-all: wtv-admin:/removeuserpasswd`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js index e9e7442b..2950864e 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js @@ -56,7 +56,7 @@ wtv-expire-all: wtv-admin:/unban`; - +

${minisrv_config.config.service_name} Admin Tricks

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/validate-operator-tweaks.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/validate-operator-tweaks.js new file mode 100644 index 00000000..582aa98a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/validate-operator-tweaks.js @@ -0,0 +1,48 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); + +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + var user_config = wtvshared.getUserConfig(); + Object.keys(request_headers.query).forEach((k) => { + if (k === "autosubmit") return; + var v = request_headers.query[k]; + if (!isNaN(parseInt(v))) v = parseInt(v); + if (v === "on" || v === "true" || v === "false") v = wtvshared.parseBool(v); + if (k.indexOf("-") > 0) { + var s = k.split("-"); + if (!user_config.config[s[0]]) user_config.config[s[0]] = {} + user_config.config[s[0]][s[1]] = v; + } else { + user_config.config[k] = v; + } + }); + var res = wtvshared.writeToUserConfig(user_config); + if (res) { + console.log(" * Configuration updated from wtv-admin, reloading") + reloadConfig(); + headers = "200 OK\r\nContent-Type: text/html"; + } else { + err = wtvshared.doErrorPage(400, "Error writing userconfig"); + headers = err[0]; + data = err[1]; + } + } +} + +if (!headers) { + err = wtvshared.doErrorPage(); + headers = err[0]; + data = err[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/WTVShared.js b/zefie_wtvp_minisrv/includes/WTVShared.js index 60b114d5..24f2f9cd 100644 --- a/zefie_wtvp_minisrv/includes/WTVShared.js +++ b/zefie_wtvp_minisrv/includes/WTVShared.js @@ -374,7 +374,8 @@ class WTVShared { var new_user_config = {}; Object.assign(new_user_config, minisrv_user_config, config); if (this.minisrv_config.config.debug_flags.debug) console.log(" * Writing new user configuration..."); - this.fs.writeFileSync(this.getAbsolutePath("user_config.json", parentDirectory), JSON.stringify(new_user_config, null, "\t")); + this.fs.writeFileSync(this.getAbsolutePath("user_config.json", this.parentDirectory), JSON.stringify(new_user_config, null, "\t")); + return true; } catch (e) { if (this.minisrv_config.config.debug_flags) { @@ -388,6 +389,7 @@ class WTVShared { } } } + return false; } generateString(len, extra_chars = null) { diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index 0de62671..7e544678 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -189,6 +189,12 @@ + + Code + + + Code +