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-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
|