From 150f0253b80a2d3746006d312709e69fcb33a8b3 Mon Sep 17 00:00:00 2001 From: zefie Date: Thu, 29 Jul 2021 09:06:42 -0400 Subject: [PATCH] v0.9.8 fix: app.js: Use \r\n, fix connections= service setting update: config.json: fix some service flags that were misset Add ServiceFlags.txt: brief description of wtv-service flags update: Moved tellyscripts to wtv-1800:/preregister update: fixed bug where "send_tellyscript was undefined" update: initial work on bf0app flashrom support (incomplete) --- ServiceFlags.txt | 16 ++ .../bf0app/bf0app_production_braindead.tok | Bin 0 -> 5168 bytes .../ServiceVault/wtv-1800/finish-prereg.js | 78 ---------- .../ServiceVault/wtv-1800/noflash.js.meh | 49 +++++++ .../ServiceVault/wtv-1800/preregister.js | 137 ++++++++++++++++-- .../ServiceVault/wtv-flashrom/get-by-path.js | 3 +- .../wtv-flashrom/initiate-lc2-download.js | 9 +- zefie_wtvp_minisrv/app.js | 14 +- zefie_wtvp_minisrv/config.json | 12 +- zefie_wtvp_minisrv/package.json | 2 +- zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj | 1 - 11 files changed, 210 insertions(+), 111 deletions(-) create mode 100644 ServiceFlags.txt create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead.tok delete mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-1800/finish-prereg.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh diff --git a/ServiceFlags.txt b/ServiceFlags.txt new file mode 100644 index 00000000..88f316d9 --- /dev/null +++ b/ServiceFlags.txt @@ -0,0 +1,16 @@ +wtv service flags: +DontEncryptRequests (Do not encrypt requests from client -> server) +UseHTTP (Instead of WTVP) +WideOpen (Allow untrusted links to this service) +UseServiceCookies (Pass service cookie to this service) +NoMeter (Dont meter this service) + +0x00000001 = DontEncryptRequests +0x00000002 = UseHTTP (untested) +0x00000004 = WideOpen +0x00000007 = DontEncryptRequests + WideOpen + UseHTTP +0x00000010 = UseServiceCookies +0x00000040 = NoMeter + +Note: +Service Cookies and Metering are not implemented in minisrv. \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead.tok new file mode 100644 index 0000000000000000000000000000000000000000..e1410f425d78034cbe59d5f3f02172c9c4c06898 GIT binary patch literal 5168 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 CbZI^S literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/finish-prereg.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/finish-prereg.js deleted file mode 100644 index b7e3f32c..00000000 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/finish-prereg.js +++ /dev/null @@ -1,78 +0,0 @@ -if (socket.ssid != null) { - if (!ssid_sessions[socket.ssid].data_store.wtvsec_login) { - ssid_sessions[socket.ssid].data_store.wtvsec_login = new WTVSec(); - ssid_sessions[socket.ssid].data_store.wtvsec_login.IssueChallenge(); - ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); - } -} else { - console.log(" * Something bad happened (we don't know the client ssid???)"); - var errpage = doErrorCode(400) - headers = errpage[0]; - data = errpage[1]; -} - -if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { - var prereg_contype = "text/html"; - - if (request_headers.query.relogin) { // relogin - ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = null; // clear old ticket - } - - // if relogin and wtv-script-id != 0, skip tellyscript - var romtype, file_path = null; - var send_tellyscript = true; - var wtv_script_id = parseInt(ssid_sessions[socket.ssid].get("wtv-script-id")); - if (request_headers.query.relogin && wtv_script_id != 0) send_tellyscript = false; - if (send_tellyscript && minisrv_config.services[service_name].send_tellyscripts) { - if (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist) { - var send_telly_to_ssid = (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist.findIndex(element => element == socket.ssid) != -1) - if (send_telly_to_ssid) romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); - } else { - romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); - } - } - - switch (romtype) { - case "US-LC2-disk-0MB-8MB": - prereg_contype = "text/tellyscript"; - // if wtv-open-access: true then client expects OpenISP - if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OISP_5555732_56k.tok"; - else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199_56k.tok"; - break; - - default: - data = ''; - break; - } - - headers = `200 OK -Connection: Keep-Alive -wtv-initial-key: ` + ssid_sessions[socket.ssid].data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + ` -Content-Type: `+ prereg_contype + ` -wtv-service: reset -` + getServiceString('wtv-1800') + ` -` + getServiceString('wtv-star') + ` -` + getServiceString('wtv-head-waiter') + ` -` + getServiceString('wtv-flashrom') + ` -wtv-boot-url: wtv-1800:/preregister?relogin=true -wtv-visit: wtv-head-waiter:/login? -wtv-client-time-zone: GMT -0000 -wtv-client-time-dst-rule: GMT -wtv-client-date: `+ strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + ` GMT`; - - if (file_path) { - request_is_async = true; - fs.readFile(file_path, null, function (err, file_read_data) { - if (err) { - var errmsg = doErrorCode(400); - headers = errmsg[0]; - file_read_data = errmsg[1] + "\n" + err.toString(); - } - sendToClient(socket, headers, file_read_data); - }); - } -} else { - var errpage = doErrorCode(400); - headers = errpage[0]; - data = errpage[1]; -} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh new file mode 100644 index 00000000..89b09d45 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh @@ -0,0 +1,49 @@ +if (socket.ssid != null && !ssid_sessions[socket.ssid].get("wtvsec_login")) { + var wtvsec_login = new WTVSec(); + wtvsec_login.IssueChallenge(); + wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); + ssid_sessions[socket.ssid].set("wtvsec_login", wtvsec_login); +} else if (socket.ssid != null) { + var wtvsec_login = ssid_sessions[socket.ssid].get("wtvsec_login"); +} + +if (wtvsec_login) { + + +headers = `200 OK +Connection: Keep-Alive +wtv-initial-key: ` + wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + ` +Content-Type: text/tellyscript +wtv-service: reset +` + getServiceString('wtv-head-waiter') + ` +` + getServiceString('wtv-star') + ` +` + getServiceString('wtv-flashrom') + ` +wtv-boot-url: wtv-head-waiter:/login? +wtv-visit: wtv-head-waiter:/login? +wtv-client-time-zone: GMT -0000 +wtv-client-time-dst-rule: GMT +wtv-client-date: `+ strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + ` GMT`; + + var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead"; + //var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OISP_5555732_56k.tok"; + + if (file_path) { + request_is_async = true; + fs.readFile(file_path, null, function (err, file_read_data) { + if (err) { + + headers=`500 Some error occurred...` + } + sendToClient(socket, headers, file_read_data); + }); + + + + + } +} else { + console.log(" * Something bad happened (we don't know the client ssid???)"); + headers=`500 missing ssid` +} + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js index ebb0d9a6..80cb0b13 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js @@ -1,10 +1,6 @@ -var gourl = "wtv-1800:/finish-prereg?"; +var gourl = "wtv-head-waiter:/login?"; if (request_headers.query.relogin) gourl += "relogin=true"; - - -if (request_headers["wtv-ticket"]) { - gourl = "wtv-head-waiter:/login-stage-two?"; -} +var send_initial_key = true; if (socket.ssid) { if (ssid_sessions[socket.ssid].data_store) { @@ -19,17 +15,132 @@ if (socket.ssid) { } } }); - if (i > 0 && zdebug) console.log(" # Closed", i, "previous sockets for", socket.ssid); + if (i > 0 && zdebug) console.log(" # Closed", i, "previous sockets for", filterSSID(socket.ssid)); } } if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { delete ssid_sessions[socket.ssid].data_store.wtvsec_login; } + + ssid_sessions[socket.ssid].data_store.wtvsec_login = new WTVSec(); + ssid_sessions[socket.ssid].data_store.wtvsec_login.IssueChallenge(); + ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); +} else { + console.log(" * Something bad happened (we don't know the client ssid???)"); + var errpage = doErrorCode(400) + headers = errpage[0]; + data = errpage[1]; } -headers = `200 OK -Connection: Keep-Alive -wtv-expire-all: wtv- -wtv-open-isp-disabled: false -wtv-visit: `+ gourl + ` -Content-type: text/html`; +if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { + var prereg_contype = "text/html"; + + if (request_headers.query.relogin) { // relogin + ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = null; // clear old ticket + } + + // if relogin and wtv-script-id != 0, skip tellyscript + var file_path = null; + var bf0app_update = false; + var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + var send_tellyscripts = (minisrv_config.services[service_name].send_tellyscripts && !request_headers.query.relogin); + var wtv_script_id = parseInt(ssid_sessions[socket.ssid].get("wtv-script-id")); + var bootrom = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version"); + if (request_headers.query.relogin && wtv_script_id != 0) send_tellyscript = false; + if (send_tellyscripts) { + if (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist) { + var send_telly_to_ssid = (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist.findIndex(element => element == socket.ssid) != -1) + if (send_telly_to_ssid) { + romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + } + } else { + romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + } + + switch (romtype) { + case "US-LC2-disk-0MB-8MB": + prereg_contype = "text/tellyscript"; + // if wtv-open-access: true then client expects OpenISP + if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OISP_5555732_56k.tok"; + else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/lc2_production_normal.tok"; + break; + + case "US-LC2-disk-0MB-8MB-softmodem-CPU5230": + prereg_contype = "text/tellyscript"; + // if wtv-open-access: true then client expects OpenISP + if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/DERBY/derby_production_normal.tok"; + else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/DERBY/derby_production_normal.tok"; + break; + + case "US-WEBSTAR-disk-0MB-16MB-softmodem-CPU5230": + prereg_contype = "text/tellyscript"; + // if wtv-open-access: true then client expects OpenISP + if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/WEBSTAR/dishplayer_production_normal.tok"; + else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/WEBSTAR/dishplayer_production_normal.tok"; + break; + + case "JP-Fiji": + prereg_contype = "text/tellyscript"; + // if wtv-open-access: true then client expects OpenISP + if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/DC/dc_production_normal.tok"; + else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/DC/dc_production_normal.tok"; + break; + + case "bf0app": + prereg_contype = "text/tellyscript"; + // if wtv-open-access: true then client expects OpenISP + if (ssid_sessions[socket.ssid].get("wtv-open-access") == "true") var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_production_braindead.tok"; + else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_production_braindead.tok"; + break; + + default: + data = ''; + break; + } + } + + if (!request_headers['wtv-client-rom-type'] && bootrom == "105") { + // assume old classic in flash mode, override user setting and send tellyscript + // because it is required to proceed in flash mode + prereg_contype = "text/tellyscript"; + var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead.tok"; + bf0app_update = true; + } + + if (request_headers["wtv-ticket"]) { + gourl = "wtv-head-waiter:/login-stage-two?relogin=true"; + send_initial_key = false; + } + + headers = "200 OK\n" + headers += "Connection: Keep-Alive\n"; + if (send_initial_key) headers += "wtv-initial-key: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + "\n"; + headers += "Content-Type: " + prereg_contype + "\n"; + headers += "wtv-service: reset\n"; + headers += getServiceString('wtv-1800') + "\n"; + headers += getServiceString('wtv-star') + "\n"; + if (!bf0app_update) headers += getServiceString('wtv-head-waiter') + "\n"; + headers += getServiceString('wtv-flashrom') + "\n"; + if (!bf0app_update) headers += "wtv-boot-url: wtv-1800:/preregister?relogin=true\n" + if (!bf0app_update) headers += "wtv-open-isp-disabled: false\n"; + if (!bf0app_update) headers += "wtv-visit: "+gourl+"\n"; + if (!bf0app_update) headers += "wtv-client-time-zone: GMT -0000\n"; + if (!bf0app_update) headers += "wtv-client-time-dst-rule: GMT\n" + if (!bf0app_update) headers += "wtv-client-date: " + strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + " GMT"; + + if (file_path) { + request_is_async = true; + fs.readFile(file_path, null, function (err, file_read_data) { + if (err) { + var errmsg = doErrorCode(400); + headers = errmsg[0]; + file_read_data = errmsg[1] + "\n" + err.toString(); + } + sendToClient(socket, headers, file_read_data); + }); + } +} else { + var errpage = doErrorCode(400); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js index fcc973e9..004221d5 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js @@ -22,8 +22,9 @@ function doLocalFlashROM(flashrom_file_path) { } } +var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); -if (request_headers.query.raw) { +if (request_headers.query.raw || romtype == "bf0app") { if ((/\.brom$/).test(request_path)) headers += "Content-Type: binary/x-wtv-bootrom"; // maybe? else headers += "Content-Type: binary/x-wtv-flashblock"; var flashrom_file_path = null; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js index dcc51996..8ba45429 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js @@ -1,7 +1,12 @@ if (request_headers.query.path) { +var url = "wtv-flashrom:/get-lc2-page?path=" + request_headers.query.path; +var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); +if (romtype == "bf0app") { + url = "client:updateflash?ipaddr="+minisrv_config.services[service_name].host+"&port="+minisrv_config.services[service_name].port+"&path=" + request_headers.query.path; +} headers = "300 OK\n"; - headers += "wtv-visit: wtv-flashrom:/get-lc2-page?path=" + request_headers.query.path + "\n"; - headers += "Location: wtv-flashrom:/get-lc2-page?path=" + request_headers.query.path + "\n"; + headers += "wtv-visit: " + url + "\n"; + headers += "Location: " + url + "\n"; headers += "Content-type: text/html"; data = ''; } else { diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index ed1d5595..e3691b90 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -494,9 +494,9 @@ async function sendToClient(socket, headers_obj, data) { } else { if (k.indexOf('_') >= 0) { var j = k.split('_')[0]; - headers += j + ": " + headers_obj[k] + "\n"; + headers += j + ": " + headers_obj[k] + "\r\n"; } else { - headers += k + ": " + headers_obj[k] + "\n"; + headers += k + ": " + headers_obj[k] + "\r\n"; } } }); @@ -505,17 +505,17 @@ async function sendToClient(socket, headers_obj, data) { // send to client var toClient = null; if (typeof data == 'string') { - toClient = headers + "\n" + data; + toClient = headers + "\r\n" + data; socket.write(toClient); } else if (typeof data == 'object') { if (zquiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; if (socket_sessions[socket.id].secure_headers == true) { // encrypt headers if (zquiet)verbosity_mod += " with encrypted headers"; - var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + "\n"); + var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + "\r\n"); socket.write(new Uint8Array(concatArrayBuffer(enc_headers, data))); } else { - socket.write(new Uint8Array(concatArrayBuffer(Buffer.from(headers + "\n"), data))); + socket.write(new Uint8Array(concatArrayBuffer(Buffer.from(headers + "\r\n"), data))); } if (zquiet) console.log(" * Sent" + verbosity_mod + " " + headers_obj.http_response + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-Length'], "bytes)"); } @@ -1221,11 +1221,11 @@ Object.keys(minisrv_config.services).forEach(function (k) { minisrv_config.services[k].toString = function () { var outstr = "wtv-service: name=" + this.name + " host=" + this.host + " port=" + this.port; if (this.flags) outstr += " flags=" + this.flags; - if (this.connections) outstr += " flags=" + this.connections; + if (this.connections) outstr += " connections=" + this.connections; if (k == "wtv-star") { outstr += "\nwtv-service: name=wtv-* host=" + this.host + " port=" + this.port; if (this.flags) outstr += " flags=" + this.flags; - if (this.connections) outstr += " flags=" + this.connections; + if (this.connections) outstr += " connections=" + this.connections; } return outstr; } diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json index f6b86d21..4c69fe7a 100644 --- a/zefie_wtvp_minisrv/config.json +++ b/zefie_wtvp_minisrv/config.json @@ -17,6 +17,7 @@ "wtv-1800": { "port": 1615, "connections": 1, + "flags": "0x00000004", "send_tellyscripts": false }, "wtv-star": { @@ -25,12 +26,10 @@ }, "wtv-head-waiter": { "port": 1601, - "flags": "0x00000001", "connections": 1 }, "wtv-update": { - "port": 1619, - "flags": "0x04", + "port": 1635, "connections": 3 }, "wtv-log": { @@ -39,8 +38,7 @@ "write_logs_to_disk": false }, "wtv-home": { - "port": 1612, - "flags": "0x00000010" + "port": 1612 }, "wtv-tricks": { "port": 1602, @@ -53,7 +51,6 @@ }, "wtv-music": { "port": 1656, - "flags": "0x04", "connections": 3 }, "wtv-setup": { @@ -63,8 +60,7 @@ }, "wtv-chat": { "port": 1630, - "connections": 3, - "flags": "0x00000010" + "connections": 3 }, "http": { "port": 1650, diff --git a/zefie_wtvp_minisrv/package.json b/zefie_wtvp_minisrv/package.json index 1f2fd2a6..2feae443 100644 --- a/zefie_wtvp_minisrv/package.json +++ b/zefie_wtvp_minisrv/package.json @@ -1,6 +1,6 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.7", + "version": "0.9.8", "description": "WebTV Service (WTVP) Emulation Server", "main": "app.js", "homepage": "https://github.com/zefie/zefie_wtvp_minisrv", diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index 96f24d9f..b40cd310 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -200,7 +200,6 @@ -