fix/optimize wtv-tricks, wtvchat

This commit is contained in:
zefie
2025-08-12 19:03:04 -04:00
parent d160a5138c
commit d5f41837c0
15 changed files with 87 additions and 71 deletions

View File

@@ -1,16 +1,17 @@
var minisrv_service_file = true; const minisrv_service_file = true;
if (wtvshared.shenanigans.checkShenanigan(wtvshared.shenanigans.shenanigans.ENABLE_TRICKS_URLACCESS)) { if (wtvshared.shenanigans.checkShenanigan(wtvshared.shenanigans.shenanigans.ENABLE_TRICKS_URLACCESS)) {
// Allow URL access outside our trusted minisrv // Allow URL access outside our trusted minisrv
if (request_headers.query.url) var url = request_headers.query.url; let url;
else var url = "client:showalert?message=Please%20provide%20a%20%3Furl%3D%20with%20the%20url%20you%20would%20like%20to%20access.&buttonlabel1=Okay&buttonacction1=client:donothing" if (request_headers.query.url) url = request_headers.query.url;
else url = "client:showalert?message=Please%20provide%20a%20%3Furl%3D%20with%20the%20url%20you%20would%20like%20to%20access.&buttonlabel1=Okay&buttonacction1=client:donothing"
headers = `300 OK headers = `300 OK
wtv-visit: ${url} wtv-visit: ${url}
Location: ${url} Location: ${url}
Content-type: text/html` Content-type: text/html`
} else { } else {
var err = wtvshared.doErrorPage(403, "Access Denied"); const err = wtvshared.doErrorPage(403, "Access Denied");
headers = err[0]; headers = err[0];
data = err[1]; data = err[1];
} }

View File

@@ -1,16 +1,16 @@
var minisrv_service_file = true; const minisrv_service_file = true;
var request_is_async = true; request_is_async = true;
function handleError(reason) { function handleError(reason) {
var errpage = wtvshared.doErrorPage(400, reason); const errpage = wtvshared.doErrorPage(400, reason);
sendToClient(socket, errpage[0], errpage[1]); sendToClient(socket, errpage[0], errpage[1]);
} }
if (!request_headers.query.url && !request_headers.query.mediaPath) { if (!request_headers.query.url && !request_headers.query.mediaPath) {
handleError('No URL provided'); handleError('No URL provided');
} else { } else {
var mediaURL = request_headers.query.url || request_headers.query.mediaPath; const mediaURL = request_headers.query.url || request_headers.query.mediaPath;
var targetURL = 'wtv-author:/scrapbook-add?mediaPath=' + encodeURIComponent(mediaURL); const targetURL = 'wtv-author:/scrapbook-add?mediaPath=' + encodeURIComponent(mediaURL);
sendToClient(socket, {'Status': 302, 'Location': targetURL, 'wtv-visit': targetURL}, ''); sendToClient(socket, {'Status': 302, 'Location': targetURL, 'wtv-visit': targetURL}, '');
} }

View File

