From 9f28c97943ea25099ad028a64c7217574a50ae31 Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 13 Aug 2021 14:53:54 -0400 Subject: [PATCH 1/6] fix: LC2+ flashrom upgrades were looping --- .../ServiceVault/wtv-flashrom/get-lc2-page.js | 7 +++++-- .../ServiceVault/wtv-flashrom/lc2-download-complete.js | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js index b71cfd69..4af7560b 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js @@ -92,10 +92,13 @@ data += ` From f948348c5107a83be568e5f0e286aa665bb8aa93 Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 13 Aug 2021 16:02:18 -0400 Subject: [PATCH 2/6] update tellyscript --- .../LC2/LC2_WTV_18006138199.detok.txt | 2 +- .../LC2/LC2_WTV_18006138199.tok | Bin 2410 -> 2399 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt index 3e34e729..5cc3e7e9 100644 --- a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt +++ b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt @@ -351,7 +351,7 @@ main() flush(); - setprogresstext("Dialing your hacky modem..."); + setprogresstext("Dialing HackTV..."); setprogresspercentage(32); setprogressdirty(1); diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok index 3d140d83143c3b39159dd4ad41af54ffb60a4b64..dac95ae865324bd67eed992842f2ce75c9126d08 100644 GIT binary patch delta 816 zcmV-01JC^G65kS#7YRE602M4cb%GV{dCu50RU+1toK^0Z}Xfa0`;mMNV3x zCJqM(sBmx)JeW)?WK5Mn0$rHHQ#-0P`9p>Ucz`TZ;`w7b1)zEb0y1xMYakhr5Otz| zfYOq@nQ)@xFw!dKk|E9DCi8$iR^g=J;cv-DZ?6~MO=`vt|LXVr4r12P(l&*4155pvO zatOtui~(5^J{uo}gm*I*6a!^s7$1gV)N}zKRLR2mRNYP=P&|;y`W2MmC+eYV5 zZe?Tnk#lt8VRRP2CJ$gAC{t5^=X7CmvchNpZFOz|X`+BUpl2WMn||SEALvMW5=T-E zkau);Uk*Y^QG}x}MpG(~(*a550UvdAWoBcz0VM!DA4YHHRdZp{nj&V=bvdxaiV?Bk zQqC_m4>bdDVH0z6l0bR^QyLaZ2DJeYEwv~GtN{}Sa6Gv`a&!*-nllf3kAggX= z!Z2w%2W19wasxv8t>IuD?F1r7`{Z*psY zBaj+(tbp8-qQ;qUtm8V;@RA|d;3g9NfIMK~uHbLegPIV+U@mI`Loq)D0WbrAT`~&* zP~qcm;o?g#x1YC`1!RYCARurPu;UguCpGY0a2-@~Lo|f&WxJ5&I3ToVw4nR}VRUZ+ zY1spWqn_fp0X+w#L34inS3am=ZgY2kWpV&#FL!$q;b$**cBmLXP+w9EqyfspWqX`M z6gMOv;IjW`Z*(9hC37eLAYpVMZ)9X34|Hj5Wgoz|68icrkACQNEvC_}_(#2DMCbJ+; zVQppiQ)P0DfO9$^G5ats0Rc5IEFd_^E&&2jm2M^gzmRrm&0|oJIxqkLaPTZc;W&Zd z0|1~uJlAA&W$vz!WgtC!&@3Qi`C|_(`Q*`rTa=gN50Bv<{X#lK%MxbXO_?w8~ zXCLTD5=XsK7m#;!c3%!cQKXKeFGf=|kkbK4<^gpNbY*5^xB(>qJRf=HBUN*2(V8M~ z(RD+xiV@ Date: Fri, 13 Aug 2021 16:02:27 -0400 Subject: [PATCH 3/6] no, its not --- zefie_wtvp_minisrv/app.js | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 06aef768..571bbbc5 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -585,25 +585,7 @@ async function sendToClient(socket, headers_obj, data) { } } } - - //is this needed here? - /* - if (content_length > 0) { - if (socket_sessions[socket.id].wtv_request_type == "download") { - if (headers_obj['Content-Type'] != "wtv/download-list") { - if (wtvshared.getFileExt(socket_sessions[socket.id].request_headers.request_url).toLowerCase() == "gz") { - // we need the checksum of the uncompressed data - var gunzipped = zlib.gunzipSync(data); - headers_obj['wtv-checksum'] = CryptoJS.MD5(CryptoJS.lib.WordArray.create(gunzipped)).toString(CryptoJS.enc.Hex).toLowerCase(); - headers_obj['wtv-uncompressed-size'] = gunzipped.byteLength; - gunzipped = null; - } else { - headers_obj['wtv-checksum'] = CryptoJS.MD5(CryptoJS.lib.WordArray.create(data)).toString(CryptoJS.enc.Hex).toLowerCase(); - } - } - } - } - */ + // if box can do compression, see if its worth enabling // small files actually get larger, so don't compress them From 549848613cf411d81eade4bde988bdc1a4c2bfb8 Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 13 Aug 2021 17:00:49 -0400 Subject: [PATCH 4/6] rename variables in sync.js --- .../ServiceVault/wtv-disk/sync.js | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js index 7f653a1b..04be6bf5 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js @@ -207,36 +207,38 @@ if (request_headers['wtv-request-type'] == 'download') { var wtv_download_list = new Array(); var newest_file_epoch = version; Object.keys(diskmap_group_data.files).forEach(function (k) { - if (!diskmap_group_data.files[k].location) diskmap_group_data.files[k].location = diskmap_group_data.location + diskmap_group_data.files[k].file.replace(diskmap_group_data.base, ""); - var post_match_file = null; + if (!diskmap_group_data.files[k].location) diskmap_group_data.files[k].location = wtvshared.makeSafePath(diskmap_group_data.location,diskmap_group_data.files[k].file.replace(diskmap_group_data.base, "")); + var diskmap_data_file = null; Object.keys(service_vaults).forEach(function (g) { - if (post_match_file != null) return; - post_match_file = service_vaults[g] + "/" + service_name + "/" + diskmap_group_data.files[k].location; - if (!fs.existsSync(post_match_file)) post_match_file = null; + if (diskmap_data_file != null) return; + diskmap_data_file = service_vaults[g] + "/" + service_name + "/" + diskmap_group_data.files[k].location; + if (!fs.existsSync(diskmap_data_file)) { + console.error("Could not find a file for", diskmap_group_data.files[k].location, "(Last tried SV:", diskmap_data_file, ")"); + } }); - var post_match_file_lstat = fs.lstatSync(post_match_file); - var post_match_file_data = new Buffer.from(fs.readFileSync(post_match_file, { + var diskmap_file_stat = fs.lstatSync(diskmap_data_file); + var diskmap_file_data = new Buffer.from(fs.readFileSync(diskmap_data_file, { encoding: null, flags: 'r' })); diskmap_group_data.files[k].base = diskmap_group_data.base; - diskmap_group_data.files[k].last_modified = (new Date(new Date(post_match_file_lstat.mtime).toUTCString()) / 1000); - diskmap_group_data.files[k].content_length = post_match_file_lstat.size; + diskmap_group_data.files[k].last_modified = (new Date(new Date(diskmap_file_stat.mtime).toUTCString()) / 1000); + diskmap_group_data.files[k].content_length = diskmap_file_stat.size; diskmap_group_data.files[k].action = (diskmap_group_data.files[k].action) ? diskmap_group_data.files[k].action.toUpperCase() : "GET"; - if (wtvshared.getFileExt(post_match_file).toLowerCase() == "gz") { - // we need the checksum of the uncompressed data - var gunzipped = zlib.gunzipSync(post_match_file_data); + // we need the checksum of the uncompressed data + if (wtvshared.getFileExt(diskmap_data_file).toLowerCase() == "gz") { + var gunzipped = zlib.gunzipSync(diskmap_file_data); diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(gunzipped)).toString(CryptoJS.enc.Hex).toLowerCase(); - var gzip_fn_end = post_match_file_data.indexOf("\0", 10); + var gzip_fn_end = diskmap_file_data.indexOf("\0", 10); if (!diskmap_group_data.files[k].dont_extract_filename) { - diskmap_group_data.files[k].original_filename = post_match_file_data.toString('utf8', 10, gzip_fn_end); + diskmap_group_data.files[k].original_filename = diskmap_file_data.toString('utf8', 10, gzip_fn_end); } diskmap_group_data.files[k].uncompressed_size = gunzipped.byteLength; gunzipped = null; } else { - diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(post_match_file_data)).toString(CryptoJS.enc.Hex).toLowerCase(); + diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(diskmap_file_data)).toString(CryptoJS.enc.Hex).toLowerCase(); } if (parseInt(diskmap_group_data.files[k].last_modified) > newest_file_epoch) newest_file_epoch = parseInt(diskmap_group_data.files[k].last_modified); From f5e52890529aeb849bff30d7e9bad8c6f72be325 Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 13 Aug 2021 17:01:23 -0400 Subject: [PATCH 5/6] add function WTVShared.fixPathSlashes() --- zefie_wtvp_minisrv/WTVShared.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/zefie_wtvp_minisrv/WTVShared.js b/zefie_wtvp_minisrv/WTVShared.js index 4aa0941d..44235cf8 100644 --- a/zefie_wtvp_minisrv/WTVShared.js +++ b/zefie_wtvp_minisrv/WTVShared.js @@ -166,7 +166,7 @@ class WTVShared { } else { // already absolute path } - return path; + return this.fixPathSlashes(path); } /** @@ -206,11 +206,25 @@ class WTVShared { */ makeSafePath(base, target) { target.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); - if (this.path.sep != "/") target = target.replace(/\//g, this.path.sep); var targetPath = this.path.posix.normalize(target) - return base + this.path.sep + targetPath; + return this.fixPathSlashes(base + this.path.sep + targetPath); } + /** + * Corrects any / or \ differences, if any for file paths + * @param {string} path + * @returns {string} corrected path + */ + fixPathSlashes(path) { + // fix slashes + if (this.path.sep == '/' && path.indexOf("\\") != -1) path = path.replace(/\\/g, this.path.sep); + else if (this.path.sep == "\\" && path.indexOf("/") != -1) path = path.replace(/\//g, this.path.sep); + + // remove double slashes + while (path.indexOf(this.path.sep + this.path.sep) != -1) path = path.replace(this.path.sep + this.path.sep, this.path.sep); + + return path; + } /** * Makes sure an SSID is clean, and doesn't contain any exploitable characters * @param {string} ssid From 1127f8def7aa7024a41124679987785a185316aa Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 13 Aug 2021 17:01:35 -0400 Subject: [PATCH 6/6] use HUFFMAN encoding for large files (seems to work) --- zefie_wtvp_minisrv/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 571bbbc5..b97435b4 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -615,8 +615,10 @@ async function sendToClient(socket, headers_obj, data) { case 2: // zlib DEFLATE implementation + var zlib_options = { 'level': 9 }; + if (uncompressed_content_length > 4194304) zlib_options.strategy = 2; headers_obj['Content-Encoding'] = 'deflate'; - data = zlib.deflateSync(data, { 'level': 9 }); + data = zlib.deflateSync(data, zlib_options); break; }