diff --git a/.gitignore b/.gitignore index 2dbbc7f2..bdf0618c 100644 --- a/.gitignore +++ b/.gitignore @@ -372,3 +372,7 @@ FodyWeavers.xsd !/zefie_wtvp_minisrv/PageBuilderVault/http_pb/clipart !*.gitkeep /user_config.json + +# CodeQL +codeql-custom-queries-javascript/ +codeql/ diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 88b16b42..137a810d 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -321,6 +321,14 @@ var runScriptInVM = function (script_data, user_contextObj = {}, privileged = fa async function handleCGI(executable, cgi_file, socket, request_headers, vault, service_name, session_data = null, extra_path = "") { + const SAFE_ROOT = path.resolve(__dirname); + vault = path.resolve(vault); + if (!vault.startsWith(SAFE_ROOT)) { + console.error("Invalid vault path:", vault); + var errpage = wtvshared.doErrorPage(403); + sendToClient(socket, errpage[0], errpage[1]); + return; + } var env = wtvshared.cloneObj(process.env); env.QUERY_STRING = ""; var request_data = new Array(); @@ -591,7 +599,7 @@ async function processPath(socket, service_vault_file_path, request_headers = ne }) if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.debug(" * Script requested Asynchronous mode"); - } else if (fs.existsSync(service_vault_file_path + ".php") || (service_vault_file_path.indexOf(".php") == service_vault_file_path.length - 4 && fs.existsSync(service_vault_file_path)) || fs.existsSync(service_vault_file_path + ".php")) { + } else if (fs.existsSync(service_vault_file_path + ".php") || (service_vault_file_path.endsWith(".php") && fs.existsSync(service_vault_file_path)) || service_vault_file_path.indexOf(".php") > 0) { request_is_async = true; if (minisrv_config.config.php_enabled && minisrv_config.config.php_binpath) { if (fs.existsSync(service_vault_file_path + ".php") || fs.existsSync(service_vault_file_path)) { @@ -618,7 +626,7 @@ async function processPath(socket, service_vault_file_path, request_headers = ne sendToClient(socket, errpage[0], errpage[1]); return; } - } else if (fs.existsSync(service_vault_file_path + ".cgi") || (service_vault_file_path.indexOf(".cgi") == service_vault_file_path.length - 4 && fs.existsSync(service_vault_file_path)) || fs.existsSync(service_vault_file_path + ".cgi")) { + } else if (fs.existsSync(service_vault_file_path + ".cgi") || (service_vault_file_path.endsWith(".cgi") && fs.existsSync(service_vault_file_path)) || service_vault_file_path.indexOf(".cgi") > 0) { request_is_async = true; if (minisrv_config.config.php_enabled && minisrv_config.config.php_binpath) { if (fs.existsSync(service_vault_file_path + ".cgi") || fs.existsSync(service_vault_file_path)) { @@ -730,11 +738,10 @@ async function processPath(socket, service_vault_file_path, request_headers = ne sendRawFile(socket, service_vault_file_path); } } else { - // look for a catchallin the current path and all parent paths up until the service root - if (minisrv_config.config.catchall_file_name) { - var minisrv_catchall_file_name = null; - if (minisrv_config.services[service_name]) minisrv_catchall_file_name = minisrv_config.services[service_name].catchall_file_name || minisrv_config.config.catchall_file_name || null; - else minisrv_catchall_file_name = minisrv_config.config.catchall_file_name || null; + // look for a catchall in the current path and all parent paths up until the service root + var service_config = minisrv_config.services[service_name] || {}; + if (minisrv_config.config.catchall_file_name || service_config['catchall_file_name']) { + var minisrv_catchall_file_name = service_config['catchall_file_name'] || minisrv_config.config.catchall_file_name || null; if (minisrv_catchall_file_name) { var service_check_dir = service_vault_file_path.split(path.sep); service_check_dir.pop(); // pop filename @@ -742,21 +749,48 @@ async function processPath(socket, service_vault_file_path, request_headers = ne while (service_check_dir.join(path.sep) != service_vault_dir && service_check_dir.length > 0) { var catchall_file = service_check_dir.join(path.sep) + path.sep + minisrv_catchall_file_name; if (fs.existsSync(catchall_file)) { + service_vault_found = true; if (!minisrv_config.config.debug_flags.quiet) console.debug(" * Found catchall at " + catchall_file + " to handle request (JS Interpreter Mode) [Socket " + socket.id + "]"); request_headers.service_file_path = catchall_file; - var script_data = fs.readFileSync(catchall_file).toString(); + if (catchall_file.endsWith(".js")) { + var script_data = fs.readFileSync(catchall_file).toString(); - var vmResults = runScriptInVM(script_data, contextObj, privileged, catchall_file); + var vmResults = runScriptInVM(script_data, contextObj, privileged, catchall_file); - updateFromVM.forEach((item) => { - // Here we read back certain data from the ServiceVault Script Context Object - try { - if (typeof vmResults[item[1]] !== "undefined") eval(item[0] + ' = vmResults["' + item[1] + '"]'); - } catch (e) { - console.error("vm readback error", e); + updateFromVM.forEach((item) => { + // Here we read back certain data from the ServiceVault Script Context Object + try { + if (typeof vmResults[item[1]] !== "undefined") eval(item[0] + ' = vmResults["' + item[1] + '"]'); + } catch (e) { + console.error("vm readback error", e); + } + }); + } else if (catchall_file.endsWith(".php")) { + if (minisrv_config.config.php_enabled && minisrv_config.config.php_binpath) { + request_is_async = true; + var extra_path = service_check_dir.join(path.sep) + path.sep + request_headers.request_url.replace(service_name + ":/", ""); + if (!minisrv_config.config.debug_flags.quiet) console.debug(" * Found catchall at " + catchall_file + " to handle request (CGI Interpreter Mode) [Socket " + socket.id + "]"); + handlePHP(socket, request_headers, catchall_file, service_vault_dir + path.sep + service_name, (pc_services) ? pc_service_name : service_name, (pc_services) ? null : ssid_sessions[socket.ssid], extra_path) + } else { + // php is not enabled, don't expose source code + var errpage = wtvshared.doErrorPage(403); + sendToClient(socket, errpage[0], errpage[1]); + return; } - }); + } else if (catchall_file.endsWith(".cgi")) { + if (minisrv_config.config.cgi_enabled) { + request_is_async = true; + var extra_path = service_check_dir.join(path.sep) + path.sep + request_headers.request_url.replace(service_name + ":/", ""); + if (!minisrv_config.config.debug_flags.quiet) console.debug(" * Found catchall at " + catchall_file + " to handle request (CGI Interpreter Mode) [Socket " + socket.id + "]"); + handleCGI(catchall_file, catchall_file, socket, request_headers, service_vault_dir + path.sep + service_name, (pc_services) ? pc_service_name : service_name, (pc_services) ? null : ssid_sessions[socket.ssid], extra_path) + } else { + // cgi is not enabled, don't expose source code + var errpage = wtvshared.doErrorPage(403); + sendToClient(socket, errpage[0], errpage[1]); + return; + } + } if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.debug(" * Script requested Asynchronous mode"); break; @@ -1333,7 +1367,7 @@ function headerStringToObj(headers, response = false) { async function sendToClient(socket, headers_obj, data = null) { var headers = ""; var content_length = 0; - var end_of_line = "\n"; + var eol = "\n"; if (typeof (data) === 'undefined' || data === null) data = ''; if (typeof (headers_obj) === 'string') { // string to header object @@ -1398,16 +1432,23 @@ async function sendToClient(socket, headers_obj, data = null) { if (socket_sessions[socket.id]) { if (socket_sessions[socket.id].request_headers) { if (socket_sessions[socket.id].request_headers.service_file_path) { - if (wtvshared.getFileExt(socket_sessions[socket.id].request_headers.service_file_path).toLowerCase() !== "js" || socket_sessions[socket.id].request_headers.raw_file === true) { - var last_modified = wtvshared.getFileLastModifiedUTCString(socket_sessions[socket.id].request_headers.service_file_path); - if (last_modified) headers_obj["Last-Modified"] = last_modified; + // Don't change Last-modified header if provided already + if (!headers['Last-Modified']) { + // Only add the header if not a js, php, or cgi file + if (wtvshared.getFileExt(socket_sessions[socket.id].request_headers.service_file_path).toLowerCase() !== "js" || + wtvshared.getFileExt(socket_sessions[socket.id].request_headers.service_file_path).toLowerCase() !== "php" || + wtvshared.getFileExt(socket_sessions[socket.id].request_headers.service_file_path).toLowerCase() !== "cgi" || + socket_sessions[socket.id].request_headers.raw_file === true) { + var last_modified = wtvshared.getFileLastModifiedUTCString(socket_sessions[socket.id].request_headers.service_file_path); + if (last_modified) headers_obj["Last-Modified"] = last_modified; + } } } } } - // if box can do compression, see if its worth enabling + // if client can do compression, see if its worth enabling // small files actually get larger, so don't compress them var compression_type = 0; if (content_length >= 256) compression_type = wtvmime.shouldWeCompress(ssid_sessions[socket.ssid], headers_obj); @@ -1428,7 +1469,7 @@ async function sendToClient(socket, headers_obj, data = null) { } if (socket.res) { // pc mode with response object available - if (compression_type == 1) compression_type = 2; // just in case + if (compression_type == 1) compression_type = 2; // wtv-lzpf not supported in pc mode } // compress if needed @@ -1497,7 +1538,6 @@ async function sendToClient(socket, headers_obj, data = null) { if (headers_obj["minisrv-force-content-length"]) { headers_obj["Content-length"] = headers_obj["minisrv-force-content-length"]; delete headers_obj["minisrv-force-content-length"]; - } if (!socket.res) { @@ -1525,25 +1565,27 @@ async function sendToClient(socket, headers_obj, data = null) { var xpower = wtvshared.getCaseInsensitiveKey("x-powered-by", headers_obj); if (!xpower) { // add X-Powered-By header if not WebTV and not already set - if (!socket.ssid) headers_obj['X-Powered-By'] = "NodeJS ("+process.version+") Express via " + z_title; + xpower = 'X-Powered-By'; + if (!socket.ssid) headers_obj[xpower] = "NodeJS ("+process.version+") Express via " + z_title; } else { // delete if webtv if (socket.ssid) delete headers_obj[xpower]; } - headers_obj = wtvshared.moveObjectKey("x-powered-by", -2, headers_obj, true) // move x-powered-by before Content-type + + if (headers_obj[xpower]) headers_obj = wtvshared.moveObjectKey(xpower, -2, headers_obj, true) // move x-powered-by before Content-type if (!socket.res) { // header object to string if (minisrv_config.config.debug_flags.show_headers) console.debug(" * Outgoing headers on socket ID", socket.id, headers_obj); Object.keys(headers_obj).forEach(function (k) { if (k == "Status") { - headers += headers_obj[k] + end_of_line; + headers += headers_obj[k] + eol; } else { if (k.indexOf('_') >= 0) { var j = k.split('_')[0]; - headers += j + ": " + headers_obj[k] + end_of_line; + headers += j + ": " + headers_obj[k] + eol; } else { - headers += k + ": " + headers_obj[k] + end_of_line; + headers += k + ": " + headers_obj[k] + eol; } } }); @@ -1554,29 +1596,37 @@ async function sendToClient(socket, headers_obj, data = null) { } } } + + // Delete any other stray minisrv headers (we process them all before this) + Object.keys(headers_obj).forEach(function (k) { + if (k.indexOf("minisrv-") == 0) { + delete headers_obj[k]; + } + }); + // send to client if (socket.res) { var resCode = parseInt(headers_obj.Status.substr(0, 3)); socket.res.writeHead(resCode, headers_obj); socket.res.end(data); if (minisrv_config.config.debug_flags.show_headers) console.debug(" * Outgoing PC headers on " + socket.service_name + " socket ID", socket.id, headers_obj); - if (minisrv_config.config.debug_flags.quiet) console.debug(" * Sent response " + headers_obj.status + " to PC client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); + if (minisrv_config.config.debug_flags.quiet) console.debug(" * Sent response " + headers_obj.Status + " to PC client (Content-Type:", headers_obj['Content-type'], "~", headers_obj['Content-length'], "bytes)"); } else { var toClient = null; if (typeof data == 'string') { - toClient = headers + end_of_line + data; + toClient = headers + eol + data; sendToSocket(socket, Buffer.from(toClient)); } else if (typeof data == 'object') { if (minisrv_config.config.debug_flags.quiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; if (socket_sessions[socket.id].secure_headers == true) { // encrypt headers if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers"; - var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + end_of_line); + var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + eol); sendToSocket(socket, new Buffer.from(concatArrayBuffer(enc_headers, data))); } else { - sendToSocket(socket, new Buffer.from(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); + sendToSocket(socket, new Buffer.from(concatArrayBuffer(Buffer.from(headers + eol), data))); } - if (minisrv_config.config.debug_flags.quiet) console.debug(" * Sent" + verbosity_mod + " " + headers_obj.status + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); + if (minisrv_config.config.debug_flags.quiet) console.debug(" * Sent" + verbosity_mod + " " + headers_obj.Status + " to client (Content-Type:", headers_obj['Content-type'], "~", headers_obj['Content-length'], "bytes)"); } } } @@ -2425,11 +2475,17 @@ Content-type: text/html`; }); request_headers.query = req.query; if (req.body) { - var data = ""; - for (var i=0; i');return parseInt(d.z2.v.value)} -function go(u){location.href=u;d.open('text/url');d.write(u);d.close();} -function dial(){go('client:redialphone');go('client:logoshown')} -function nbsp(c){nout='';for(i=0;i'} - out+='' - if(bgm){ - if(bgm.indexOf('.')<0){bgm += '.mid'} - if(bgm.indexOf('/')<0){bgm = cch+'Music/' + bgm} - out+='') - } - d.write('') - } - if(!msg){msg=''} - out+='' - if(!nl){out+=''} - out+=tab(msg); - out+='
' - return out; -} -function tab(msg){ - bgimg=gTC('bgimg') - shimg=gTC('shimg') - bgclr=gTC('bg') - gclr=gTC('g') - if(msg){ - msg=msg.replace(' ',' ') - if(!shimg && bgimg=='Pattern.gif'){msg += nbsp(5)} - tout='' - }else{ - tout='' - } - return tout -} -function ta(r,s,n,b,c,x,u){ - bgclr=gTC('bg') - tclr=gTC('t') - if(u){x+=' usestyle';d.write('')} - d.write(''); - if(u){d.write('')} -} - -function as(bg,h,w,g,b,lc,rc,lo,ro,s){ - if(s){ - if(!lc){lc=gTC('t')} - if(!rc){rc=gTC('bg')} - }else{ - if(!lc){lc=gTC('bg')} - if(!rc){rc=gTC('t')} - } - if(th==1){bgclr='333333'} - if(!bg){bg='191919'} - if(!h){h=32} - if(!w){w=320} - if(!g){g=0} - if(!lo){lo=0} - if(!ro){ro=0} - if(!b){b=1} - d.write('') -} -function butt(v,n,w,t,x){ - if(th>0&&th!=4&&th!=7&&th!=10){sh=true} - bclr=gTC('b') - bbif=gTC('bbif') - if(sh){d.write('')} - d.write('') - if(!t)t='submit' - d.write('') - if(sh){d.write('')} -} -function csa(m,i,b1t,b1a,b2t,b2a) { - u='client:showalert?message='+escape(m); - if(i)u+='&image='+escape(i); - if(b1t)u+='&buttonlabel1='+escape(b1t); - if(b1t&&!b1a){b1a='client:donothing'} - if(b1a)u+='&buttonaction1='+escape(b1a); - if(b2t)u+='&buttonlabel2='+escape(b2t); - if(b2t&&!b2a){b2a='client:donothing'} - if(b2a)u+='&buttonaction2='+escape(b2a); - return u; -} - -function redir(){ - r=history.previous - if(r==htm+'Themes.html'||r==htm+'PhoneCallWaitThresh.html'||r==htm+'BGM.html'||r==htm+'NVRAM.html'||r.indexOf('wtv-')==0){go(r)} -} - -function goHTV(){return go('wtv-home:/home')} -function gsa(m,i,b1t,b1a,b2t,b2a){go(csa(m,i,b1t,b1a,b2t,b2a))} -function head(msg,fs,bgm,lp,nl){d.write(headr(msg,fs,bgm,lp,nl))} -function dhh(tit) {if(tit==1){head('Partition Map','','','',true)}} -function vh(){d.write(headr('VFat Hax'))} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/SharedROMCache/n.js b/zefie_wtvp_minisrv/includes/ServiceVault/SharedROMCache/n.js deleted file mode 100644 index f1cd2056..00000000 --- a/zefie_wtvp_minisrv/includes/ServiceVault/SharedROMCache/n.js +++ /dev/null @@ -1,55 +0,0 @@ -z_nv=null; -z_th=new Array() -z_th[0]='HackTV Light' -z_th[1]='WebTV Dark' -z_th[2]='Amy
Red' -z_th[3]='Basic Web' -z_th[4]='WinXP Tan' -z_th[5]='Ryder Green' -z_th[6]='SKCro Blue' -z_th[7]='Win95 Teal' -z_th[8]='zefie Purple' -z_th[9]='MattMan Brown' -z_th[10]='Paper White' -z_th[11]='Halloween Black' - -z_def=new Array() -z_def[0]=0//theme - -chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@-"//64 possible different values -function gTN(th){return z_th[parseInt(th)]} -function pp(){d.write('
');z_nv=d.z.h.value} -function gB(off){ - if(!z_nv){pp()} - b=z_nv.charAt(parseInt(off)) - if(b){return chars.indexOf(b)} - else{return -1} -} -function sB(off,dat,raw){ - if(!z_nv){pp()} - off=parseInt(off) - prefix='' - if(off>0){prefix=z_nv.substring(0,off)} - if(off>prefix.length){while(off!=prefix.length){prefix+='.'}} - if(!raw){dat=chars.charAt(parseInt(dat));} - z_url='client:ConfirmBYOISPSetup?BYOISPProviderName='+prefix+dat+z_nv.substring(off+1) - go(z_url) -} -function eB(off){ - sB(off,'.',true) -} -function eAll(){ - z_url='client:ConfirmBYOISPSetup?BYOISPProviderName=' - go(z_url) -} -function gV(off){ - off=parseInt(off) - z_len=0 - switch(off){ - case 0:z_len=z_th.length - break - } - z_val=gB(off) - if(z_val<0||z_val>=z_len){return z_def[off]} - return z_val -} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/home.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/home.js index c4a6186a..c1a9e46d 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/home.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/home.js @@ -47,19 +47,17 @@ var supportZefieAlert = new clientShowAlert({ if (ssid_sessions[socket.ssid].get("wtv-used-8675309") || ssid_sessions[socket.ssid].get("wtv-need-upgrade")) { - data = ` +data =` MiniBrowser Home - +
- +
- -
- -MiniBrowser Home   + +MiniBrowser Home  
@@ -85,168 +83,7 @@ if (ssid_sessions[socket.ssid].get("wtv-used-8675309") || ssid_sessions[socket.s ` } else { - hasJS = session_data.hasCap("client-can-do-javascript"); - title = `Home for ${session_data.getSessionData("subscriber_username") || "minisrv"}` - data = ``; - if (hasJS) { - data += `` - } else { - data += ` -
-
- -
- - -
- -${title}           -
`; - } - data += ` - -
-
-Mail - -Favorites - -Music - -Search - -ROMs - -Settings - -Help -
-
-
-` - if (hasJS) { - data += ``; - } else { - data += ``; - } -data += ` - -
- - - - - - - - - - -
- - - - - - - - -
» Community «
€ Chat
€ Discuss
€ Messenger
-
- - - - - - - - - - - - -
» Account «
€ Relogin
€ Configure
€ Password
€ Add User
-`; - if (session_data.getSessionData("registered")) data += `€ Unregister`; - else data += `€ Register` - data += ` -
-
- - - - - - - - - -
» Tools «
€ WTV Tricks
€ Themes -
€ Pagebuilder
€ Clear Cache
-
- - - - - - - - - - -
» More Stuff «
€ Switch server
€ Run your own server
€ Midnight Archives
€ Help zefie
-
- - - -
- -` - if (hasJS) { - data += `` - } else { - data += ` - - - -` - if (hasJS) { - data += `` - } else { - data += ` - - -
` - } - data += ` - € Welcome to zefie's minisrv ${minisrv_version_string.split(" ")[3]} -
-This server is operated by ${minisrv_config.config.service_owner}.
-`; - if (minisrv_config.config.service_description) { - if (typeof minisrv_config.config.service_description === "string") { - if (minisrv_config.config.service_description.length > 0) { - data += minisrv_config.config.service_description; - } - } - } - - data += ` -

-
` - } - data += ` - € minisrv Latest Updates -
-•  Redesigned home page, uses custom rom theme system.
-•  Added Protoweb Support (Try it!)
-•  Added a new minisrv logo
-
-
- -` -} - -/* -data =` - - - - +data = ` Home for ${session_data.getSessionData("subscriber_username") || "minisrv"} @@ -507,4 +344,3 @@ data += ` ` } data += "</body>\n</html>"; -*/ \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/splash.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/splash.js index 93536821..b5e1d8e7 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/splash.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-home/splash.js @@ -8,7 +8,7 @@ Content-Type: text/html` data = `<html> <head> -<display hideoptions nostatus showwhencomplete switchtowebmode skipback clearback fontsize=medium> +<display hideoptions nostatus showwhencomplete skipback clearback fontsize=medium> <title>Engaging zefie... diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAccountInfo.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAccountInfo.js index 971a0f22..ef31fad5 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAccountInfo.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAccountInfo.js @@ -5,7 +5,6 @@ if (!request_headers.query.registering) { headers = errpage[0]; data = errpage[1]; } else { - var hasJS = session_data.hasCap("client-can-do-javascript"); const WTVRegister = require(classPath + "/WTVRegister.js") var wtvr = new WTVRegister(minisrv_config, SessionStore); var errpage = null; @@ -26,10 +25,15 @@ if (!request_headers.query.registering) { } else { headers = `200 OK +wtv-noback-all: wtv-register: Content-Type: text/html`; var title = "Account Review"; - var main_data = ``; + if (isOldBuild) main_data += '
-
+ var isOldBuild = wtvshared.isOldBuild(session_data); + var main_data = ''; + if (!isOldBuild) main_data += ` +
`; + + main_data += ` @@ -38,7 +42,10 @@ Content-Type: text/html`;  
Here is your account information. If you need to
-correct an item, press Back.

+correct an item, press Back.

`; + if (isOldBuild) main_data += "

"; + + main_data += `
  NAME
@@ -62,18 +69,13 @@ correct an item, press Back.

${request_headers.query.subscriber_contact_method}

 

 

-

`; - - - var form_data = ''; - if (hasJS) { - form_data += ``; - } - else { - form_data += ``; - } - - form_data += '
'; - data = wtvr.getHTMLTemplate(title, main_data, form_data, hasJS); +
'; + var form_data = ` + + + +`; + data = wtvr.getHTMLTemplate(title, main_data, form_data, isOldBuild); } -} \ No newline at end of file +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAgreement.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAgreement.js index 49b0a53a..e53fc3d0 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAgreement.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateAgreement.js @@ -5,7 +5,6 @@ if (!request_headers.query.registering) { headers = errpage[0]; data = errpage[1]; } else { - var hasJS = session_data.hasCap("client-can-do-javascript"); const WTVRegister = require(classPath + "/WTVRegister.js") var wtvr = new WTVRegister(minisrv_config); headers = `200 OK @@ -14,39 +13,32 @@ Content-Type: text/html`; ENCTYPE="x-www-form-encoded" METHOD="POST"> Please set up your account:

- - - - - - - - - - - - -
YOUR NAME: - - - -
+ +

DESIRED USERNAME: - -

- -
+ +

YOUR CONTACT INFO: -

-
CONTACT INFO TYPE: - - @@ -54,13 +46,11 @@ AutoCaps selected> -
`; - var form_data = `` - if (hasJS) { - form_data += ``; - } else { - form_data += ``; - } - form_data += ``; - data = wtvr.getHTMLTemplate(minisrv_config.config.service_name + " Account Setup", main_data, form_data, hasJS); -} \ No newline at end of file +`; + var form_data = ` + + + +`; + data = wtvr.getHTMLTemplate(minisrv_config.config.service_name + " Account Setup", main_data, form_data, wtvshared.isOldBuild(session_data)); +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateReviewAccountInfo.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateReviewAccountInfo.js index 0da4c250..beebdb59 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateReviewAccountInfo.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/ValidateReviewAccountInfo.js @@ -51,37 +51,78 @@ if (!request_headers.query.registering || data = errpage[1]; } else { - var hasJS = session_data.hasCap("client-can-do-javascript") headers = `200 OK Content-Type: text/html`; - var title = "Finished signing up"; - var main_data = `
- - - - + + data = ` + + +Finished signing up + + + + + + + + + +
+ + + +
+ + + + + +You've finished signing up + +
+ +
+ + + + + + + +
+ + Thank you for signing up for ${minisrv_config.config.service_name}.

You will now go to your Web Home page. You can always connect to the Internet by choosing -Web Home on your TV Home page.`; - - - var form_data = ''; - if (hasJS) { - form_data += ``; - } - else { - form_data += ``; - } - - form_data += ''; - data = wtvr.getHTMLTemplate(title, main_data, form_data, hasJS); - - headers = `200 OK -Content-Type: text/html`; +Web Home on your TV Home page. + +

+
+ +
+
+ + + + + + + + + +
+ + +`; } } -} \ No newline at end of file +} diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/register.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/register.js index 240baa13..83e0a917 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/register.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-register/register.js @@ -8,23 +8,19 @@ var wtvr = new WTVRegister(minisrv_config); var namerand = Math.floor(Math.random() * 100000); var nickname = (minisrv_config.config.service_name + '_' + namerand) var human_name = nickname; -var hasJS = session_data.hasCap("client-can-do-javascript") && parseInt(session_data.get('wtv-system-version')) >= 2000; -var form_data = ""; +var isOldBuild = wtvshared.isOldBuild(session_data); +var form_data = ``; +if (minisrv_config.config.allow_guests) form_data += ``; var main_data = `
Welcome to the ${minisrv_config.config.service_name} Mini Service, operated by ${minisrv_config.config.service_owner}. The next screens will lead you through a quick setup process for using this service.

Press the "Continue" button below to begin setup.

`; -if (hasJS) { - form_data = ``; -} else { - form_data = ``; - if (minisrv_config.config.allow_guests) form_data += ``; - form_data += ``; -} +form_data += ` + + +

+`; -form_data += ``; -data = wtvr.getHTMLTemplate("Welcome to " + minisrv_config.config.service_name, main_data, form_data, hasJS); \ No newline at end of file +data = wtvr.getHTMLTemplate("Welcome to " + minisrv_config.config.service_name, main_data, form_data, isOldBuild); diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-setup/phone-BYOISP-Done.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-setup/phone-BYOISP-Done.js deleted file mode 100644 index 2b2f22d1..00000000 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-setup/phone-BYOISP-Done.js +++ /dev/null @@ -1,7 +0,0 @@ -var minisrv_service_file = true; - -headers = `302 Moved -Connection: Keep-Alive -wtv-expire-all: wtv-tricks:/themes -Location: wtv-tricks:/themes -Content-Type: text/html` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-tricks/themes.html b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-tricks/themes.html deleted file mode 100644 index adceab0b..00000000 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-tricks/themes.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -
-
-
- Please select the theme you would like to use from the list below. Click done when finished.
-
-
-

-
\ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/classes/WTVRegister.js b/zefie_wtvp_minisrv/includes/classes/WTVRegister.js index 2aa1e7be..c2ba4cad 100644 --- a/zefie_wtvp_minisrv/includes/classes/WTVRegister.js +++ b/zefie_wtvp_minisrv/includes/classes/WTVRegister.js @@ -22,7 +22,7 @@ class WTVRegister { } checkUsernameSanity(username) { - var regex_str = "^([A-Za-z0-9\-\_]{" + this.minisrv_config.config.user_accounts.min_username_length + "," + this.minisrv_config.config.user_accounts.max_username_length + "})$"; + var regex_str = "^([A-Za-z0-9-\_]{" + this.minisrv_config.config.user_accounts.min_username_length + "," + this.minisrv_config.config.user_accounts.max_username_length + "})$"; var regex = new RegExp(regex_str); return regex.test(username); } @@ -73,29 +73,40 @@ class WTVRegister { * @param {string} title HTML Page Title * @param {string} main_content Main center content * @param {string} form_buttons Form and buttons + * @param {boolean} is_old_build True or false * @returns {string} HTML Page */ - getHTMLTemplate(title, main_content, form_buttons, hasJS) { + getHTMLTemplate(title, main_content, form_buttons, is_old_build) { var data; - data = ``; - if (hasJS) { - data += `` - } else { - data += ` - -
- -
- - -
- -${title}           -
`; - } - data += ` - - + if (is_old_build) { + data = ` + + + ${title} + + + + +
+ + + +
+ + + + + + + + +
+ ${title} +
+
+
+
+
@@ -121,9 +132,67 @@ class WTVRegister { `; + } else { + data = ` + + + ${title} + + + + + + + + + +
+ + + +
+ + + + + +${title} + +
+ +
+ + + + + + + + +
+ +${main_content} + +
+ +
+
+ + + + +${form_buttons} + +
+ +`; + } return data; } } -module.exports = WTVRegister; \ No newline at end of file +module.exports = WTVRegister; diff --git a/zefie_wtvp_minisrv/includes/classes/WTVShared.js b/zefie_wtvp_minisrv/includes/classes/WTVShared.js index 9b1553c7..8a1e707d 100644 --- a/zefie_wtvp_minisrv/includes/classes/WTVShared.js +++ b/zefie_wtvp_minisrv/includes/classes/WTVShared.js @@ -520,8 +520,8 @@ class WTVShared { if (minisrv_config.config.verbosity >= 0 && minisrv_config.config.verbosity <= 3) { debugFlags.quiet = minisrv_config.config.verbosity < 2; - debugFlags.show_headers = minisrv_config.config.verbosity % 2 === 1; - debugFlags.debug = minisrv_config.config.verbosity === 2 || minisrv_config.config.verbosity === 3; + debugFlags.show_headers = minisrv_config.config.verbosity === 2 + debugFlags.debug = minisrv_config.config.verbosity === 3; log(` * Console Verbosity level ${minisrv_config.config.verbosity}`); } else { Object.assign(debugFlags, { debug: true, quiet: false, show_headers: true }); diff --git a/zefie_wtvp_minisrv/package-lock.json b/zefie_wtvp_minisrv/package-lock.json index 428edfa8..09411e16 100644 --- a/zefie_wtvp_minisrv/package-lock.json +++ b/zefie_wtvp_minisrv/package-lock.json @@ -1,15 +1,14 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.55", + "version": "0.9.56", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zefie_wtvp_minisrv", - "version": "0.9.55", + "version": "0.9.56-pre", "license": "GPL3", "dependencies": { - "@mafintosh/vm2": "^3.9.2", "adm-zip": "^0.5.12", "crypto-js": "^4.2.0", "easy-crc": "0.0.2", @@ -25,7 +24,6 @@ "proxy-agent": "^6.4.0", "rc4-crypto": "^1.5.0", "sanitize-html": "^2.13.0", - "socks-proxy-agent": "^8.0.2", "strftime": "^0.10.2", "uuid": "^8.3.2" }, @@ -138,18 +136,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@mafintosh/vm2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@mafintosh/vm2/-/vm2-3.9.2.tgz", - "integrity": "sha512-lQS+7KT5H88iMmbz94X9L1B2lY3TTxRbh8etoAaYGfR1rGQLRr4TmejVzAXN65fJWJAHPRgVKHk/wD75XKsfOw==", - "license": "MIT", - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", diff --git a/zefie_wtvp_minisrv/package.json b/zefie_wtvp_minisrv/package.json index cf4fd162..c7dfd47b 100644 --- a/zefie_wtvp_minisrv/package.json +++ b/zefie_wtvp_minisrv/package.json @@ -1,6 +1,6 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.55", + "version": "0.9.56", "description": "WebTV Service (WTVP) Emulation Server", "main": "app.js", "homepage": "https://github.com/zefie/zefie_wtvp_minisrv", @@ -26,7 +26,6 @@ "url": "https://github.com/zefie/zefie_wtvp_minisrv.git" }, "dependencies": { - "@mafintosh/vm2": "^3.9.2", "adm-zip": "^0.5.12", "crypto-js": "^4.2.0", "easy-crc": "0.0.2", @@ -42,7 +41,6 @@ "proxy-agent": "^6.4.0", "rc4-crypto": "^1.5.0", "sanitize-html": "^2.13.0", - "socks-proxy-agent": "^8.0.2", "strftime": "^0.10.2", "uuid": "^8.3.2" }, diff --git a/zefie_wtvp_minisrv/user_config.pconly_example.json b/zefie_wtvp_minisrv/user_config.pconly_example.json new file mode 100644 index 00000000..6f715858 --- /dev/null +++ b/zefie_wtvp_minisrv/user_config.pconly_example.json @@ -0,0 +1,99 @@ +{ + /* + STOP! STOP! STOP! + Do NOT edit this file. Instead make a file called "user_config.json" in the same folder as "app.js" + With that, you can override anything defined here. You can copy this config as a template, but should + only leave in things you are actually overriding, in case a future feature update changes any defaults. + */ + "services": { + // service definitions + + "wtv-head-waiter": { + "disabled": true + }, + "wtv-tricks": { + "disabled": true + }, + "wtv-star": { + "disabled": true + }, + "wtv-news": { + "disabled": true + }, + "news": { + "disabled": true + }, + "wtv-register": { + "disabled": true + }, + "wtv-log": { + "disabled": true + }, + "wtv-home": { + "disabled": true + }, + "wtv-1800": { + "disabled": true + }, + "wtv-flashrom": { + "disabled": true + }, + "wtv-setup": { + "disabled": true + }, + "wtv-music": { + "disabled": true + }, + "wtv-cookie": { + "disabled": true + }, + "wtv-chat": { + "disabled": true + }, + "wtvchat": { + "disabled": true + }, + "irc": { + "disabled": true + }, + "wtv-disk": { + "disabled": true + }, + "wtv-guide": { + "disabled": true + }, + "wtv-mail": { + "disabled": true + }, + "wtv-passport": { + "disabled": true + }, + "wtv-favorite": { + "disabled": true + }, + "wtv-admin": { + "disabled": true + }, + "wtv-author": { + "disabled": true + }, + "http": { + "disabled": true + }, + "https": { + "disabled": true + }, + "proto": { + "disabled": true + }, + "pb_services": { + "disabled": true + }, + "pc_services": { + // PC Services + "port": 1699, + "pc_services": true, + "disabled": false + } + } +} diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.code-workspace b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.code-workspace index 2c2577af..8dc0a8c5 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.code-workspace +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.code-workspace @@ -5,5 +5,6 @@ } ], "settings": { + "codeQL.createQuery.qlPackLocation": "/home/zefie/dev/zefie_wtvp_minisrv" } } \ No newline at end of file