fix wtv-url:url (no slash) wasn't working

This commit is contained in:
zefie
2025-08-12 15:41:07 -04:00
parent b4792809f4
commit d2b2808863

View File

@@ -232,7 +232,7 @@ const runScriptInVM = function (script_data, user_contextObj = {}, privileged =
} }
// create global context object // create global context object
let contextObj = { const contextObj = {
// node core variables and functions // node core variables and functions
"console": console, // needed for per-script debugging "console": console, // needed for per-script debugging
"__dirname": __dirname, // needed by services such as wtv-flashrom and wtv-disk "__dirname": __dirname, // needed by services such as wtv-flashrom and wtv-disk
@@ -356,7 +356,7 @@ async function handleCGI(executable, cgi_file, socket, request_headers, vault, s
} }
const env = wtvshared.cloneObj(process.env); const env = wtvshared.cloneObj(process.env);
env.QUERY_STRING = ""; env.QUERY_STRING = "";
let request_data = []; const request_data = [];
const split_req = request_headers.request.split(' '); const split_req = request_headers.request.split(' ');
request_data.method = split_req[0]; request_data.method = split_req[0];
let request_type = (request_headers.request_url.indexOf(":/")) ? request_headers.request_url.split(":/")[0] : 'http'; let request_type = (request_headers.request_url.indexOf(":/")) ? request_headers.request_url.split(":/")[0] : 'http';
@@ -440,7 +440,7 @@ async function handleCGI(executable, cgi_file, socket, request_headers, vault, s
} }
const options = { 'cwd': vault, 'env': env, 'timeout': 120000, windowsHide: true, 'uid': process.getuid(), 'gid': process.getgid(), 'stdio': 'overlapped' }; let options = { 'cwd': vault, 'env': env, 'timeout': 120000, windowsHide: true, 'uid': process.getuid(), 'gid': process.getgid(), 'stdio': 'overlapped' };
if (!minisrv_config.config.debug_flags.quiet) (executable == cgi_file) ? console.debug(" * Executing CGI:", executable) : console.debug(" * Executing CGI:", executable, cgi_file); if (!minisrv_config.config.debug_flags.quiet) (executable == cgi_file) ? console.debug(" * Executing CGI:", executable) : console.debug(" * Executing CGI:", executable, cgi_file);
const cgi = (executable == cgi_file) ? spawn(cgi_file, options=options) : spawn(executable, [cgi_file], options) const cgi = (executable == cgi_file) ? spawn(cgi_file, options=options) : spawn(executable, [cgi_file], options)
let data = ""; let data = "";
@@ -915,7 +915,7 @@ async function processURL(socket, request_headers, pc_services = false) {
request_headers.query = {}; request_headers.query = {};
if (request_headers.request_url) { if (request_headers.request_url) {
service_name = socket.service_name || verifyServicePort(decodeURIComponent(request_headers.request_url).split(':/')[0], socket); service_name = socket.service_name || verifyServicePort(decodeURIComponent(request_headers.request_url).split(':')[0], socket);
if (minisrv_config.services[service_name]) { if (minisrv_config.services[service_name]) {
allow_double_slash = minisrv_config.services[service_name].allow_double_slash || false; allow_double_slash = minisrv_config.services[service_name].allow_double_slash || false;
enable_multi_query = minisrv_config.services[service_name].enable_multi_query || false; enable_multi_query = minisrv_config.services[service_name].enable_multi_query || false;
@@ -1286,8 +1286,8 @@ async function doHTTPProxy(socket, request_headers) {
break; break;
} }
let request_data = []; const request_data = [];
let data = []; const data = [];
request_data.method = request_headers.request.split(' ')[0]; request_data.method = request_headers.request.split(' ')[0];
const request_url_split = request_headers.request.split(' ')[1].split('/'); const request_url_split = request_headers.request.split(' ')[1].split('/');
@@ -1385,15 +1385,11 @@ async function doHTTPProxy(socket, request_headers) {
if (err.code == "ENOTFOUND" || err.message.indexOf("HostUnreachable") > 0) { if (err.code == "ENOTFOUND" || err.message.indexOf("HostUnreachable") > 0) {
const errpage = wtvshared.doErrorPage(400, `The publisher <b>${request_data.host}</b> is unknown.`); const errpage = wtvshared.doErrorPage(400, `The publisher <b>${request_data.host}</b> is unknown.`);
sendToClient(socket, errpage[0], errpage[1]); sendToClient(socket, errpage[0], errpage[1]);
} else {
if (minisrv_config.services[request_type].external_proxy_is_http1) {
handleProxy(socket, request_type, request_headers, res, data);
} else { } else {
console.error(" * Unhandled Proxy Request Error:", err); console.error(" * Unhandled Proxy Request Error:", err);
const errpage = wtvshared.doErrorPage(400); const errpage = wtvshared.doErrorPage(400);
sendToClient(socket, errpage[0], errpage[1]); sendToClient(socket, errpage[0], errpage[1]);
} }
}
}); });
if (request_headers.post_data) { if (request_headers.post_data) {
@@ -1696,7 +1692,7 @@ async function sendToClient(socket, headers_obj, data = null) {
toClient = headers + eol + data; toClient = headers + eol + data;
sendToSocket(socket, Buffer.from(toClient)); sendToSocket(socket, Buffer.from(toClient));
} else if (typeof data === 'object') { } else if (typeof data === 'object') {
const verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; let verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : "";
if (socket_sessions[socket.id].secure_headers == true) { if (socket_sessions[socket.id].secure_headers == true) {
// encrypt headers // encrypt headers
if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers"; if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers";
@@ -1719,7 +1715,7 @@ async function sendToSocket(socket, data) {
if (expected_data_out === 0) expected_data_out = data.byteLength + (socket_sessions[socket.id].socket_total_written || 0); if (expected_data_out === 0) expected_data_out = data.byteLength + (socket_sessions[socket.id].socket_total_written || 0);
if (socket.bytesWritten == expected_data_out) break; if (socket.bytesWritten == expected_data_out) break;
let data_left = (expected_data_out - socket.bytesWritten); const data_left = (expected_data_out - socket.bytesWritten);
// buffer size = lesser of chunk_size or size remaining // buffer size = lesser of chunk_size or size remaining
const buffer_size = (data_left >= chunk_size) ? chunk_size : data_left; const buffer_size = (data_left >= chunk_size) ? chunk_size : data_left;
if (buffer_size < 0) { if (buffer_size < 0) {
@@ -2056,7 +2052,7 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq
// handle streaming POST // handle streaming POST
if (socket_sessions[socket.id].expecting_post_data) { if (socket_sessions[socket.id].expecting_post_data) {
if (socket_sessions[socket.id].post_data_length > (minisrv_config.config.max_post_length * 1024 * 1024)) { if (socket_sessions[socket.id].post_data_length > (minisrv_config.config.max_post_length * 1024 * 1024)) {
closeSocket(socket); cleanupSocket(socket);
} else { } else {
if (headers.length == 0) { if (headers.length == 0) {
headers = socket_sessions[socket.id].headers; headers = socket_sessions[socket.id].headers;
@@ -2314,21 +2310,23 @@ function getGitRevision() {
function reloadConfig() { function reloadConfig() {
const temp = { "version": minisrv_config.version } const temp = { "version": minisrv_config.version }
if (minisrv_config.config.git_commit) temp.git_commit = minisrv_config.config.git_commit; const config = wtvshared.readMiniSrvConfig(true, false, true); // snatches minisrv_config
const minisrv_config = wtvshared.readMiniSrvConfig(true, false, true); // snatches minisrv_config if (temp.git_commit) config.config.git_commit = temp.git_commit;
minisrv_config.version = temp.version if (!config.config.service_logo.includes(':')) {
if (temp.git_commit) minisrv_config.config.git_commit = temp.git_commit; config.config.service_logo_pc = "/ROMCache/" + config.config.service_logo;
if (!minisrv_config.config.service_logo.includes(':')) { config.config.service_logo = "wtv-star:/ROMCache/" + config.config.service_logo;
minisrv_config.config.service_logo_pc = "/ROMCache/" + minisrv_config.config.service_logo;
minisrv_config.config.service_logo = "wtv-star:/ROMCache/" + minisrv_config.config.service_logo;
} }
if (!minisrv_config.config.service_splash_logo.includes(':')) minisrv_config.config.service_splash_logo = "wtv-star:/ROMCache/" + minisrv_config.config.service_splash_logo;
Object.keys(minisrv_config.services).forEach((k) => { if (config.config.git_commit) temp.git_commit = config.config.git_commit;
configureService(k, minisrv_config.services[k]) config.version = temp.version
if (!config.config.service_splash_logo.includes(':')) config.config.service_splash_logo = "wtv-star:/ROMCache/" + config.config.service_splash_logo;
Object.keys(config.services).forEach((k) => {
configureService(k, config.services[k])
}); });
return minisrv_config; return config;
} }
// SERVER START // SERVER START
@@ -2563,9 +2561,9 @@ Content-type: text/html`;
server.post('*', (req, res) => { server.post('*', (req, res) => {
let errpage = null; let errpage = null;
const ssl = (req.socket.ssl) ? true : false; const ssl = (req.socket.ssl) ? true : false;
const service_name = getServiceByPort(v); let service_name = getServiceByPort(v);
let request_headers = {}; const request_headers = {};
request_headers['request'] = "POST " + req.originalUrl + " HTTP/1.1"; request_headers['request'] = "POST " + req.originalUrl + " HTTP/1.1";
request_headers.request_url = req.originalUrl; request_headers.request_url = req.originalUrl;
request_headers.raw_headers = "Request: "+request_headers['request']+"\r\n"; request_headers.raw_headers = "Request: "+request_headers['request']+"\r\n";
@@ -2575,7 +2573,7 @@ Content-type: text/html`;
}); });
request_headers.query = req.query; request_headers.query = req.query;
const host_name = (request_headers['host']) ? request_headers['host'] : null; let host_name = (request_headers['host']) ? request_headers['host'] : null;
if (host_name) { if (host_name) {
if (host_name.includes(":")) host_name = host_name.slice(0, host_name.indexOf(":")); if (host_name.includes(":")) host_name = host_name.slice(0, host_name.indexOf(":"));