@@ -1,5 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
@@ -17,22 +16,22 @@ data = `<html>
<br> <br>
<h1>${minisrv_config.config.service_name} Tricks</h1>`; <h1>${minisrv_config.config.service_name} Tricks</h1>`;
var start_time = parseInt(session_data.getTicketData("benchmark_starttime")); const start_time = parseInt(session_data.getTicketData("benchmark_starttime"));
if (isNaN(start_time)) { if (isNaN(start_time)) {
data += "Invalid data, please try your benchmark again"; data += "Invalid data, please try your benchmark again";
} else { } else {
var end_time = Math.floor(new Date().getTime()); let end_time = Math.floor(new Date().getTime());
if (!session_data.getTicketData("benchmark_endtime")) { if (!session_data.getTicketData("benchmark_endtime")) {
session_data.setTicketData("benchmark_endtime", end_time); session_data.setTicketData("benchmark_endtime", end_time);
} else { } else {
end_time = session_data.getTicketData("benchmark_endtime"); end_time = session_data.getTicketData("benchmark_endtime");
} }
var download_time = end_time - start_time; const download_time = end_time - start_time;
var image_filename = wtvshared.getServiceDep("/wtv-tricks/benchmark.jpg", true); const image_filename = wtvshared.getServiceDep("/wtv-tricks/benchmark.jpg", true);
var image_size = fs.statSync(image_filename).size const image_size = fs.statSync(image_filename).size
var image_size_kb = parseFloat(image_size / 1024).toFixed(3); const image_size_kb = parseFloat(image_size / 1024).toFixed(3);
var throughput = parseFloat((image_size / download_time) * 1024).toFixed(0); const throughput = parseFloat((image_size / download_time) * 1024).toFixed(0);
var throughput_bps = parseInt(throughput * 8) const throughput_bps = parseInt(throughput * 8)
data += ` data += `
<table> <table>
<tr> <tr>
@@ -58,11 +57,11 @@ if (isNaN(start_time)) {
<tr> <tr>
<td valign=top align=right><shadow>Start Time:</shadow> <td valign=top align=right><shadow>Start Time:</shadow>
<td width=10> <td width=10>
<td valign=top>${new Date(start_time).toISOString().replace('T', ' ').substr(0, 19)} <td valign=top>${new Date(start_time).toISOString().replace('T', ' ').slice(0, 19)}
<tr> <tr>
<td valign=top align=right><shadow>End Time:</shadow> <td valign=top align=right><shadow>End Time:</shadow>
<td width=10> <td width=10>
<td valign=top>${new Date(end_time).toISOString().replace('T', ' ').substr(0, 19)} <td valign=top>${new Date(end_time).toISOString().replace('T', ' ').slice(0, 19)}
<tr> <tr>
<td valign=top align=right><shadow>Total Time:</shadow> <td valign=top align=right><shadow>Total Time:</shadow>
<td width=10> <td width=10>

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
@@ -28,7 +28,7 @@ Content-type: text/html`
</BODY> </BODY>
</HTML>`; </HTML>`;
} else { } else {
var start_time = Math.floor(new Date().getTime()); const start_time = Math.floor(new Date().getTime());
session_data.setTicketData("benchmark_starttime", start_time); session_data.setTicketData("benchmark_starttime", start_time);
headers += "wtv-expire-all: wtv-tricks:/benchmark\nContent-type: image/jpg" headers += "wtv-expire-all: wtv-tricks:/benchmark\nContent-type: image/jpg"
data = wtvshared.getServiceDep("/wtv-tricks/benchmark.jpg", false); data = wtvshared.getServiceDep("/wtv-tricks/benchmark.jpg", false);

View File

@@ -1,11 +1,11 @@
var minisrv_service_file = true; const minisrv_service_file = true;
headers = `200 OK headers = `200 OK
wtv-expire-all: wtv- wtv-expire-all: wtv-
wtv-expire-all: http wtv-expire-all: http
Content-type: text/html` Content-type: text/html`
var visit_url = null; let visit_url = null;
if (request_headers.Referer) visit_url = request_headers.Referer; if (request_headers.Referer) visit_url = request_headers.Referer;
else if (request_headers.query.return_to) visit_url = request_headers.query.return_to; else if (request_headers.query.return_to) visit_url = request_headers.query.return_to;

View File

@@ -1,6 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
if (request_headers.query.machine && request_headers.query.port) { if (request_headers.query.machine && request_headers.query.port) {
headers = `200 OK headers = `200 OK

View File

@@ -1,11 +1,11 @@
var minisrv_service_file = true; const minisrv_service_file = true;
var num_per_line = 4 const num_per_line = 4
var legend_every = 6; const legend_every = 6;
function getLegend() { function getLegend() {
d = "<tr>\n"; let d = "<tr>\n";
for (var i = 0; i < num_per_line; i++) { for (let i = 0; i < num_per_line; i++) {
d += "<td><b>Code</b>\n<td><b>Char</b>\n"; d += "<td><b>Code</b>\n<td><b>Char</b>\n";
} }
d += "<tr>\n"; d += "<tr>\n";
@@ -30,7 +30,7 @@ data = `<html>
<table border=1>`; <table border=1>`;
for (var i = 0; i <= 255; i++) { for (let i = 0; i <= 255; i++) {
if (i % num_per_line === 0) { if (i % num_per_line === 0) {
if (i % (num_per_line * legend_every) === 0) { if (i % (num_per_line * legend_every) === 0) {
data += getLegend(); data += getLegend();

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
headers = `200 OK headers = `200 OK
wtv-noback-all: wtv- wtv-noback-all: wtv-
@@ -9,7 +9,7 @@ wtv-service: reset
// HackTV Homepage is default // HackTV Homepage is default
var url="file://Disk/Browser/Games/Games.html"; let url="file://Disk/Browser/Games/Games.html";
if (request_headers.query.url) { if (request_headers.query.url) {
url = request_headers.query.url; url = request_headers.query.url;

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
headers = `300 OK headers = `300 OK
wtv-visit: wtv-home:/home wtv-visit: wtv-home:/home

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true; const minisrv_service_file = true;
let client_caps = null; let client_caps = null;
@@ -71,6 +71,7 @@ const boardRev = (sysConfigHex & 0xf00) >> 8;
const boardRevB = (sysConfigHex & 0xf0) >> 4; const boardRevB = (sysConfigHex & 0xf0) >> 4;
// determine box ASIC type // determine box ASIC type
let chip;
switch (chipVersionStr >> 0x18) { switch (chipVersionStr >> 0x18) {
case 1: case 1:
chip = "FIDO1"; chip = "FIDO1";
@@ -88,30 +89,37 @@ switch (chipVersionStr >> 0x18) {
// ========================= LC2 SYSCONFIG DECODE START ========================= // ========================= LC2 SYSCONFIG DECODE START =========================
// determine box video type // determine box video type
let video;
if ((sysConfigHex & 8) == 0) video = "NTSC"; if ((sysConfigHex & 8) == 0) video = "NTSC";
else video = "PAL"; else video = "PAL";
// determine box storage type // determine box storage type
let storage;
if ((sysConfigHex & 4) == 0) storage = "disk"; if ((sysConfigHex & 4) == 0) storage = "disk";
else storage = "flash"; else storage = "flash";
// determine box CPU endianness // determine box CPU endianness
let endianness;
if ((sysConfigHex & 0x80000) == 0) endianness = "little"; if ((sysConfigHex & 0x80000) == 0) endianness = "little";
else endianness = "big"; else endianness = "big";
// determine box CPU type // determine box CPU type
let cpu;
if ((sysConfigHex & 0x100000) == 0) cpu = 5230; if ((sysConfigHex & 0x100000) == 0) cpu = 5230;
else cpu = 4640; else cpu = 4640;
// determine box CPU clock multiplier // determine box CPU clock multiplier
let cpuMult;
if ((sysConfigHex & 0x20000) == 0) cpuMult = 3; if ((sysConfigHex & 0x20000) == 0) cpuMult = 3;
else cpuMult = 2; else cpuMult = 2;
// determine smartcard 0 support // determine smartcard 0 support
let sc0;
if ((sysConfigHex & 0x400000) == 0) sc0 = "supported"; if ((sysConfigHex & 0x400000) == 0) sc0 = "supported";
else sc0 = "not supported"; else sc0 = "not supported";
//determine smartcard 1 support //determine smartcard 1 support
let sc1;
if ((sysConfigHex & 0x200000) == 0) sc1 = "supported"; if ((sysConfigHex & 0x200000) == 0) sc1 = "supported";
else sc1 = "not supported"; else sc1 = "not supported";
@@ -121,12 +129,13 @@ else sc1 = "not supported";
-Bruce Leak, Thursday, October 12, 1995 1:53:28 AM */ -Bruce Leak, Thursday, October 12, 1995 1:53:28 AM */
// determine box CPU output bufs // determine box CPU output bufs
let outputBufs;
if ((sysConfigHex & 0x2000) == 0) outputBufs = 100; if ((sysConfigHex & 0x2000) == 0) outputBufs = 100;
else outputBufs = 50; else outputBufs = 50;
// determine box SGRAM speed // determine box SGRAM speed
function getSGSpeed() { function getSGSpeed() {
let SGRAMand = sysConfigHex & 0xc00000; const SGRAMand = sysConfigHex & 0xc00000;
if (SGRAMand == 0x400000) return 66; if (SGRAMand == 0x400000) return 66;
else if (0x400000 < SGRAMand) else if (0x400000 < SGRAMand)
if (SGRAMand == 0x800000) return 77; if (SGRAMand == 0x800000) return 77;
@@ -135,16 +144,18 @@ function getSGSpeed() {
} }
// determine box audio chip type // determine box audio chip type
let audio;
if ((sysConfigHex & 0xc0000) == 0xc0000) audio = "AKM4310/4309"; if ((sysConfigHex & 0xc0000) == 0xc0000) audio = "AKM4310/4309";
else audio = "Unknown"; else audio = "Unknown";
// determine box audio clock source // determine box audio clock source
let audioClk;
if ((sysConfigHex & 0x20000) == 0) audioClk = "SPOT"; if ((sysConfigHex & 0x20000) == 0) audioClk = "SPOT";
else audioClk = "External"; else audioClk = "External";
// determine box video chip // determine box video chip
function getVideoChip() { function getVideoChip() {
let videoChipAnd = sysConfigHex & 0x600; const videoChipAnd = sysConfigHex & 0x600;
if (videoChipAnd == 0x200) return "Bt851"; if (videoChipAnd == 0x200) return "Bt851";
else if (videoChipAnd < 0x201 && videoChipAnd !== 0) return "Unknown"; else if (videoChipAnd < 0x201 && videoChipAnd !== 0) return "Unknown";
@@ -153,14 +164,17 @@ function getVideoChip() {
} }
// determine box video type // determine box video type
let videoB;
if ((sysConfigHex & 0x800) == 0) videoB = "PAL"; if ((sysConfigHex & 0x800) == 0) videoB = "PAL";
else videoB = "NTSC"; else videoB = "NTSC";
// determine box video clock source // determine box video clock source
let videoClk;
if ((sysConfigHex & 0x10000) == 0) videoClk = "External"; if ((sysConfigHex & 0x10000) == 0) videoClk = "External";
else videoClk = "SPOT"; else videoClk = "SPOT";
// determine box board type // determine box board type
let boardTypeB;
switch (sysConfigHex & 0xc) { switch (sysConfigHex & 0xc) {
case 8: case 8:
boardTypeB = "Trial"; boardTypeB = "Trial";
@@ -173,18 +187,22 @@ switch (sysConfigHex & 0xc) {
} }
// determine bank 0 type // determine bank 0 type
let bank0Type;
if (sysConfigHex < 0) bank0Type = "Mask"; if (sysConfigHex < 0) bank0Type = "Mask";
else bank0Type = "Flash"; else bank0Type = "Flash";
// determine bank 0 mode // determine bank 0 mode
let bank0Mode;
if ((sysConfigHex & 0x40000000) == 0) bank0Mode = "Normal"; if ((sysConfigHex & 0x40000000) == 0) bank0Mode = "Normal";
else bank0Mode = "PageMode"; else bank0Mode = "PageMode";
// determine bank 1 type // determine bank 1 type
let bank1Type;
if ((sysConfigHex & 0x8000000) == 0) bank1Type = "Flash"; if ((sysConfigHex & 0x8000000) == 0) bank1Type = "Flash";
else bank1Type = "Mask"; else bank1Type = "Mask";
// determine bank 1 mode // determine bank 1 mode
let bank1Mode;
if ((sysConfigHex & 0x40000000) == 0) bank1Mode = "Normal"; if ((sysConfigHex & 0x40000000) == 0) bank1Mode = "Normal";
else bank1Mode = "PageMode"; else bank1Mode = "PageMode";

View File

@@ -1,11 +1,12 @@
var minisrv_service_file = true; const minisrv_service_file = true;
let redirect, message;
headers = `200 OK headers = `200 OK
Content-Type: text/html`; Content-Type: text/html`;
if (session_data.getSessionData("registered")) { if (session_data.getSessionData("registered")) {
var redirect = [10, "client:goback?"]; redirect = [10, "client:goback?"];
var message = "Error: Your box is already registered. If you would like to re-register, you must first unregister."; message = "Error: Your box is already registered. If you would like to re-register, you must first unregister.";
} else if (request_headers.query.confirm_register) { } else if (request_headers.query.confirm_register) {
headers += ` headers += `
wtv-noback-all: wtv- wtv-noback-all: wtv-
@@ -13,8 +14,8 @@ wtv-expire-all: wtv-
wtv-relogin-url: wtv-1800:/preregister?relogin=true wtv-relogin-url: wtv-1800:/preregister?relogin=true
wtv-reconnect-url: wtv-1800:/preregister?reconnect=true wtv-reconnect-url: wtv-1800:/preregister?reconnect=true
wtv-boot-url: wtv-1800:/preregister?relogin=true`; wtv-boot-url: wtv-1800:/preregister?relogin=true`;
var redirect = [3, "client:relog?"]; redirect = [3, "client:relog?"];
var message = "You will now be be redirected to registration.<br><br>"; message = "You will now be be redirected to registration.<br><br>";
message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`; message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`;
} else { } else {
message = `Are you ready to register your box with ${minisrv_config.config.service_name}? message = `Are you ready to register your box with ${minisrv_config.config.service_name}?

View File

@@ -1,7 +1,5 @@
var minisrv_service_file = true; const minisrv_service_file = true;
const notAdminAlert = new clientShowAlert({
var notAdminAlert = new clientShowAlert({
'image': minisrv_config.config.service_logo, 'image': minisrv_config.config.service_logo,
'message': "Sorry, you are not configured as an admin on this server.<br><br>If you are the server operator, please<br> see <strong>user_config.example.json</strong><br> for an example on how to configure yourself as an administrator.", 'message': "Sorry, you are not configured as an admin on this server.<br><br>If you are the server operator, please<br> see <strong>user_config.example.json</strong><br> for an example on how to configure yourself as an administrator.",
'buttonlabel1': "Ugh, fine.", 'buttonlabel1': "Ugh, fine.",
@@ -12,7 +10,7 @@ var notAdminAlert = new clientShowAlert({
headers = `200 OK headers = `200 OK
Content-Type: text/html` Content-Type: text/html`
tricks = [ const tricks = [
["wtv-tricks:/info", minisrv_config.config.service_name + " info"], ["wtv-tricks:/info", minisrv_config.config.service_name + " info"],
["wtv-cookie:list", "List Cookies"], ["wtv-cookie:list", "List Cookies"],
["wtv-cookie:reset", "Clear Cookies"], ["wtv-cookie:reset", "Clear Cookies"],
@@ -45,7 +43,7 @@ data = `<html>
<table cellspacing=0 cellpadding=0><tr><td abswidth=10>&nbsp;<td colspan=3> <table cellspacing=0 cellpadding=0><tr><td abswidth=10>&nbsp;<td colspan=3>
<table><tc><td>&nbsp;</td></tc><tc><td><table>`; <table><tc><td>&nbsp;</td></tc><tc><td><table>`;
for (i = 0; i < tricks.length; i += 2) { for (let i = 0; i < tricks.length; i += 2) {
data += `<tr> data += `<tr>
<td colspan=3 height=6> <td colspan=3 height=6>
<tr> <tr>

View File

@@ -1,4 +1,5 @@
var minisrv_service_file = true; const minisrv_service_file = true;
let redirect, message;
headers = `200 OK headers = `200 OK
Content-Type: text/html`; Content-Type: text/html`;
@@ -6,23 +7,23 @@ Content-Type: text/html`;
if (!session_data.getSessionData("registered")) { if (!session_data.getSessionData("registered")) {
headers += "\nwtv-noback-all: wtv-"; headers += "\nwtv-noback-all: wtv-";
headers += "\nwtv-expire-all: wtv-"; headers += "\nwtv-expire-all: wtv-";
var redirect = [5, "client:relogin?"]; redirect = [5, "client:relogin?"];
var message = "Error: Your box is not registered. You are accessing " + minisrv_config.config.service_name + " in Guest Mode. There is nothing to delete!"; message = "Error: Your box is not registered. You are accessing " + minisrv_config.config.service_name + " in Guest Mode. There is nothing to delete!";
} else if (session_data.user_id !== 0) { } else if (session_data.user_id !== 0) {
headers += "\nwtv-noback-all: wtv-"; headers += "\nwtv-noback-all: wtv-";
headers += "\nwtv-expire-all: wtv-"; headers += "\nwtv-expire-all: wtv-";
var redirect = [5, "client:relogin?"]; redirect = [5, "client:relogin?"];
var message = "Error: You must be the primary user to unregister this box."; message = "Error: You must be the primary user to unregister this box.";
} else if (request_headers.query.confirm_unregister) { } else if (request_headers.query.confirm_unregister) {
if (session_data.unregisterBox()) { if (session_data.unregisterBox()) {
headers += "\nwtv-noback-all: wtv-"; headers += "\nwtv-noback-all: wtv-";
headers += "\nwtv-expire-all: wtv-"; headers += "\nwtv-expire-all: wtv-";
var redirect = [3, "client:relog?"]; redirect = [3, "client:relog?"];
var message = "Your account data has been successfully removed. You will now be be redirected to registration.<br><br>"; message = "Your account data has been successfully removed. You will now be be redirected to registration.<br><br>";
message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`; message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`;
} else { } else {
var redirect = [10, "client:goback?"]; redirect = [10, "client:goback?"];
var message = "There was an error deleting your account data. Please try again later. If the problem persists, please contact " + minisrv_config.config.service_owner + " to request manual deletion."; message = "There was an error deleting your account data. Please try again later. If the problem persists, please contact " + minisrv_config.config.service_owner + " to request manual deletion.";
message += "SSID verifcation may be required to perform a manual deletion.<br><br>Returning from whence you came...<br><br>"; message += "SSID verifcation may be required to perform a manual deletion.<br><br>Returning from whence you came...<br><br>";
message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`; message += `<a href="${redirect[1]}">Click here if you are not automatically redirected.</a>`;
} }

View File

@@ -1,8 +1,8 @@
var minisrv_service_file = true; const minisrv_service_file = true;
var request_is_async = true; request_is_async = true;
function handleError(reason) { function handleError(reason) {
var errpage = wtvshared.doErrorPage(400, reason); const errpage = wtvshared.doErrorPage(400, reason);
sendToClient(socket, errpage[0], errpage[1]); sendToClient(socket, errpage[0], errpage[1]);
} }

View File

@@ -1,21 +1,21 @@
var minisrv_service_file = true; const minisrv_service_file = true;
var urldata = request_headers.request_url.split(":"); let urldata = request_headers.request_url.split(":");
delete urldata[0]; delete urldata[0];
urldata = urldata.join(":").substring(1); urldata = urldata.join(":").slice(1);
console.log(urldata); console.log(urldata);
while (urldata.substring(0, 1) == "/") urldata = urldata.substring(1); while (urldata.slice(0, 1) == "/") urldata = urldata.slice(1);
var server = urldata.split('/')[0]; let server = urldata.split('/')[0];
var port = 6667; let port = 6667;
if (server.indexOf(":") > 0) { if (server.indexOf(":") > 0) {
port = server.split(":")[1]; port = server.split(":")[1];
server = server.split(":")[0]; server = server.split(":")[0];
} }
channel = urldata.split('/')[1] const channel = urldata.split('/')[1]
var dest_url = "wtv-chat:/MakeChatPage?host=" + server + "&port=" + port + "&channel=" + channel; const dest_url = "wtv-chat:/MakeChatPage?host=" + server + "&port=" + port + "&channel=" + channel;
headers = `300 Moved headers = `300 Moved
Location: ${dest_url}` Location: ${dest_url}`