diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/AroundTownIcon2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/AroundTownIcon2.gif deleted file mode 100644 index 396f1b3c..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/AroundTownIcon2.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/Chat.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/Chat.gif deleted file mode 100644 index b2ef4027..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/Chat.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/CommunityBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/CommunityBanner.gif deleted file mode 100644 index ad1781dd..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/CommunityBanner.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/ExploreTitle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/ExploreTitle.gif deleted file mode 100644 index 29cdd034..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/ExploreTitle.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/SiteShowcase.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/SiteShowcase.gif deleted file mode 100644 index f20e7029..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/SiteShowcase.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/news_icon.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/news_icon.gif deleted file mode 100644 index 656be1cb..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/community/ROMCache/news_icon.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/AroundTownIcon2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/AroundTownIcon2.gif deleted file mode 100644 index 396f1b3c..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/AroundTownIcon2.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/Chat.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/Chat.gif deleted file mode 100644 index b2ef4027..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/Chat.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/CommunityBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/CommunityBanner.gif deleted file mode 100644 index ad1781dd..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/CommunityBanner.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/ExploreTitle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/ExploreTitle.gif deleted file mode 100644 index 29cdd034..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/ExploreTitle.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/SiteShowcase.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/SiteShowcase.gif deleted file mode 100644 index f20e7029..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/SiteShowcase.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/news_icon.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/news_icon.gif deleted file mode 100644 index 656be1cb..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/templates/ROMCache/news_icon.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/S40H1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/S40H1.gif deleted file mode 100644 index b8973a1b..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/S40H1.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js index 7ec8377c..4cd4a75f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js @@ -41,15 +41,14 @@ Choose your name - - - - - + + +
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js index 77d82638..d1a86b83 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js @@ -17,7 +17,7 @@ ${minisrv_config.config.service_name} Service Privacy Statement @@ -252,7 +252,7 @@ ${strftime("%a, %b %e, %Y, %I:%M %P", new Date(message.date * 1000))} (UTC) To:
- +
@@ -30,10 +30,10 @@ ${minisrv_config.config.service_name} Service Privacy Statement
- +
- +
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js index 2369c79c..8ad05e21 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js @@ -53,7 +53,7 @@ xnocancel> -${html_entities.encode((message.subject) ? message.subject : '(No subject)')} +${(message.subject) ? wtvshared.htmlEntitize(message.subject) : '(No subject)'} `; if (message.from_name != message.from_addr) { - data += `${html_entities.encode(message.from_addr)} (${html_entities.encode(message.from_name)})`; + data += `${wtvshared.htmlEntitize(message.from_addr)} (${wtvshared.htmlEntitize(message.from_name)})`; } else { - data += `${html_entities.encode(message.from_addr)}`; + data += `${wtvshared.htmlEntitize(message.from_addr)}`; } data += `
-${html_entities.encode(message.to_addr)} ${(html_entities.encode(message.to_name)) ? '(' + html_entities.encode(message.to_name) + ')' : ''} +${wtvshared.htmlEntitize(message.to_addr)} ${(message.to_name) ? '(' + wtvshared.htmlEntitize(message.to_name) + ')' : ''}
Subject: @@ -260,7 +260,7 @@ Subject: if (typeof message.subject == "object") message.subject = new Buffer.from(message.subject).toString('latin1'); data += ` -${html_entities.encode((message.subject) ? message.subject : '(No subject)')} +${(message.subject) ? wtvshared.htmlEntitize(message.subject) : '(No subject)'}
@@ -270,22 +270,22 @@ ${html_entities.encode((message.subject) ? message.subject : '(No subject)')}

`; - if (typeof message.body == "object") { + if (typeof message.body === "object" && message.body) { message.body = wtvshared.decodeBufferText(message.body); } data += ` -${html_entities.encode(message.body).replace(/\n/gi, "
").replace(/\r/gi, "").replace(/'/gi, "'")} +${wtvshared.htmlEntitize(message.body, true)}

`; if (message.signature) { data += ssid_sessions[socket.ssid].mailstore.sanitizeSignature(message.signature); } -data += `

+ data += `

`; if (message.attachments) { message.attachments.forEach((v, k) => { if (v) { - console.log("*****************",v['Content-Type']); + console.log("*****************", v['Content-Type']); switch (v['Content-Type']) { case "image/jpeg": data += `

`; @@ -293,7 +293,7 @@ data += `

case "audio/wav": data += `
-  Recording +  Recording


`; @@ -302,7 +302,7 @@ data += `

} }); } -data += `

+ data += `

diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js index 31ea27bf..377f86cb 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js @@ -71,10 +71,10 @@ Content-Type: audio/wav`; 'noback': true, }).getURL(); - if (request_headers.query.sendoff == "Send" || request_headers.query.saveoff || request_headers.query.get_snap || request_headers.query.get_gab) { + if ((typeof request_headers.query.sendoff !== 'undefined' && request_headers.query.sendoff != false) || request_headers.query.saveoff || request_headers.query.get_snap || request_headers.query.get_gab) { var from_addr = address; var signature = ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || null; - if (request_headers.query.sendoff == "Send") { + if (typeof request_headers.query.sendoff !== 'undefined' && request_headers.query.sendoff != false) { var attachments = []; @@ -459,30 +459,30 @@ USESTYLE NOARGS> if ((request_headers.query.snapping && request_headers.query.snapping !== 'false') || mail_draft_attachments.message_snapshot_data) { data += ` - +
- + - +
- + - + - + - + - + - + - +
`; if (!mail_draft_attachments.message_snapshot_data) { @@ -502,51 +502,51 @@ USESTYLE NOARGS>
- Detach  + Detach 
- + `; } if ((request_headers.query.gabbing && request_headers.query.gabbing !== 'false') || mail_draft_attachments.message_voicemail_data) { data += `
- + - +
- +
- +
- + - +
- + - + - + - + - + - + - +
-  Recording +  Recording - Detach  + Detach 
- +
`; } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/accounts.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/accounts.js index 229ed581..0ca7ea10 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/accounts.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/accounts.js @@ -22,7 +22,7 @@ Users setup
- + - +
- +
- +
@@ -35,10 +35,10 @@ Users setup
- +
- +
@@ -96,14 +96,14 @@ Subscriber:
- +
- +
@@ -114,11 +114,11 @@ Subscriber: = 1) ? 'USESTYLE' : 'disabled="disabled" text=gray' } TYPE=SUBMIT BORDERIMAGE="file://ROM/Borders/ButtonBorder2.bif" NAME="Button1" WIDTH=103> - + = minisrv_config.config.user_accounts.max_users_per_account) ? 'disabled="disabled" text=gray' : 'USESTYLE'} TYPE=SUBMIT BORDERIMAGE="file://ROM/Borders/ButtonBorder2.bif" NAME="Button2" WIDTH=103> - +
- +
@@ -49,10 +49,10 @@ noscroll>
- +
- +
@@ -123,13 +123,13 @@ MAXLENGTH="${minisrv_config.config.passwords.max_length}">
- +
- +
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js index 8bf885f0..77258909 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js @@ -40,7 +40,7 @@ noscroll> - + @@ -53,10 +53,10 @@ noscroll>
- +
- +
@@ -154,13 +154,13 @@ user_password2=${request_headers.query.user_password2}">`; - + - + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/HackTVLogoJewel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/HackTVLogoJewel.gif deleted file mode 100644 index 07a0f4b8..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/HackTVLogoJewel.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/Spacer.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/Spacer.gif deleted file mode 100644 index 672c48ff..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/Spacer.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/WebTVLogoJewel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/WebTVLogoJewel.gif deleted file mode 100644 index ec3e51dd..00000000 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/WebTVLogoJewel.gif and /dev/null differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BannerGradient.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerGradient.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BannerGradient.gif rename to zefie_wtvp_minisrv/SharedROMCache/AT_BannerGradient.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BannerIcon.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerIcon.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BannerIcon.gif rename to zefie_wtvp_minisrv/SharedROMCache/AT_BannerIcon.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BottomShadow.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BottomShadow.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_BottomShadow.gif rename to zefie_wtvp_minisrv/SharedROMCache/AT_BottomShadow.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_Shadow.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_Shadow.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/aroundtown/ROMCache/AT_Shadow.gif rename to zefie_wtvp_minisrv/SharedROMCache/AT_Shadow.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/AccountBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/AccountBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/AccountBanner.gif rename to zefie_wtvp_minisrv/SharedROMCache/AccountBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/AroundTownIcon2.gif b/zefie_wtvp_minisrv/SharedROMCache/AroundTownIcon2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/AroundTownIcon2.gif rename to zefie_wtvp_minisrv/SharedROMCache/AroundTownIcon2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/BulletArrow.gif b/zefie_wtvp_minisrv/SharedROMCache/BulletArrow.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/BulletArrow.gif rename to zefie_wtvp_minisrv/SharedROMCache/BulletArrow.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/Chat.gif b/zefie_wtvp_minisrv/SharedROMCache/Chat.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/Chat.gif rename to zefie_wtvp_minisrv/SharedROMCache/Chat.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/CommunityBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/CommunityBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/CommunityBanner.gif rename to zefie_wtvp_minisrv/SharedROMCache/CommunityBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/DottedLine.gif b/zefie_wtvp_minisrv/SharedROMCache/DottedLine.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/DottedLine.gif rename to zefie_wtvp_minisrv/SharedROMCache/DottedLine.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/ExploreTitle.gif b/zefie_wtvp_minisrv/SharedROMCache/ExploreTitle.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/ExploreTitle.gif rename to zefie_wtvp_minisrv/SharedROMCache/ExploreTitle.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileImage.gif b/zefie_wtvp_minisrv/SharedROMCache/FileImage.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileImage.gif rename to zefie_wtvp_minisrv/SharedROMCache/FileImage.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileMovie.gif b/zefie_wtvp_minisrv/SharedROMCache/FileMovie.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileMovie.gif rename to zefie_wtvp_minisrv/SharedROMCache/FileMovie.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FilePackage.gif b/zefie_wtvp_minisrv/SharedROMCache/FilePackage.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FilePackage.gif rename to zefie_wtvp_minisrv/SharedROMCache/FilePackage.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileSound.gif b/zefie_wtvp_minisrv/SharedROMCache/FileSound.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileSound.gif rename to zefie_wtvp_minisrv/SharedROMCache/FileSound.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileText.gif b/zefie_wtvp_minisrv/SharedROMCache/FileText.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/FileText.gif rename to zefie_wtvp_minisrv/SharedROMCache/FileText.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/HackTVLogoJewel.gif b/zefie_wtvp_minisrv/SharedROMCache/HackTVLogoJewel.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/HackTVLogoJewel.gif rename to zefie_wtvp_minisrv/SharedROMCache/HackTVLogoJewel.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/HomeBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/HomeBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/HomeBanner.gif rename to zefie_wtvp_minisrv/SharedROMCache/HomeBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/MSNLogo.gif b/zefie_wtvp_minisrv/SharedROMCache/MSNLogo.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/MSNLogo.gif rename to zefie_wtvp_minisrv/SharedROMCache/MSNLogo.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PanelEdge.gif b/zefie_wtvp_minisrv/SharedROMCache/PanelEdge.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PanelEdge.gif rename to zefie_wtvp_minisrv/SharedROMCache/PanelEdge.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperBase.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperBase.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperBase.gif rename to zefie_wtvp_minisrv/SharedROMCache/PaperBase.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTop.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperTop.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTop.gif rename to zefie_wtvp_minisrv/SharedROMCache/PaperTop.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTopFlat.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperTopFlat.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTopFlat.gif rename to zefie_wtvp_minisrv/SharedROMCache/PaperTopFlat.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/PromotionLeftEdge.gif b/zefie_wtvp_minisrv/SharedROMCache/PromotionLeftEdge.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/PromotionLeftEdge.gif rename to zefie_wtvp_minisrv/SharedROMCache/PromotionLeftEdge.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/RemoveButton.gif b/zefie_wtvp_minisrv/SharedROMCache/RemoveButton.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/RemoveButton.gif rename to zefie_wtvp_minisrv/SharedROMCache/RemoveButton.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20BV1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20BV1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20BV1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20BV1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20BV2.gif b/zefie_wtvp_minisrv/SharedROMCache/S20BV2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20BV2.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20BV2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TH1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TH1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TH1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20TH1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TV1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TV1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TV1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20TV1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TV2.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TV2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S20TV2.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20TV2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40H1.gif b/zefie_wtvp_minisrv/SharedROMCache/S40H1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40H1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S40H1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40V1.gif b/zefie_wtvp_minisrv/SharedROMCache/S40V1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40V1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S40V1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40V2.gif b/zefie_wtvp_minisrv/SharedROMCache/S40V2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S40V2.gif rename to zefie_wtvp_minisrv/SharedROMCache/S40V2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS1.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S60HS1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS2.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS2.gif rename to zefie_wtvp_minisrv/SharedROMCache/S60HS2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS3.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS3.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS3.gif rename to zefie_wtvp_minisrv/SharedROMCache/S60HS3.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS4.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS4.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS4.gif rename to zefie_wtvp_minisrv/SharedROMCache/S60HS4.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS5.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS5.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/S60HS5.gif rename to zefie_wtvp_minisrv/SharedROMCache/S60HS5.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH1.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH1.gif rename to zefie_wtvp_minisrv/SharedROMCache/SAdH1.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH2.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH2.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH2.gif rename to zefie_wtvp_minisrv/SharedROMCache/SAdH2.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH3.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH3.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/SAdH3.gif rename to zefie_wtvp_minisrv/SharedROMCache/SAdH3.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/SettingsBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/SettingsBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/SettingsBanner.gif rename to zefie_wtvp_minisrv/SharedROMCache/SettingsBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Shadow.gif b/zefie_wtvp_minisrv/SharedROMCache/Shadow.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Shadow.gif rename to zefie_wtvp_minisrv/SharedROMCache/Shadow.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowCorner.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowCorner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowCorner.gif rename to zefie_wtvp_minisrv/SharedROMCache/ShadowCorner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowH.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowH.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowH.gif rename to zefie_wtvp_minisrv/SharedROMCache/ShadowH.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowHCap.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowHCap.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowHCap.gif rename to zefie_wtvp_minisrv/SharedROMCache/ShadowHCap.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowHStart.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowHStart.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/explore/ROMCache/ShadowHStart.gif rename to zefie_wtvp_minisrv/SharedROMCache/ShadowHStart.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/SiteShowcase.gif b/zefie_wtvp_minisrv/SharedROMCache/SiteShowcase.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/SiteShowcase.gif rename to zefie_wtvp_minisrv/SharedROMCache/SiteShowcase.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Spacer.gif b/zefie_wtvp_minisrv/SharedROMCache/Spacer.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Spacer.gif rename to zefie_wtvp_minisrv/SharedROMCache/Spacer.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/using_webtv/ROMCache/UsingWebTVBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/UsingWebTVBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/using_webtv/ROMCache/UsingWebTVBanner.gif rename to zefie_wtvp_minisrv/SharedROMCache/UsingWebTVBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/WebTVLogoJewel.gif b/zefie_wtvp_minisrv/SharedROMCache/WebTVLogoJewel.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/WebTVLogoJewel.gif rename to zefie_wtvp_minisrv/SharedROMCache/WebTVLogoJewel.gif diff --git a/zefie_wtvp_minisrv/SharedROMCache/ZefieTV.gif b/zefie_wtvp_minisrv/SharedROMCache/ZefieTV.gif new file mode 100644 index 00000000..f5b0bc99 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ZefieTV.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMastheadBlank.swf b/zefie_wtvp_minisrv/SharedROMCache/help/common/helpMastheadBlank.swf similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMastheadBlank.swf rename to zefie_wtvp_minisrv/SharedROMCache/help/common/helpMastheadBlank.swf diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/kb.gif b/zefie_wtvp_minisrv/SharedROMCache/kb.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/kb.gif rename to zefie_wtvp_minisrv/SharedROMCache/kb.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/kb_alpha.gif b/zefie_wtvp_minisrv/SharedROMCache/kb_alpha.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/kb_alpha.gif rename to zefie_wtvp_minisrv/SharedROMCache/kb_alpha.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/news_icon.gif b/zefie_wtvp_minisrv/SharedROMCache/news_icon.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/DealerDemo/sim/ROMCache/news_icon.gif rename to zefie_wtvp_minisrv/SharedROMCache/news_icon.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/splash_logo_hacktv.gif b/zefie_wtvp_minisrv/SharedROMCache/splash_logo_hacktv.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/splash_logo_hacktv.gif rename to zefie_wtvp_minisrv/SharedROMCache/splash_logo_hacktv.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/up-arrows.swf b/zefie_wtvp_minisrv/SharedROMCache/up-arrows.swf similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/up-arrows.swf rename to zefie_wtvp_minisrv/SharedROMCache/up-arrows.swf diff --git a/zefie_wtvp_minisrv/WTVShared.js b/zefie_wtvp_minisrv/WTVShared.js index 8928ffce..4e0c8eba 100644 --- a/zefie_wtvp_minisrv/WTVShared.js +++ b/zefie_wtvp_minisrv/WTVShared.js @@ -7,8 +7,9 @@ class WTVShared { path = require('path'); fs = require('fs'); + html_entities = require('html-entities'); // used externally by service scripts minisrv_config = []; - + constructor(minisrv_config) { if (minisrv_config == null) this.minisrv_config = this.readMiniSrvConfig(); else this.minisrv_config = minisrv_config; @@ -23,6 +24,12 @@ class WTVShared { } } + htmlEntitize(string, process_newline = false) { + string = this.html_entities.encode(string).replace(/'/g, "'"); + if (process_newline) string = string.replace(/\n/gi, "
").replace(/\r/gi, ""); + return string; + } + isASCII(str) { for (var i = 0, strLen = str.length; i < strLen; ++i) { if (str.charCodeAt(i) > 127) return false; @@ -327,10 +334,16 @@ class WTVShared { * @param {string} base Base path * @param {string} target Sub path */ - makeSafePath(base, target) { - target.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); - var targetPath = this.path.posix.normalize(target) - return this.fixPathSlashes(base + this.path.sep + targetPath); + makeSafePath(base, target = null) { + if (target) { + target.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); + var targetPath = this.path.posix.normalize(target) + return this.fixPathSlashes(base + this.path.sep + targetPath); + } else { + base.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); + var targetPath = this.path.posix.normalize(base) + return this.fixPathSlashes(base); + } } makeSafeUsername(username) { diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 1a4e5e1c..53588faf 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -6,7 +6,6 @@ const zlib = require('zlib'); const http = require('http'); const https = require('https'); const strftime = require('strftime'); // used externally by service scripts -const html_entities = require('html-entities'); // used externally by service scripts const net = require('net'); const CryptoJS = require('crypto-js'); const { crc16 } = require('easy-crc'); @@ -101,162 +100,183 @@ async function sendRawFile(socket, path) { }); } -async function processPath(socket, service_vault_file_path, request_headers = new Array(), service_name) { +async function processPath(socket, service_vault_file_path, request_headers = new Array(), service_name, shared_romcache = null) { var headers, data = null; var request_is_async = false; var service_vault_found = false; var service_path = unescape(service_vault_file_path); + var usingSharedROMCache = false; try { service_vaults.forEach(function (service_vault_dir) { if (service_vault_found) return; - service_vault_file_path = wtvshared.makeSafePath(service_vault_dir, service_path); - // deny access to catchall file name directly - var service_path_split = service_path.split("/"); - var service_path_request_file = service_path_split[service_path_split.length - 1]; - if (minisrv_config.config.catchall_file_name) { - var minisrv_catchall = null; - if (minisrv_config.services[service_name]) minisrv_catchall = minisrv_config.services[service_name].catchall_file_name || minisrv_config.config.catchall_file_name || null; - else minisrv_catchall = minisrv_config.config.catchall_file_name || null; - if (minisrv_catchall) { - if (service_path_request_file == minisrv_catchall) { - request_is_async = true; - var errpage = wtvshared.doErrorPage(401, "Access Denied"); - sendToClient(socket, errpage[0], errpage[1]); - return; - } - } - } - var is_dir = false; - var file_exists = false; - minisrv_catchall, service_path_split, service_path_request_file = null; - if (fs.existsSync(service_vault_file_path)) { - file_exists = true; - is_dir = fs.lstatSync(service_vault_file_path).isDirectory() - } - - if (file_exists && !is_dir) { - // file exists, read it and return it - service_vault_found = true; - request_is_async = true; - request_headers.service_file_path = service_vault_file_path; - request_headers.raw_file = true; - - // service parsed files, we might not want to expose our service source files so we can protect them with a flag on the first line - if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "js" || wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "txt") { - if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "js") { - wtvshared.getLineFromFile(service_vault_file_path, 0, function (status, line) { - if (!status) { - if (line.match(/minisrv\_service\_file.*true/i)) { - var errpage = wtvshared.doErrorPage(403, "Access Denied"); - sendToClient(socket, errpage[0], errpage[1]); - } else { - sendRawFile(socket, service_vault_file_path); - } - } else { - var errpage = wtvshared.doErrorPage(400); - sendToClient(socket, errpage[0], errpage[1]); - } - }); - } - - if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "txt") { - wtvshared.getLineFromFile(service_vault_file_path, 0, function (status, line) { - if (!status) { - if (line.match(/^#!minisrv/i)) { - var errpage = wtvshared.doErrorPage(403, "Access Denied"); - sendToClient(socket, errpage[0], errpage[1]); - } else { - sendRawFile(socket, service_vault_file_path); - } - } else { - var errpage = wtvshared.doErrorPage(400); - sendToClient(socket, errpage[0], errpage[1]); - } - }); + if (!usingSharedROMCache) { + if (minisrv_config.config.SharedROMCache && shared_romcache) { + if (shared_romcache.indexOf(minisrv_config.config.SharedROMCache) != -1) { + var service_path_presplit = shared_romcache.split(path.sep); + service_path_presplit.splice(service_path_presplit.findIndex((element) => element === 'ROMCache'), 1); + var service_path_romcache = service_path_presplit.join(path.sep); + var service_vault_file_path_romcache = wtvshared.returnAbsolutePath(wtvshared.makeSafePath(service_path_romcache)); + if (fs.existsSync(service_vault_file_path_romcache)) { + service_path = service_path.replace(wtvshared.fixPathSlashes(minisrv_config.config.SharedROMCache), 'ROMCache'); + service_vault_file_path = service_vault_file_path_romcache; + usingSharedROMCache = true; + } else { + service_vault_file_path = wtvshared.makeSafePath(service_vault_dir, service_path); + } + } else { + service_vault_file_path = wtvshared.makeSafePath(service_vault_dir, service_path); } } else { - // not a potential service file, so save to send - sendRawFile(socket, service_vault_file_path); + service_vault_file_path = wtvshared.makeSafePath(service_vault_dir, service_path); + } + // deny access to catchall file name directly + var service_path_split = service_path.split("/"); + var service_path_request_file = service_path_split[service_path_split.length - 1]; + if (minisrv_config.config.catchall_file_name) { + var minisrv_catchall = null; + if (minisrv_config.services[service_name]) minisrv_catchall = minisrv_config.services[service_name].catchall_file_name || minisrv_config.config.catchall_file_name || null; + else minisrv_catchall = minisrv_config.config.catchall_file_name || null; + if (minisrv_catchall) { + if (service_path_request_file == minisrv_catchall) { + request_is_async = true; + var errpage = wtvshared.doErrorPage(401, "Access Denied"); + sendToClient(socket, errpage[0], errpage[1]); + return; + } + } + } + var is_dir = false; + var file_exists = false; + minisrv_catchall, service_path_split, service_path_request_file = null; + if (fs.existsSync(service_vault_file_path)) { + file_exists = true; + is_dir = fs.lstatSync(service_vault_file_path).isDirectory() } - } else if (fs.existsSync(service_vault_file_path + ".txt")) { - // raw text format, entire payload expected (headers and content) - service_vault_found = true; - request_is_async = true; - if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".txt to handle request (Raw TXT Mode) [Socket " + socket.id + "]"); - request_headers.service_file_path = service_vault_file_path + ".txt"; - fs.readFile(service_vault_file_path + ".txt", 'Utf-8', function (err, file_raw) { - if (file_raw.indexOf("\n\n") > 0) { - // split headers and data by newline (unix format) - var file_raw_split = file_raw.split("\n\n"); - headers = file_raw_split[0]; - file_raw_split.shift(); - data = file_raw_split.join("\n"); - } else if (file_raw.indexOf("\r\n\r\n") > 0) { - // split headers and data by carrage return + newline (windows format) - var file_raw_split = file_raw.split("\r\n\r\n"); - headers = file_raw_split[0].replace(/\r/g, ""); - file_raw_split.shift(); - data = file_raw_split.join("\r\n"); - } else { - // couldn't find two line breaks, assume entire file is just headers - headers = file_raw; - data = ''; - } - sendToClient(socket, headers, data); - }); - } else if (fs.existsSync(service_vault_file_path + ".js")) { - // synchronous js scripting, process with vars, must set 'headers' and 'data' appropriately. - // loaded script will have r/w access to any JavaScript vars this function does. - // request headers are in an array named `request_headers`. - // Query arguments in `request_headers.query` - // Can upgrade to asynchronous by setting `request_is_async` to `true` - // In Asynchronous mode, you are expected to call sendToClient(socket,headers,data) by the end of your script - // `socket` is already defined and should be passed-through. - service_vault_found = true; - if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".js to handle request (JS Interpreter mode) [Socket " + socket.id + "]"); - request_headers.service_file_path = service_vault_file_path + ".js"; - // expose var service_dir for script path to the root of the wtv-service - var service_dir = service_vault_dir + path.sep + service_name; - socket_sessions[socket.id].starttime = Math.floor(new Date().getTime() / 1000); - var jscript_eval = fs.readFileSync(service_vault_file_path + ".js").toString(); - eval(jscript_eval); - if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.log(" * Script requested Asynchronous mode"); - } - else if (fs.existsSync(service_vault_file_path + ".html")) { - // Standard HTML with no headers, WTV Style - service_vault_found = true; - if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".html to handle request (HTML Mode) [Socket " + socket.id + "]"); - request_headers.service_file_path = service_vault_file_path + ".html"; - request_is_async = true; - headers = "200 OK\n" - headers += "Content-Type: text/html" - fs.readFile(service_vault_file_path + ".html", null, function (err, data) { - sendToClient(socket, headers, data); - }); - } 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; - if (minisrv_catchall_file_name) { - var service_check_dir = service_vault_file_path.split(path.sep); - service_check_dir.pop(); // pop filename + if (file_exists && !is_dir) { + // file exists, read it and return it + service_vault_found = true; + request_is_async = true; + request_headers.service_file_path = service_vault_file_path; + request_headers.raw_file = true; - while (service_check_dir.join(path.sep) != service_vault_dir) { - 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.log(" * Found catchall at " + catchall_file + " to handle request (JS Interpreter Mode) [Socket " + socket.id + "]"); - request_headers.service_file_path = catchall_file; - var jscript_eval = fs.readFileSync(catchall_file).toString(); - // don't pass these vars to the script - var service_check_dir, minisrv_catchall_file_name = null; - eval(jscript_eval); - if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.log(" * Script requested Asynchronous mode"); - } else { - service_check_dir.pop(); + // service parsed files, we might not want to expose our service source files so we can protect them with a flag on the first line + if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "js" || wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "txt") { + if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "js") { + wtvshared.getLineFromFile(service_vault_file_path, 0, function (status, line) { + if (!status) { + if (line.match(/minisrv\_service\_file.*true/i)) { + var errpage = wtvshared.doErrorPage(403, "Access Denied"); + sendToClient(socket, errpage[0], errpage[1]); + } else { + sendRawFile(socket, service_vault_file_path); + } + } else { + var errpage = wtvshared.doErrorPage(400); + sendToClient(socket, errpage[0], errpage[1]); + } + }); + } + + if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "txt") { + wtvshared.getLineFromFile(service_vault_file_path, 0, function (status, line) { + if (!status) { + if (line.match(/^#!minisrv/i)) { + var errpage = wtvshared.doErrorPage(403, "Access Denied"); + sendToClient(socket, errpage[0], errpage[1]); + } else { + sendRawFile(socket, service_vault_file_path); + } + } else { + var errpage = wtvshared.doErrorPage(400); + sendToClient(socket, errpage[0], errpage[1]); + } + }); + } + } else { + // not a potential service file, so save to send + sendRawFile(socket, service_vault_file_path); + } + + } else if (fs.existsSync(service_vault_file_path + ".txt")) { + // raw text format, entire payload expected (headers and content) + service_vault_found = true; + request_is_async = true; + if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".txt to handle request (Raw TXT Mode) [Socket " + socket.id + "]"); + request_headers.service_file_path = service_vault_file_path + ".txt"; + fs.readFile(service_vault_file_path + ".txt", 'Utf-8', function (err, file_raw) { + if (file_raw.indexOf("\n\n") > 0) { + // split headers and data by newline (unix format) + var file_raw_split = file_raw.split("\n\n"); + headers = file_raw_split[0]; + file_raw_split.shift(); + data = file_raw_split.join("\n"); + } else if (file_raw.indexOf("\r\n\r\n") > 0) { + // split headers and data by carrage return + newline (windows format) + var file_raw_split = file_raw.split("\r\n\r\n"); + headers = file_raw_split[0].replace(/\r/g, ""); + file_raw_split.shift(); + data = file_raw_split.join("\r\n"); + } else { + // couldn't find two line breaks, assume entire file is just headers + headers = file_raw; + data = ''; + } + sendToClient(socket, headers, data); + }); + } else if (fs.existsSync(service_vault_file_path + ".js")) { + // synchronous js scripting, process with vars, must set 'headers' and 'data' appropriately. + // loaded script will have r/w access to any JavaScript vars this function does. + // request headers are in an array named `request_headers`. + // Query arguments in `request_headers.query` + // Can upgrade to asynchronous by setting `request_is_async` to `true` + // In Asynchronous mode, you are expected to call sendToClient(socket,headers,data) by the end of your script + // `socket` is already defined and should be passed-through. + service_vault_found = true; + if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".js to handle request (JS Interpreter mode) [Socket " + socket.id + "]"); + request_headers.service_file_path = service_vault_file_path + ".js"; + // expose var service_dir for script path to the root of the wtv-service + var service_dir = service_vault_dir + path.sep + service_name; + socket_sessions[socket.id].starttime = Math.floor(new Date().getTime() / 1000); + var jscript_eval = fs.readFileSync(service_vault_file_path + ".js").toString(); + eval(jscript_eval); + if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.log(" * Script requested Asynchronous mode"); + } + else if (fs.existsSync(service_vault_file_path + ".html")) { + // Standard HTML with no headers, WTV Style + service_vault_found = true; + if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + service_vault_file_path + ".html to handle request (HTML Mode) [Socket " + socket.id + "]"); + request_headers.service_file_path = service_vault_file_path + ".html"; + request_is_async = true; + headers = "200 OK\n" + headers += "Content-Type: text/html" + fs.readFile(service_vault_file_path + ".html", null, function (err, data) { + sendToClient(socket, headers, data); + }); + } 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; + if (minisrv_catchall_file_name) { + var service_check_dir = service_vault_file_path.split(path.sep); + service_check_dir.pop(); // pop filename + + 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.log(" * Found catchall at " + catchall_file + " to handle request (JS Interpreter Mode) [Socket " + socket.id + "]"); + request_headers.service_file_path = catchall_file; + var jscript_eval = fs.readFileSync(catchall_file).toString(); + // don't pass these vars to the script + var service_check_dir, minisrv_catchall_file_name = null; + eval(jscript_eval); + if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.log(" * Script requested Asynchronous mode"); + } else { + service_check_dir.pop(); + } } } } @@ -272,7 +292,7 @@ async function processPath(socket, service_vault_file_path, request_headers = ne } if (!request_is_async) { if (!service_vault_found) { - console.error(" * Could not find a Service Vault for " + service_name + ":/" + service_path.replace(service_name + path.sep, "")); + console.error(" * Could not find a Service Vault for " + service_name + ":/" + service_path.replace(service_name + path.sep, "").replace(path.sep, '/')); var errpage = wtvshared.doErrorPage(404, null, socket.minisrv_pc_mode); headers = errpage[0]; data = errpage[1]; @@ -428,9 +448,13 @@ Location: " + minisrv_config.config.unauthorized_url`; // assume webtv since there is a :/ in the GET var service_name = shortURL.split(':/')[0]; var urlToPath = wtvshared.fixPathSlashes(service_name + path.sep + shortURL.split(':/')[1]); + var shared_romcache = null; + if (shortURL.indexOf("/ROMCache/") != -1 && minisrv_config.config.enable_shared_romcache) { + shared_romcache = wtvshared.fixPathSlashes(minisrv_config.config.SharedROMCache + path.sep + shortURL.split(':/')[1]); + } if (minisrv_config.config.debug_flags.show_headers) console.log(" * Incoming headers on socket ID", socket.id, (await wtvshared.decodePostData(wtvshared.filterSSID(Object.assign({}, request_headers))))); socket_sessions[socket.id].request_headers = request_headers; - processPath(socket, urlToPath, request_headers, service_name); + processPath(socket, urlToPath, request_headers, service_name, shared_romcache); } else if (shortURL.indexOf('http://') >= 0 || shortURL.indexOf('https://') >= 0) { doHTTPProxy(socket, request_headers); } else { diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json index a9b3fb76..ce0f6c36 100644 --- a/zefie_wtvp_minisrv/config.json +++ b/zefie_wtvp_minisrv/config.json @@ -6,6 +6,8 @@ "ServiceVault" ], "SessionStore": "SessionStore", + "SharedROMCache": "SharedROMCache", + "enable_shared_romcache": true, "service_owner": "a minisrv user", "service_owner_account": "minisrvuser", "service_owner_contact": "someone", diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index 0322f6f7..cece7dc9 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -338,6 +338,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code @@ -405,6 +462,9 @@ + + + \ No newline at end of file