diff --git a/.gitignore b/.gitignore index 527f3261..c9a5d6db 100644 --- a/.gitignore +++ b/.gitignore @@ -368,3 +368,4 @@ FodyWeavers.xsd /zefie_wtvp_minisrv/ServiceLogPost/*.log /zefie_wtvp_minisrv/SessionStore/*.json /zefie_wtvp_minisrv/SessionStore/*/ +/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/viewers/HackTV.zip diff --git a/README.md b/README.md index 691d6364..9ffb9e45 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,6 @@ This open source server is in beta status. Use at your own risk. ### Current issues: - Mis-configuring wtv-disk:/sync DiskMaps may cause units to delete contents of partitions (need more info) -### Won't fix: -- wtv-encryption stream breaks when two different sessions have the same SSID (eg spoofing, won't fix (production did it too)) -- ~~No intentions to support user accounts, registration, or any form of database system~~ *(I guess this was a lie, but we still don't use a database!)* - ### Feature Todo: - TellyScript generation and/or manipulation without external dependancies - ~~wtv-setup and bgm support~~ ***Done [v0.9.23](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.9.23)*** diff --git a/README_bf0app_flashrom.txt b/README_bf0app_flashrom.txt index 5b13af36..fbcf383a 100644 --- a/README_bf0app_flashrom.txt +++ b/README_bf0app_flashrom.txt @@ -1,5 +1,12 @@ The bf0app flashing system requires a two things that you must be aware of, that are different from a typical setup: + 1) Your PPP system MUST accept auth, a noauth setup will not work for the 2nd dialing phase + 2) You must have a clean dialup. DreamPi voltage-hacked lines, and unstable VoIP systems are known to cause errors, leaving the box in a 'braindead' state with no flash. MiniSrv can help recover - from this but you will need to provide a stable dialup connection. This was tested with my Cisco 3825 setup. \ No newline at end of file + from this but you will need to provide a stable dialup connection. This was tested with my Cisco 3825 setup. + +3) bf0app systems flash right away, as soon as a part is received and validated. + This means if your bf0app box fails mid-flash, you could design a custom page to send the flashrom + from where it left off (for example, if your box failed on part 3 of 16, you could start again at + part 3 (with a specially set up page, minisrv won't do this by default) \ No newline at end of file diff --git a/user_config_README.md b/user_config_README.md index 8b8c0cfe..83f8ebe7 100644 --- a/user_config_README.md +++ b/user_config_README.md @@ -103,3 +103,16 @@ The `wtv-1800` example above shows how you could override the default port for a } ``` The `wtv-music` example above shows how you could disable a default service without modifying `config.json` + +``` + "http": { + "wtv-explanation": { + "401": "wtv-guide:/errors/invalidauth", + "403": "wtv-guide:/errors/unauthorized", + "404": "wtv-guide:/errors/notfound" + } + } +``` +The `http` example above shows how you could add a custom "Explain" button to the error message shown for a specific HTTP error. +This only applies to "http" and "https" sources (you do not need to define it in both, it will apply to both). Does not apply to +wtv-services. You can add an explain button to any HTTP code, not just the examples above. \ No newline at end of file diff --git a/zefie_wtvp_minisrv/.gitignore b/zefie_wtvp_minisrv/.gitignore index 2aef617a..85333cc9 100644 --- a/zefie_wtvp_minisrv/.gitignore +++ b/zefie_wtvp_minisrv/.gitignore @@ -8,6 +8,7 @@ ServiceLogPost/*_* # Large files not pertaining to the service code UserServiceVault/*-* +UserServiceVault/*_* package-lock.json @@ -369,3 +370,5 @@ MigrationBackup/ # Fody - auto-generated XML schema FodyWeavers.xsd +# minisrv error log file +errors.log \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0-HE.zip b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0-HE.zip new file mode 100644 index 00000000..a85f9478 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0-HE.zip differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0.zip b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0.zip new file mode 100644 index 00000000..85fe913a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.0.zip differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.1.zip b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.1.zip new file mode 100644 index 00000000..80f7c2c2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--1.1.zip differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5-HE.zip b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5-HE.zip new file mode 100644 index 00000000..76f8c5f1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5-HE.zip differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5.zip b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5.zip new file mode 100644 index 00000000..7c233be4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/AppData--2.5.zip differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/HackersEdition_Setup.bmp.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/HackersEdition_Setup.bmp.gz new file mode 100644 index 00000000..872be4db Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/HackersEdition_Setup.bmp.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.0.res.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.0.res.gz new file mode 100644 index 00000000..2691e2cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.0.res.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.1.res.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.1.res.gz new file mode 100644 index 00000000..4eab26b7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--1.1.res.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--2.5.res.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--2.5.res.gz new file mode 100644 index 00000000..22dfdf02 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/ResData--2.5.res.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/SuperViewer_Setup.bmp.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/SuperViewer_Setup.bmp.gz new file mode 100644 index 00000000..57a2cd86 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/SuperViewer_Setup.bmp.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0-HE.exe.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0-HE.exe.gz new file mode 100644 index 00000000..b85cfcb2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0-HE.exe.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0.exe.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0.exe.gz new file mode 100644 index 00000000..7f2e0bdc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.0.exe.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.1.exe.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.1.exe.gz new file mode 100644 index 00000000..626041ba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--1.1.exe.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5-HE.exe.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5-HE.exe.gz new file mode 100644 index 00000000..2770bc8c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5-HE.exe.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5.exe.gz b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5.exe.gz new file mode 100644 index 00000000..2eb52671 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceDeps/viewergen/WebTVIntel--2.5.exe.gz differ diff --git a/zefie_wtvp_minisrv/ServiceDeps/viewergen/readme_disksets.txt b/zefie_wtvp_minisrv/ServiceDeps/viewergen/readme_disksets.txt new file mode 100644 index 00000000..286d3aa8 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/viewergen/readme_disksets.txt @@ -0,0 +1,3 @@ +Disksets should contain the files under the "Disk" folder in the WebTV Viewer. +The zip should NOT contain the "Disk" folder itself, but only the files you intend +to install UNDER the "Disk" folder. \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/FIJI/dc_production_normal.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/FIJI/dc_production_normal.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/FIJI/dc_production_normal.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/FIJI/dc_production_normal.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_OpenISP_56k.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_OpenISP_56k.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_OpenISP_56k.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_OpenISP_56k.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.detok.txt similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.detok.txt rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.detok.txt diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/UTV/utv_hsd.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/UTV/utv_hsd.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/UTV/utv_hsd.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/UTV/utv_hsd.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/UTV/utv_normal.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/UTV/utv_normal.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/UTV/utv_normal.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/UTV/utv_normal.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_OISP.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_OISP.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_OISP.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_OISP.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.detok.txt b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.detok.txt similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.detok.txt rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.detok.txt diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.tok b/zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.tok similarity index 100% rename from zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.tok rename to zefie_wtvp_minisrv/ServiceDeps/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.tok diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/glossary.json b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/glossary.json new file mode 100644 index 00000000..158d8aa2 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/glossary.json @@ -0,0 +1,859 @@ +{ + "A": { + "accessnumber": { + "word": "access number", + "definition": "The phone number your dials to connect to the WebTV service.The access number is displayed on your TV screen each time you turn yourterminal on. If you are unsure whether the connection to your access number is local or toll, contact your phone company." + }, + "accessrestriction": { + "word": "access restriction", + "definition": "A feature that lets parents limit what a young viewer can see on the Internet. WebTV provides two restrictive services for kids: Kidfriendly,recommended for children under age 11, and Surfwatch, recommended for older children. Access restrictions can only be set up on secondary accounts and are controlled by the Primary user." + }, + "address": { + "word": "address", + "definition": "Web page address

The Internet address of a Web page, also called a URL (Universal Resource Locator).

E-mail address

The address of an Internet user's e-mail account. An e-mail address includes a user name, as well as the domain that sponsors the address. To send someone e-mail, you need to know their e-mail address." + }, + "addressbook": { + "word": "Address book", + "definition": "The Address book is feature that allows you to store e-mail addresses. Your Address book can hold up to 140 different e-mail addresses." + }, + "altkey": { + "word": "alt key", + "definition": "The Alt key, when pressed simultaneously with other specific keys, creates various symbols. For example, the Alt key can be used to insert accent marks when writing in a foreign language." + }, + "americaonline": { + "word": "America Online", + "definition": "An Online Service Provider for personal computer users. WebTV subscriberscannot connect to any portion of America Online's service, as it is notcompatible with WebTV. You can, however, send e-mailto AOL subscribers, as well as chat with them in non-AOL chat rooms." + }, + "analog": { + "word": "analog", + "definition": "A process by which information is transmitted from one location to another. Most phone communication is conducted over an analog connection. Yourterminal is compatible with analog lines only." + }, + "artemisresearch": { + "word": "Artemis Research", + "definition": "The name of the original research group that developed WebTV Networks." + }, + "attachments": { + "word": "attachments", + "definition": "Files or documents that are sent with e-mail messages. To read an attachment, the e-mail program you are using must support the program in which the attachment was created. WebTV's e-mail system supports someattachments but not others. At this time, attachments created with Microsoft's Word and Excel do not work with WebTV." + }, + "audibledialing": { + "word": "audible dialing", + "definition": "A feature that allows you to listen to your dial in and connect to WebTV.

To activate audible dialing, follow these steps:

  1. Choose Settings from Web Home.
  2. Choose Dialing.
  3. Choose Advanced.
  4. Put a check in the box next to Audible dialing.
  5. Choose Done.
" + }, + "audiocontrolpanel": { + "word": "audio control panel", + "definition": "An on-screen panel that allows you to control audio files. To make the audio panel appear, simply press the Options button while listening to an audio file." + }, + "autoretrieval": { + "word": "auto retrieval", + "definition": "A feature that automatically downloads new television listings to your during the night.

To manually activate the Auto retrieval feature, Choose Settings from TV Home, choose Listings setup from the next page, then follow the on-screen instructions.", + "plusonly": true + + }, + "autoselect": { + "word": "auto select", + "definition": "The Auto select feature improves your channel surfing by filtering out all unviewable TV channels. When you use the Auto select feature, only the TV channels that come in clearly are viewable.

To activate Auto select:

  1. Choose Settings from your TV Home page
  2. Choose Channels
  3. Choose Auto Select
  4. After the Auto Select is complete, choose Done
" + } + }, + "B": { + "backbutton": { + "word": "Back button", + "definition": "A button on your remote control that returns you to the last Web page you visited." + }, + "baud": { + "word": "baud", + "definition": "Measurement describing the amount of information a modem sends or receives per second." + }, + "bulletinboards": { + "word": "bulletin boards (BBs)", + "definition": "Please see newsgroup." + }, + "beta": { + "word": "beta", + "definition": "Testing stage that software goes through before it is released to the general public. During Beta testing, testers attempt to identify all bugs in the software." + }, + "bitmap": { + "word": "bitmap", + "definition": "A type of image file on the Internet. Bitmaps are complex rows and columns of bits, or dots, that connect to form a larger, graphical image." + }, + "blindcarboncopy": { + "word": "blind carbon copy (BCC)", + "definition": "A feature that allows computer users to send e-mail to someone without that person's e-mail address appearing on the message.If you have ever received e-mail that does not contain your e-mail address, you may have been blind carbon copied. does not allow users to send messages using Blind carbon copy." + }, + "bookmark": { + "word": "bookmark", + "definition": "(Verb) To save the Internet address (URL) of a Web page so it can be easily accessed later.

(Noun) On , bookmarks are referred to as Favorites." + }, + "bounce": { + "word": "bounce", + "definition": "Any time an e-mail message cannot reach its intended destination,it is returned, or bounced, to the original sender. An e-mail messagecan be bounced for any of the following reasons:

  • The sender typed the e-mail address incorrectly
  • The e-mail address no longer exists
  • The recipient's mail box is full
  • There may be server problems.
" + }, + "bps": { + "word": "BPS (Bits Per Second)", + "definition": "The amount of information traveling within an area of space in any given second." + }, + "browser": { + "word": "browser", + "definition": "A program used to access Web pages on the World Wide Web.Your comes equipped with its own browser that is specifically designed to view Web pages on a television screen." + }, + "bug": { + "word": "bug", + "definition": "An error in the software or hardware that causes a program to perform abnormally." + }, + "byte": { + "word": "byte", + "definition": "A measure of computer memory. One thousand bytes is equal to one kilobyte and one million bytes is equal to one megabyte." + } + }, + "C": { + "cablemodem": { + "word": "cable modem", + "definition": "A modem that transmits data over television cable lines.A standard analog modem transmits data over telephone lines.Cable modems process data much faster than analog modems.At this time, the majority of cable providers do not providecable modem Internet access." + }, + "cache": { + "word": "cache", + "definition": "A type of memory used to temporarily store Web pages.Cached Web pages load more quickly because they are stored locally in your terminal.

If your cache memory fills up, you may experience slower Web surfing,or receive an error message that says, This page is too big to beshown completely. To clear your cache memory, simply power off your terminaland turn it on again." + }, + "callwaiting": { + "word": "call waiting", + "definition": "A service provided by your phone company that lets you receive incomingphone calls while your phone line is in use.If you subscribe to a call waiting service, follow these steps:

  1. Log on as the Primary user.
  2. Choose Settings from ,
  3. Choose Dialing.
  4. Choose Call waiting.
  5. Choose the box next to Accept calls.
  6. Choose Done.
" + }, + "carboncopy": { + "word": "carbon copy (cc)", + "definition": "A feature that allows you to send an e-mail message to both a primaryrecipient and multiple secondary recipients at the same time." + }, + "casesensitive": { + "word": "case sensitive", + "definition": "When letters typed in uppercase are read differently thanletters typed in lowercase.

For example, your e-mail address is notcase sensitive. If your e-mail address is yourname@webtv.net,someone can send a message to YoUrNaMe@webtv.net, and it will stillget to you.

Your password is case sensitive. For example, if yourpassword is Surfwatch, you must type it in exactly that way." + }, + "cd-rom": { + "word": "CD-ROM", + "definition": "(Compact Disc-Read-Only Memory)

A small disc capable of storing large amounts of information." + }, + "chat": { + "word": "chat", + "definition": "A forum on the Internet where people communicate by exchanging typedmessages in real time.`; supports both HTML chat and real time IRC (Internet Relay Chat).At this time, we do not support Java-based chat." + }, + "client": { + "word": "client", + "definition": "A program or device that relies on a larger computer, or server,to perform the majority of its functions. Your can be thoughtof as a client, and so can some of the programs that run within it (e.g. 's e-mail system)." + }, + "commandkey": { + "word": "Command key", + "definition": "The Command key (Cmd), when pressed simultaneously withspecific keys on the keyboard, activates a number of features.For example, pressing Cmd and the < b>R keyat the same time reloads the page you're viewing." + }, + "cookies": { + "word": "cookies", + "definition": "Cookies are electronic packets of information that a Web page givesout to visiting Internet users. Cookies have many uses, the mostcommon of which lets Web pages offer custom information to its visitors.For example, while viewing a specific Web page, you may be askedto provide your name and a few comments about your personal interests.The next time you visit that page, you may be presented with a welcomemessage that includes your name and content specific to your personal interests." + }, + "crossoverlink": { + "word": "Crossover link", + "definition": "A hyperlink in the form of a small circled i thatsometimes appears on your screen during a television program.If selected, a crossover link will take you to a Web pagerelated to the TV program you are viewing.", + "plusonly": true + }, + "cross-post": { + "word": "cross-post", + "definition": "To submit a single post to several different newsgroups. To cross-posta message, simply add the newsgroup names to the post you have written,separating each name with a comma. Posts should only be cross-posted ifthey are relevant to all receiving newsgroups. Doing otherwise isconsidered bad netiquette." + }, + "cursor": { + "word": "cursor", + "definition": "A blinking symbol on the screen that indicates where typed letters and words will go or appear.

The cursor can be moved from one text-entry field to another by using the Tab key." + }, + "cutcopyandpaste": { + "word": "Cut, Copy, and Paste", + "definition": "A feature that lets you copy text from one place, such as a Web page, and pasteit somewhere else, such as in an e-mail message you're writing." + } + }, + "D": { + "deletekey": { + "word": "Delete key", + "definition": "Removes text from a text field. Pressing the Delete key removes text one character at a time, while pressing the Cmd key and the Delete key at the same time deletes an entire line of text." + }, + "dialingoptions": { + "word": "Dialing options", + "definition": "The place to make adjustments to your dialing settings. From the Dialing Options page, you can choose a dialing prefix, set up your terminal to work with a call waiting service,and activate audible dialing. Only the primary user can access and modify Dialing options.

To access Dialing options:

  1. Choose Settings from .
  2. Choose Dialing.
" + }, + "discuss": { + "word": "Discuss", + "definition": "WebTV's newsgroup section, which contains a list of featured newsgroups,a moderated newsgroup especially for WebTV users, and a search featureto help you find groups on specific discussion topics.To access Discuss:
  1. Choose Community from
  2. Choose Discuss.
" + }, + "discussiongroup": { + "word": "discussion group", + "definition": "Please see newsgroup." + }, + "dishplayer": { + "word": "DISHPlayer", + "definition": "The DISHPlayer is a satellite receiver that has the ability to access the WebTV service." + }, + "domainname": { + "word": "domain name", + "definition": "The part of a URL or e-mail address that indicates where a Web page or mail box resides.For example, the webtv.net portion of the URL http://www.webtv.netlets you know that this URL belongs to the WebTV domain. The same applies tothe webtv.net part of your e-mail address." + }, + "download": { + "word": "download", + "definition": "To move information from a host computer or server to a personal computer or device. For example, when an upgrade is available for, our host computers move the upgrade information toyour .

We maintain all of the information that is downloaded to your terminal. Therefore, it is not possible for you to download programs on your own." + }, + "dpi": { + "word": "dpi", + "definition": "The number of \"dots per inch\" in an image or Web page. Regardless of the dpi of a particular image, your terminal's maximum printing capability with most printers is 72 dpi .Because of this, the items you print may not appear exactly as they do on your television screen. If you're using an HP printer that has Smart Focus technology, however, yourmaximum printing capability is increased to 144 dpi." + } + }, + "E": { + "editkey": { + "word": "Edit key", + "definition": "Modifies what you have written in a text entry field. After highlighting a text entry field, pressing the Edit key onyour keyboard allows you to move the cursor within that text field." + }, + "e-mail": { + "word": "e-mail", + "definition": "Short for electronic mail, e-mail is a message sent from one Internet user to another. To send e-mail to another Internet user,you need that user's e-mail address. Likewise, someone will need your e-mail address to send e-mail to you." + }, + "e-mailaddress": { + "word": "e-mail address", + "definition": "The address of an Internet user's e-mail account. An e-mail address includes a user name, as well as a domain name, which is thename of the company, organization that sponsors the address.

For example, in the e-mail address yourname@webtv.net,yourname is the user name, while webtv.net is the domain name." + }, + "emoticons": { + "word": "emoticons", + "definition": "Combinations of letters and symbols used to convey emotion in an e-mail message or newsgroup post.

The following are a few of the more popular emoticons (Rotate your head to the left to view them properly):

:-) Joking

;-) Winking

:-( Sad" + }, + "encryption": { + "word": "encryption", + "definition": "A coding method used to help protect information on the Internet.Encrypted information is translated into a secret code, sentover the Internet, then translated back to its original form when it reaches its destination. supports a very high level of encryption." + }, + "extras": { + "word": "Extras", + "definition": "Mail features that are available only when activated in Settings. The following features are Extras:

  • Reply to All
  • Attach
  • CC (Carbon Copy)" + } + }, + "F": { + "faq": { + "word": "FAQ", + "definition": "(Frequently Asked Questions)

    A list of questions and answers relating to a particular topic." + }, + "favorite": { + "word": "Favorite", + "definition": "A Web page you save in order to return to it easily at a later time. Saving Web pages as Favorites allows you to keep track of the pages you visit most often and allows you to access them quickly. Each user can save a total of 640 Favorites." + }, + "favoritesfolders": { + "word": "Favorites folders", + "definition": "A feature that allows you to organizes the Web pages you save as Favorites.You can name your Favorite folders anything you'd like, and can store yourFavorites accordingly. For example, you might store your favorite sports-related Web page in a folder named Sports. Each user can create up to 20 Favorites folders." + }, + "file": { + "word": "File", + "definition": "A collection of information that is stored in one location. Files are used by computers and other devices to easily transfer large amounts of information. One example of a file is a document created with Microsoft Word." + }, + "fileformats": { + "word": "File formats", + "definition": "The particular method by which information is put into a file.Every file is created using a particular computer program. The following is a complete listing of the file formats supported by :

    • AIFF AU SND WAV
    • GIF GSM JPEG
    • Macromedia Flash 1.0
    • MIDI + Karaoke
    • MOD MPEG Video
    • MPEG-2, 3 Audio
    • QuickTime Audio RealAudio 1.0, 2.0, 3.0
    • Shockwave Audio" + }, + "findkey": { + "word": "Find key", + "definition": "A key on your keyboard that lets you look for specific words or phrases on a Web page. For example, if you wanted to find the word astronaut on NASA's Web page, you could use the Find keyto quickly locate that word. You can use the Find key on your keyboard, or press the Options button on your remote and choose find from the on-screen panel that appears." + }, + "flame": { + "word": "Flame", + "definition": "Term used to describe a malicious e-mail message or newsgroup post, often sent without provocation." + }, + "forward": { + "word": "forward", + "definition": "To send an e-mail message you've received to someone else." + }, + "frames": { + "word": "frames", + "definition": "An HTML feature that divides your screen into a set of smaller windows. Frames are often used on the Internet to keep a table of contents or a directory on the screen at all times." + }, + "freeware": { + "word": "freeware", + "definition": "Copyrighted computer software that can be obtained free of charge when using a computer." + }, + "ftp": { + "word": "FTP", + "definition": "A method by which files are transferred over the Internet from one Internet device to another. In order to FTP a file, you need to use an FTP program." + } + }, + "G": { + "gif": { + "word": "GIF", + "definition": "A file format used to make pictures and images on the World Wide Web." + }, + "goto": { + "word": "Go To", + "definition": "You can use the Go To feature to go directly to a Web page. If you know the Internet address (URL) of a Web page, press Go To on your keyboard, or press Options on your remote and choose go to from the on-screen Options panel. Type in the URL, then choose Go to Page." + } + }, + "H": { + "hangupoption": { + "word": "Hang up option", + "definition": "An advanced option that allows you to temporarily disconnect your terminal from the service. When you're ready to connect again, select Reconnect. You'll be taken to the page you were viewing prior to hanging up. The Hang up feature does not power off your it simply disconnects it, freeing up your phone line." + }, + "harddrive": { + "word": "hard drive", + "definition": "A storage device used to store files, software, and/or programs." + }, + "hardware": { + "word": "hardware", + "definition": "Any physical object used in the computer/technology environment. Your , remote, and/or keyboard are examples of hardware." + }, + "header": { + "word": "header", + "definition": "The \"travel information\" for a particular e-mail message. Headers indicate who sent the e-mail message, to whom the message is being sent, and the time it was sent." + }, + "hoaxes": { + "word": "hoaxes", + "definition": "Messages purposefully crafted to fool or trick other Internet users. Hoaxes can be sent by e-mail and posted in newsgroups. One popular hoax attempts to fool people into thinking they have just downloaded a virus.If you encounter a hoax message such as this, it is best to simply ignore it." + }, + "homepage": { + "word": "Home page", + "definition": "The first Web page you are taken to when you connect to the Internet.To get to at any time, press the Home button on your remote or keyboard." + }, + "hotlink": { + "word": "hot link", + "definition": "Words or symbols on a Web page that, when selected, take you to a new location on the Internet. Hot links can take you to a different spot on the page you are viewing, or to a new page altogether. Hot links are typically a different color or design than the rest of the text on a given page. On , any word or image that you can highlight with the yellow box is a hot link." + }, + "html": { + "word": "HTML", + "definition": "The computer programming language used to make all Web pages. users can use HTML to add graphics and sound to their e-mail, as well as produce their own Web sites." + }, + "http": { + "word": "http", + "definition": "(Hypertext Transfer Protocol)

      The format by which Web pages are transferred back and forth on the Internet.You'll notice that the Internet address, or URL, of every Web page you view begins with http://" + }, + "hyperlink": { + "word": "hyperlink", + "definition": "Words or symbols on a Web page that, when selected, take you to a new location on the Internet. Hyperlinks can take you to a different spot on the page you are viewing , or to a new page altogether. Hyperlinks are typically a different color or design than the rest of the text on a given page. On , any word or image you can highlight with the yellowbox is a hyperlink." + } + }, + "I": { + "icon": { + "word": "icon", + "definition": "A selectable symbol or small picture on a Web page that, when selected,takes you to a different location on the Internet." + }, + "icq": { + "word": "ICQ", + "definition": "(I Seek You)

      A program that informs Internet users when a specified person is online.ICQ can also be used to send real time messages. At this time, does not support ICQ." + }, + "imagemap": { + "word": "image map", + "definition": "An image on a Web page that, when selected, takes you to a different location on the Internet. A single image map usually contains several hyperlinks. When you highlight and select an image map, a small yellow arrow will appear, allowing you to select a specific hyperlink within the image map." + }, + "infobutton": { + "word": "Info button", + "definition": "Used to find the Internet address (URL) of a Web page. Selecting the Info buttonwhile viewing a Web page will indicate the URL of that Web page. The Info button can be found on both the keyboard and the on-screen Options panel." + }, + "instantmessenger": { + "word": "Instant Messenger", + "definition": "A program that lets Internet users send messages to each other in real time." + }, + "internet": { + "word": "Internet", + "definition": "A large network of computers that enables people to communicate and exchange information across the globe. Also referred to as \"the Net.\"" + }, + "internetaddress": { + "word": "Internet address", + "definition": "Web pages are identified by their Internet addresses, or URLs. An Internet address is to a Web page what a street address is to a residence. If you know the Internet address of a Web page you can access it directly by using the Go to feature. To find the URL of a Web page while viewing it, press the Info key on your keyboard, or press Options on your remote and then choose info from the on-screen Options panel." + }, + "internetexplorer": { + "word": "Internet Explorer", + "definition": "An Internet browser created by Microsoft Corporation for computer users to surf the World Wide Web." + }, + "internettraffic": { + "word": "Internet traffic", + "definition": "The result of too many people connecting to the Internet at the same time. Just as automobile traffic may delay your commute to work, Internet traffic may slow down your Internet connection." + }, + "irblaster": { + "word": "IR blaster", + "definition": "A device that lets you control your VCR, satellite receiver, or cable box with the WebTV remote control and keyboard. IR stands for Infra-red." + }, + "irc": { + "word": "IRC", + "definition": "A program that allows Internet users to participate in live chat conversations." + }, + "irkeyboard": { + "word": "IR keyboard", + "definition": "A wireless keyboard you can use to control your . IR stands for Infra-red." + }, + "isp": { + "word": "ISP", + "definition": "A company that provides Internet access." + } + }, + "J": { + "jarhead": { + "word": "JarHead (aka JarHead4)", + "definition": "One of the developers of the WebTV minisrv project. JarHead has done a lot of work to create a service that recreates the experience of the original production WebTV Service.See also: zefie" + }, + "java": { + "word": "Java", + "definition": "A multipurpose computer language developed by Sun Microsystems Inc.Among other applications, Java is used to create animated graphics for Web pages. does not currently support Java." + }, + "javascript": { + "word": "Javascript", + "definition": "A scripting language that adds functionality to Web pages. For example,Javascript is used to create drop down menus on many Web pages.Javascript is often confused with Java, but the two languages are not related. supports Javascript." + }, + "jpeg": { + "word": "JPEG", + "definition": "A format used to create images and pictures on the World Wide Web. supports JPEGs." + } + }, + "K": { + "keywordsearch": { + "word": "keyword search", + "definition": "Some databases and Web sites can be searched by keyword. With a keyword search, you can search for information on a general topic by inputting a single word, like "pork."" + }, + "kid-friendly": { + "word": "Kid-Friendly", + "definition": "Software that reduces the chance of children accessing adult material on the Internet. Kid-Friendly provides content that is both educational and appropriate for children under the age of eleven. Once set up, thisservice helps to filter out inappropriate material on the Internet and allowsonly pre-approved content to be viewed. The option to set up Kid-Friendly accounts is provided to customers free of charge." + }, + "kilobyte": { + "word": "kilobyte", + "definition": "A measure of computer memory. One kilobyte is equal to one thousand bytes." + } + }, + "L": { + "link": { + "word": "link", + "definition": "Words or symbols on a Web page that, when selected, take you to a new location on the Internet. Links (also called hyperlinks) can take you to a different spot on the page you are viewing, or to a new page altogether. Links are typically a different color or design than the rest of the text on a given page. On , any word or image you can highlight with the yellow box is a link." + }, + "load": { + "word": "load", + "definition": "To move information from a host-computer or server to a personal computer or device. For example, when a service update is available, (the server) loads the update information to your . Because maintains all of the information that is loaded to your terminal, it is not possible for you to download programs on your own." + }, + "login": { + "word": "login", + "definition": "The act of connecting to a remote system or network. Every time you connect to , you are \"logging in.\"" + }, + "logon": { + "word": "logon", + "definition": "See login" + }, + "lurk": { + "word": "lurk", + "definition": "The act of reading posts in a newsgroup (Discuss) without responding. Newsgroup lurking is a perfectly normal Internet activity." + } + }, + "M": { + "macromediaflash": { + "word": "Macromedia Flash", + "definition": "A file format used to add animation to Web pages." + }, + "mailinglist": { + "word": "mailing list", + "definition": "A list of e-mail addresses compiled for wide-scale distribution. In general, people sign up for mailing lists in order to receive up-to-date information on a particular subject." + }, + "mattman69": { + "word": "MattMan69", + "definition": "A user who was notorious for hacking the service. MattMan69 created a Web site to expose all of the service secrets.

      To this day, MattMan69's Web site, found at
      http://turdinc.kicks-ass.net/Msntv/index2.html, is still one of the largest and most comprehensive archives of
      service history." + }, + "megabytes": { + "word": "megabytes", + "definition": "A measure of computer memory. One megabyte is equal to one million bytes or one thousand kilobytes." + }, + "messagelight": { + "word": "Message light", + "definition": "A small red light on the front of your that illuminates when a user has new e-mail. The message light is activated when you connect to the service and new e-mail is available. It canalso be activated by setting up the Message watch feature." + }, + "messagewatch": { + "word": "Message watch", + "definition": "A feature that lets you program your to automatically check for new e-mail, even while the terminal is off.

      To change the time Message watch checks for messages:

      1. Choose Settings from
      2. Choose Mail.
      3. Choose Message light.
      4. Follow the on-screen directions.
      " + }, + "mime": { + "word": "MIME", + "definition": "MIME protocol makes it possible to transfer non-text information, such as images, audio, and video, over the Internet. 's e-mail system is MIME compliant, so it can send and receive e-mail messages that are MIME encapsulated." + }, + "minisrv": { + "word": "minisrv", + "definition": "An open-source product written in nodejs designed to replicate the propritary comminucations between a WebTV client and the server. minisrv is the server software that provides the user experience. This page was sent to you via minisrv!" + }, + "modem": { + "word": "modem", + "definition": "A device or program that enables two computers or Internet devices to communicate over a telephone line." + }, + "moderatednewsgroup": { + "word": "moderated newsgroup", + "definition": "A newsgroup that lists only pre-approved posts. Because every post is reviewed by a moderator, moderated newsgroups are typically more organized and civilized than un-moderated newsgroups." + }, + "moderator": { + "word": "moderator", + "definition": "A person or program that reviews newsgroup submissions before they are posted. The job of a moderator is to keep newsgroup conversations focused and non-inflammatory." + }, + "mosaic": { + "word": "Mosaic", + "definition": "The first Internet browser used to navigate the World Wide Web.The Mosaic browser was developed at the National Center for Supercomputing Applications (NCSA) at the University of Illinois." + }, + "mouse": { + "word": "mouse", + "definition": "The mating device utilized by personal computer users." + }, + "mpeg": { + "word": "MPEG", + "definition": "A file format used to make animated video clips. supports MPEG video files, which are widely available on the Internet." + }, + "mud": { + "word": "MUD", + "definition": "A multi-player text-based game that is played on the Internet. The concept of MUD was developed in 1980 in the tradition of Dungeons and Dragons and other role-playing games. does not support MUDs." + } + }, + "N": { + "navigate": { + "word": "navigate", + "definition": "To move from one location to another on the Internet." + }, + "net": { + "word": "Net", + "definition": "Short for Internet." + }, + "netiquette": { + "word": "netiquette", + "definition": "Short for Internet etiquette, netiquette is a set of unwritten rules or guidelines that Internet users follow when posting to a newsgroup or using a chat room. For example, it is considered bad netiquette to type in all capital letters when posting to a newsgroup. This is equivalent to SHOUTING!" + }, + "netscapenavigator": { + "word": "Netscape Navigator", + "definition": "An Internet browser created by Netscape Communications Corporation for computer users to surf the World Wide Web." + }, + "newbie": { + "word": "newbie", + "definition": "A slang term used to describe someone new to the Internet." + }, + "newsgroup": { + "word": "newsgroup", + "definition": "A forum where Internet users gather to exchange ideas on a broad range of topics. So the conversation is easy to follow, newsgroup messages, or posts, are organized categorically by threads." + }, + "noob": { + "word": "noob", + "definition": "Please see newbie" + } + }, + "O": { + "on-screenkeyboard": { + "word": "On-screen keyboard", + "definition": "The on-screen keyboard lets you type letters and words using the hand-held remote control. To activate the on-screen keyboard, select a text entry field and then press the center button on your remote." + }, + "optionspanel": { + "word": "Options panel", + "definition": "An on-screen panel that appears after you press the OPTIONS button on your remote or keyboard." + } + }, + "P": { + "pagebuilder": { + "word": "Page Builder", + "definition": "Page Builder is a tool that helps you create your own Web pages and publish them on the World Wide Web." + }, + "pap": { + "word": "PAP", + "definition": "(Password Authentication Protocol)

      A protocol used to authenticate passwords. PAP is like a two-way handshaking procedure that validates a password every time you log on." + }, + "parallelport": { + "word": "parallel port", + "definition": "A port on a personal computer or Internet device used to connect external devices. WebTV Plus receivers and DISHPlayers have a built-in parallel port that can be used to connect a compatible printer." + }, + "pip": { + "word": "PIP", + "definition": "(Picture-in-Picture)

      Also known as the TV Window. A feature that lets you watch television while surfing the Web. To activate PIP, select TV windowfrom the Options panel, or press the Cmd key and the W key on your keyboard at the same time.", + "plusonly": true + }, + "pop": { + "word": "POP", + "definition": "(Point Of Presence)

      A phone number used to connect a computer or Internet device to the Internet." + }, + "post": { + "word": "post", + "definition": "(verb) To submit a message to a newsgroup.

      (noun) A message that can be read on a newsgroup." + }, + "ppp": { + "word": "PPP", + "definition": "(Point to Point Protocol)

      Communication protocol used over standard phone lines to support Internet connectivity. PPP allows computers to communicate with each other." + }, + "primaryuser": { + "word": "Primary user", + "definition": "Subscriber who originally registered for the service. The Primary user is responsible for payment of the service and for the actions of all secondary users.Additionally, only the Primary user can add or remove users,adjust dialing options, and set up access restrictions, such as SurfWatch and Kid Friendly." + }, + "printeradapter": { + "word": "printer adapter", + "definition": "A device needed to connect a printer to a WebTV Classic Internet terminal. You can find printer adapters in most stores that carry WebTV terminals. The WebTV Plus receiver comes with a built-in printer adapter." + }, + "printercable": { + "word": "printer cable", + "definition": "A cable that is used to connect a printer to a computer or Internet device.You must use an IEEE-1284 compliant bi-directional cable to print with yourterminal." + }, + "privateroom": { + "word": "private room", + "definition": "A chat room not listed on a chat service's list of public rooms. Private rooms are only available in IRC and are temporary.Once all participants have left a private room, the room no longer exists." + }, + "programinformation": { + "word": "program information", + "definition": "Information that is related to the television program you are viewing.Program information gives you:

      • A brief description of a television program
      • The amount of time remaining in the program
      • The rating of the television program (if available)
      • Closed captioning information
      ", + "plusonly": true + }, + "protocol": { + "word": "protocol", + "definition": "A standard format computers use to communicate.One popular protocol is http, the underlying format of the World Wide Web." + } + }, + "Q": { + "quicktime": { + "word": "Quicktime", + "definition": "A file format used to produce sound and video clips on the Internet. currently supports the audio portion of Quicktime files, butdoes not support Quicktime video." + } + }, + "R": { + "ram": { + "word": "RAM", + "definition": "A type of temporary computer memory. RAM is used to temporarily store the Web content you access during an Internet session. This type of memory makes content you recently viewed more quickly accessible." + }, + "realaudio": { + "word": "Real Audio", + "definition": "Software developed by Progressive Networks Inc. used to transmit, receive, and play audio on the Internet." + }, + "recent": { + "word": "Recent", + "definition": "The Recent feature allows you to see a list of the Web pages that you've just visited. To see this list, press Recent on yourkeyboard or remote." + }, + "reload": { + "word": "Reload", + "definition": "The Reload feature allows you to view the most recent version of a Web page. This is useful for Web pages that are updated frequently, such as sports and weather pages, and newsgroups.

      To reload a page, press Options on your remote or keyboard, then choose Reload from the on-screen Options panel." + }, + "reply": { + "word": "reply", + "definition": "To respond to a person who has sent you an e-mail message." + }, + "replyall": { + "word": "reply all", + "definition": "To respond to all of the original recipients of an e-mail message you have received. Reply all can only be used when an e-mail message contains multiple recipients and you've activated the Extras feature in the Settings section of Mail." + }, + "rfadapter": { + "word": "RF adapter", + "definition": "Used to connect devices, such as video game consoles and Internet set-top boxes, to TV sets that are not equipped with cable and/or audio-video jacks.

      RF stands for Radio Frequency." + }, + "rom": { + "word": "ROM", + "definition": "A type of computer memory that cannot be changed by an end user. If you disconnect from , the ROM memory will not be affected." + } + }, + "S": { + "save": { + "word": "Save", + "definition": "To store something in order to be able to access it later. You might save a Web page in a Favorites folder, an e-mail message in Storage, or an e-mail address in the Address book." + }, + "screensaver": { + "word": "screen saver", + "definition": "A program that prevents damage to a TV screen or PC monitor by maintaining the constant movement of images. If a stationary image remains on a screen for an extended period of time, the image may burn into the screen. The screen saver is activated when you stop using your terminal, but do not turn it off." + }, + "scrollbuttons": { + "word": "Scroll buttons", + "definition": "To move up and down on a Web page. Both the keyboard and the remote haveScroll up and Scroll down buttons." + }, + "search": { + "word": "Search", + "definition": "A service used to locate information on the Internet. To search for information, select Search from and type what you're looking for. The more descriptive words you use in a search, the better." + }, + "searchengine": { + "word": "search engine", + "definition": "A program used to find specific information on the Internet. Excite, Yahoo, and Alta Vista are all examples of popular search engines. features Infoseek as its Internet search engine." + }, + "send": { + "word": "Send", + "definition": "A feature that lets you send an e-mail message or a URL to another Internet user while you are surfing the Internet. The Send feature can also be used to forward newsgroup posts." + }, + "server": { + "word": "server", + "definition": "A computer on the Internet that is used to store information, such as your e-mail and Favorites. Each time you turn your on, you are connected to a server. That server then connects to other servers to access information." + }, + "serviceprovider": { + "word": "service provider", + "definition": "A company that provides Internet access." + }, + "shockwave": { + "word": "Shockwave", + "definition": "A program used to create animations and sounds on the Internet. does not support the video segments of Shockwave, but does support Shockwave audio." + }, + "shortcuts": { + "word": "shortcuts", + "definition": "Programmable keys (F1-F7) on the IR keyboard that, when set up, allow you to access Favorites with one keystroke." + }, + "site": { + "word": "site", + "definition": "A set of Web pages that together represent one specific location on the World Wide Web. A Web site is like a book, and the Web pages within it are like pages in a book. Web sites typically have a main page, where the idea, story, or purpose of the site is clearly defined." + }, + "smartcards": { + "word": "Smart cards", + "definition": "Smart cards are a new technology still in development. Your includes a smart card slot in anticipation of their widespread use. In the future, smart cards will be used to store information, including financial data for banking and other online transactions." + }, + "spam": { + "word": "spam", + "definition": "An unsolicited e-mail message or newsgroup post, often advertising a useless product or service. It is a violation of 's Terms of Service to send spam." + }, + "ssl": { + "word": "SSL", + "definition": "A security protocol on the Internet. SSL encrypts data in order to help protectthe transmission of confidential information over the Internet.We support this standard, allowing you to conduct online banking, shopping and trading. To be sure that you are making an SSL-backed transaction, you can select the Info button on the keyboard while on a Web page. If the page is encrypted, an icon on the bottom left of the screen will appeargiving you the option to view the page's security details." + }, + "storage": { + "word": "Storage", + "definition": "A feature that lets you save and sort e-mail. The Storage feature includes:

      • e-mail you have saved
      • e-mail you have discarded (during the past week)
      • e-mail you have sent (during the past week).
      " + }, + "streaming": { + "word": "streaming", + "definition": "A method used to send information over the Internet. The first part of streaming information arrives in a usable form before the last part is fully loaded. Audio files, for example, are commonly put into a streaming format. You can begin to play a streaming audio file before the last part of the file has fully loaded." + }, + "surf": { + "word": "surf", + "definition": "To navigate from one point to another on the World Wide Web." + }, + "surfwatch": { + "word": "SurfWatch", + "definition": "Software that reduces the likelihood of children accessing adult material on the Internet. SurfWatch blocks access to sites that it has identified as containing adult material. SurfWatch has also compiled a list of words which, when used in searches, may find inappropriate Web content. SurfWatch prevents these words from being used.

      SurfWatch can be set up by the Primary user (subscriber) for any secondary userbut cannot be set up on the Primary user's account." + }, + "s-video": { + "word": "S-video", + "definition": "A technology used to transmit video signals from one device to another. S-video technology produces a high quality image and is more commonly found on newer televisions." + } + }, + "T": { + "telnet": { + "word": "Telnet", + "definition": "A protocol used to access information on a remote computer. does not support Telnet connections." + }, + "termsofservice": { + "word": "Terms of Service", + "definition": "A legal contract between WebTV and each individual subscriber. All subscribers are required to follow the guidelines mandated within WebTV's Terms of service (TOS). Violations of the TOS can result in the suspension and possible cancellation of your account." + }, + "textentryfield": { + "word": "text entry field", + "definition": "A blank field or box on a Web page where text can be typed." + }, + "threads": { + "word": "threads", + "definition": "A connected group of posts in a newsgroup that share the same subject title. Each thread in a newsgroup represents a different topic of conversation." + }, + "timestamp": { + "word": "time stamp", + "definition": "The listed time on an e-mail message that indicates when it was sent." + }, + "transloader": { + "word": "Transloader", + "definition": "A Web site that allows you to capture images from other Web pages and savethem in your Scrapbook. You can then add these images to Web pages youcreate with Page Builder." + }, + "troll": { + "word": "troll", + "definition": "Someone who attempts to disrupt the fluidity of newsgroup conversationby posting irrelevant and sometimes hostile messages.If you encounter a troll, it is best to not respond publicly to their messages." + }, + "tvhome": { + "word": "TV Home", + "definition": "Your home base for watching TV, browsing television listings,and setting up your TV for use with your .", + "plusonly": true + }, + "tvlistings": { + "word": "TV Listings", + "definition": "A 24-hour schedule of television programming accessible from the TV Home page. TV Listings are available even if your terminal is offline, or not connected to .", + "plusonly": true + }, + "tvwindow": { + "word": "TV Window", + "definition": "Also known as Picture-in-Picture or PIP. A feature that lets you watch television while surfing the Web. To activate the TV window, select PIPfrom the Options panel, or press the Cmd key and the W key on your keyboard at the same time.", + "plusonly": true + } + }, + "U": { + "update": { + "word": "update", + "definition": "Please see upgrade" + }, + "upgrade": { + "word": "upgrade", + "definition": "The addition or enhancement of a new feature to a service. provides periodic upgrades to your service." + }, + "upload": { + "word": "upload", + "definition": "To transfer information from a personal computer or device to a host computer or server." + }, + "url": { + "word": "URL", + "definition": "Web pages are identified by their URLs, or Internet addresses. An Internet address is to a Web page what a street address is to a residence. If you know the Internet address of a Web page you can access it directly by using the Go To feature.

      To find the URL of a Web page, select the Info key on your keyboard, or press Options and then Info on your remote, while viewing a particular Web page." + }, + "usenet": { + "word": "Usenet", + "definition": "A large system of newsgroups that can be accessed through the Internet." + }, + "user": { + "word": "user", + "definition": "Any account set up on your . Each terminal can have a total of six users; one Primary user and up to five secondary users. Only the Primary user can add secondary users." + }, + "useyourisp": { + "word": "Use Your ISP", + "definition": "A feature that allows users to connect to using an ISP (Internet Service Provider) of their choosing. Use Your ISP is beneficial to those who have Internet access through another ISP, and for those who live in an area without a local access number." + } + }, + "V": { + "vidcap": { + "word": "Vidcap", + "definition": "Video capture, or vidcap, lets you connect a VCR, video camera, or digital camerato your terminal and capture a picture. You can send vidcaps in e-mail messages or keep them in your scrapbook in Page Builder.", + "plusonly": true + }, + "videoflash": { + "word": "VideoFlash", + "definition": "A technology developed by WebTV Networks that produces full-screen, full-motion video. In contrast to conventional Internet video technology, VideoFlash provides a level of video quality comparable to standard TV and is capable of providing significantly faster download times." + }, + "viewbutton": { + "word": "view button", + "definition": "Button on the remote control and keyboard used to switch between Web Homeand the TV Home page." + }, + "virus": { + "word": "virus", + "definition": "A program or code that interferes with the normal functioning of a personal computer. Your is immune to viruses." + }, + "vrml": { + "word": "VRML", + "definition": "A computer programming language used to create three-dimensional graphics on the World Wide Web. does not support VRML." + } + }, + "W": { + "web": { + "word": "Web", + "definition": "An enormous network of computers that can read and exchange information created by a single programming language, known as HTML. HTML is a simple and flexible programming language that is used to display text, audio, images, and animations. The World Wide Web is often referred to as the Internet. However, the World Wide Web is a subset of the Internet, not the Internet itself.Internet users navigate the World Wide Web using Web browsers." + }, + "webaddress": { + "word": "Web address", + "definition": "Please see Internet address" + }, + "webbrowser": { + "word": "Web browser", + "definition": "Please see browser" + }, + "webmaster": { + "word": "Webmaster", + "definition": "A person who is responsible for maintaining a Web site." + }, + "webpage": { + "word": "Web page", + "definition": "An HTML formatted document that resides on the World Wide Web.Web pages generally combine text and pictures, but can also contain animation and video. Each Web page on the World Wide Webis identified by a unique Internet address, or URL." + }, + "website": { + "word": "Web site", + "definition": "A set of Web pages that together represent one specific location on the World Wide Web. A Web site is like a book, and the Web pages within it are like pages in a book. Web sites typically have a main page, where the idea, story, or purpose of the site is clearly defined." + }, + "webtvclassic": { + "word": "WebTV Classic", + "definition": "WebTV's original Internet set-top box. The WebTV Classic Internet terminal, manufactured by Sony and Phillips Magnavox, is an easy and affordable way to access the Internet." + }, + "webtvplus": { + "word": "WebTV Plus", + "definition": "An Internet set-top box that connects to the WebTV Plus service.The WebTV Plus receiver, manufactured by Sony, Phillips Magnavox, Samsung, RCA, and Mitsubishi, is WebTV's second product offering." + }, + "whispering": { + "word": "whispering", + "definition": "A feature in Chat that lets you send a private message to another person in a chat room. Only you and the specified recipient will see the whispered message." + }, + "windows": { + "word": "Windows", + "definition": "A computer operating system developed by Microsoft Corporation." + }, + "worldwideweb": { + "word": "World Wide Web", + "definition": "An enormous network of computers that can read and exchange information created by a single programming language, known as HTML.HTML is a simple and flexible programming language that is usedto display text, audio, images, and animations. The World Wide Webis often referred to as the Internet. However, the World Wide Web is a subset of the Internet, not the Internet itself. Internet users navigate the World Wide Web using Web browsers." + } + }, + "Z": { + "zefie": { + "word": "zefie", + "definition": "Primary developer of the WebTV minisrv project. zefie is responsible for creating the project, as well maintaining the open-source project on GitHub.See also: JarHead" + } + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/Forbidden.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/Forbidden.js new file mode 100644 index 00000000..2f43bc27 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/Forbidden.js @@ -0,0 +1,82 @@ +data = ` + + +Access is restricted + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Access is restricted  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This message means that +the publisher has restricted access to a page, +and will not allow you to see it. +

      +Publishers sometimes restrict access to +limit the use of their information. +

      +In general, it won't help to try again. +

      + +Technical details
      +This is result  403 Forbidden. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/HostMissing.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/HostMissing.js new file mode 100644 index 00000000..635d0535 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/HostMissing.js @@ -0,0 +1,88 @@ +data = ` + + +Missing publisher's name + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Missing publisher's name  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Web addresses generally include a publisher's +name after the colon. This name is often called +a host name. In this address, www.npr.org +is the publisher's name: + + + +
      +
      +http://www.npr.org/news/ +
      +

      +This message appears if you don't include the publisher's +name in an address that you type. +

      + +Technical details
      +This is result  400 Bad Request. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/InternalServerError.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/InternalServerError.js new file mode 100644 index 00000000..65f6f2a3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/InternalServerError.js @@ -0,0 +1,82 @@ +data = ` + + +Publisher problem + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Publisher problem  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This message means that +the publisher's computer experienced a technical +problem while it was trying to send you information. +

      +This can occur because of a mistake made by the +author of a page or by the publisher. +You might want to try getting the page again, +though this problem is likely to happen again. +

      + +Technical details
      +This is result  500 Internal Server Error. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/NotFound.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/NotFound.js new file mode 100644 index 00000000..eef744c2 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/NotFound.js @@ -0,0 +1,83 @@ +data = ` + + +Page was not found + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Page was not found  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This message means that +the publisher could not find +a particular page that was requested. +

      +If you were typing in a Web address, you +can check the address to make sure it is accurate. +

      +This message also appears if a page's author +mistyped the address of another page. +

      + +Technical details
      +This is a server result  404 Not Found. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/ServiceUnavailable.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/ServiceUnavailable.js new file mode 100644 index 00000000..b9f0198b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Alerts/ServiceUnavailable.js @@ -0,0 +1,81 @@ +data = ` + + +Publisher is too busy + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Publisher is too busy  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This message means that +the publisher of the page you're trying to reach +is so busy sending pages to other people on the +Internet that it can't handle your request right now. +

      +Try again in a minute or two, and the publisher +might be less busy. Many publishers are busiest in the mid-morning and early evening. +

      + +Technical details
      +This is result  503 Service Unavailable. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/Index.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/Index.js new file mode 100644 index 00000000..bcc5dfd0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/Index.js @@ -0,0 +1,242 @@ +data = ` + + +Billing + + + + + + +

      + + + + + +
      + + + + + + + +
      + + + +
      +
      + + + +
      +
      + + + Billing + +
      +
      + + +
      + + + + + + + + Find an answer +
      +
      +
      + + + + +

      +
      + + + +
      + + + +
      + + + +
      +
      + + + + +
      +
      + + + + +
      +
      +
      +
      + + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISP.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISP.js new file mode 100644 index 00000000..4cb3ad87 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISP.js @@ -0,0 +1,106 @@ +data = ` + + + +Using an ISP + + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Using an ISP  + +
      +  +
      +
      + + + +
      + +
      + + + + + + +
      + +You could save money every month by using an Internet
      +Service Provider (ISP). To learn more, choose one:
      +
      + + +Q: +What is an ISP?
      + + + +Q: +How can I save money by using an ISP?
      + + + +Q: +How will this affect my WebTV bill?
      + + + +Q: +How do I find an ISP and what should I ask them?
      + + + +Q: +I already have an ISP. How do I sign up?
      +

      If you have an ISP and you're ready to sign up,
      +choose Sign Up Now. +

        +  +  +
      +
      +
      +
      + + + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ1.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ1.js new file mode 100644 index 00000000..4b369d81 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ1.js @@ -0,0 +1,76 @@ +data = ` + + +What is an ISP? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is an ISP?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If your receiver has to dial a toll call when you +connect to WebTV, you might be able to save money by +getting an ISP. +

      When you use an ISP, your receiver calls the +ISP's
      number instead of WebTV's number each time +you
      connect. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ2.js new file mode 100644 index 00000000..1ddc786b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ2.js @@ -0,0 +1,75 @@ +data = ` + + +How can I save? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +How can I save?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If you use an ISP to connect to WebTV, you can save
      money in two ways: +

      If your ISP has a local access number in your area, you
      +won't have to pay toll charges to the phone company to connect to WebTV. +

      Your WebTV Service normally costs $0.00 per month.
      If you use your own ISP, +you have to pay the ISP, but
      your WebTV bill is only $0.00 per month. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3.js new file mode 100644 index 00000000..bc1843b5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3.js @@ -0,0 +1,75 @@ +data = ` + + +Your WebTV bill + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Your WebTV bill  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Using your own ISP is a little more complicated than
      +using WebTV for your connections. +

      You'll receive two bills: one from your ISP and the other
      +from WebTV Networks. You are responsible for both
      +bills in order to maintain your WebTV service. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3B.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3B.js new file mode 100644 index 00000000..37793886 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ3B.js @@ -0,0 +1,78 @@ +data = ` + + +How will this affect my bill? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +How will this affect my bill?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Once you switch to using your own ISP, your WebTV
      +bill will go down from $0.00 per month to $0.00 per
      +month. +

      You'll begin saving on your WebTV bill after the first full
      +month that you use your ISP for your connection. +

      If you use WebTV for the connection at any time during
      +a month, you will be billed for the full $0.00 by WebTV
      +for that month. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4.js new file mode 100644 index 00000000..74a90da8 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4.js @@ -0,0 +1,86 @@ +data = ` + + +Finding an ISP + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Finding an ISP  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If you decide to look for an ISP, make sure the one you +find is compatible with WebTV. To be compatible with +WebTV, the ISP must: + +
        +
      • Support both PPP and PAP.
      • + +
      • Offer at least one access phone number in your local +calling area, with a speed of at least 28.8 Kbps.
      • + +
      • Offer a fixed-cost service.
      • + +
      • Offer technical support for connecting to WebTV.
      • + +
      • Support 56 K Flex.
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4B.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4B.js new file mode 100644 index 00000000..b5abd537 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4B.js @@ -0,0 +1,84 @@ +data = ` + + +Finding an ISP + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Finding an ISP  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you find an ISP, get the following information: + +
        +
      • The name of your ISP
      • + +
      • The user name you use with your ISP (this may be +different from your WebTV name)
      • + +
      • Your ISP password
      • + +
      • A local dial-up access phone number. A second, alternate +dial-up number is also helpful in case the first number is +ever busy.
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4C.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4C.js new file mode 100644 index 00000000..fbb31408 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ4C.js @@ -0,0 +1,73 @@ +data = ` + + +Finding an ISP + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Finding an ISP  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can probably find an ISP by looking in your local +Yellow Pages under Internet Services, Internet +providers, or similar listings. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5.js new file mode 100644 index 00000000..4cdc3fb9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5.js @@ -0,0 +1,84 @@ +data = ` + + +How do I sign up? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +How do I sign up?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To be compatible with WebTV, your ISP must: + +
        +
      • Support both PPP and PAP.
      • + +
      • Offer at least one access phone number in your local +calling area, with a speed of at least 28.8 Kbps.
      • + +
      • Offer a fixed-cost service.
      • + +
      • Offer technical support for connecting to WebTV.
      • + +
      • Support 56 K Flex.
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5B.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5B.js new file mode 100644 index 00000000..6c93125e --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/OISPQ5B.js @@ -0,0 +1,84 @@ +data = ` + + +How do I sign up? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +How do I sign up?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Before you sign up, make sure you know the following: + +
        +
      • The name of your ISP
      • + +
      • The user name you use with your ISP (this may be +different from your WebTV name)
      • + +
      • Your ISP password
      • + +
      • A local dial-up access phone number. A second, alternate +dial-up number is also helpful in case the first number is +ever busy.
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Ach.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Ach.js new file mode 100644 index 00000000..52d1400b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Ach.js @@ -0,0 +1,76 @@ +data = ` + + +Automatic Bank Payment + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Automatic Bank Payment  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If you choose Automatic Bank Payment, your monthly charge is automatically +drawn from your checking account. +

      +If you change your payment method to Automatic +Bank Payment, a sign-up packet will be mailed to you. Just complete the form and include a voided check to start paying for your WebTV +service monthly. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Credit.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Credit.js new file mode 100644 index 00000000..c2e98c37 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Credit.js @@ -0,0 +1,81 @@ +data = ` + + +Credit Cards + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Credit Cards  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can pay your WebTV service bill one of the following Credit Cards: +

      +

        +
      • MasterCard
      • + +
      • Visa
      • + +
      • American Express
      • + +
      • Discover
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Debit.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Debit.js new file mode 100644 index 00000000..b8961bd4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/Debit.js @@ -0,0 +1,77 @@ +data = ` + + +Debit Cards + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Debit Cards  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can also use one of the following Debit Cards: +

      +

        +
      • MasterCard
      • + +
      • Visa
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/PayMethods.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/PayMethods.js new file mode 100644 index 00000000..a8fe602d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Billing/PayMethods/PayMethods.js @@ -0,0 +1,79 @@ +data = ` + + +Payment methods + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Payment methods  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can pay your WebTV service bill one of the following ways: +

      +

        +
      • Credit card
      • + +
      • Debit card
      • + +
      • Automatic Bank Payment
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Chat/ChatDiploma.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Chat/ChatDiploma.js new file mode 100644 index 00000000..b1876b70 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Chat/ChatDiploma.js @@ -0,0 +1,76 @@ + +data = ` + + +What is an ISP? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is an ISP?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If your receiver has to dial a toll call when you +connect to WebTV, you might be able to save money by +getting an
      ISP. +

      When you use an ISP, your receiver calls the +ISP's
      number instead of WebTV's number each time +you
      connect. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Index/Main/1.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Index/Main/1.js new file mode 100644 index 00000000..30d71b5a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Index/Main/1.js @@ -0,0 +1,104 @@ +data = ` +Help: Main Index + + + + + +
      + + + +
      +
      + + + + + +
      +
      + + + Main Index + +
      +
      + + +
      + + + +
      +
      +
      +
      + + + +
      + + +
      Your account
      + +Billing
      +Payment methods
      +Avoiding toll calls
      +
      Customizing WebTV
      + +Adding users
      +Your E-mail address
      +WebTV for kids
      +Changing settings
      + + + + + + + + +
      + +
      Using the Web
      + +Mail
      +Favorites
      +Search
      +Page Builder
      +Chat
      +Discuss
      +Around town
      +Internet info
      +
      + + + +
      + +Getting started +    +
      + + + +
      + +Top questions +     +
      + + + +
      + +Web words +          +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd.js new file mode 100644 index 00000000..394fe329 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd.js @@ -0,0 +1,75 @@ +data = ` + + +The CMD Key + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The CMD Key  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +The command key — labelled CMD — +is helpful when you're editing text. +

      +You can also use the CMD +key for other shortcuts. Choose Continue to learn more. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd2.js new file mode 100644 index 00000000..003324a5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd2.js @@ -0,0 +1,76 @@ +data = ` + + +The CMD Key + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The CMD Key  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Press the CMD key at the same time you press these
      + keys to use these shortcuts: +

      cmd-left arrow +Move the cursor to the beginning of a line of text you're editing. +

      cmd-right arrow +Move the cursor to the end of a line of text. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd3.js new file mode 100644 index 00000000..c273cd83 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd3.js @@ -0,0 +1,76 @@ +data = ` + + +The CMD Key + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The CMD Key  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      cmd-delete +Delete an entire line of text. +

      cmd-f +Find some text on the page you're viewing. +

      cmd-g +Find the next occurrence of some text you've already searched for once. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd4.js new file mode 100644 index 00000000..e4a04ed6 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd4.js @@ -0,0 +1,74 @@ +data = ` + + +The CMD Key + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The CMD Key  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      cmd-r +Reload the page you're viewing. +

      cmd-p +Print the page you're viewing. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd5.js new file mode 100644 index 00000000..5250a9b1 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Keyboard/Cmd/Cmd5.js @@ -0,0 +1,82 @@ +data = ` + + +The CMD Key + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The CMD Key  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can also use the CMD +key for cutting and pasting text. +To learn more, choose this link: +
      + + +
      +€ + +How to cut and paste +  +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Attach.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Attach.js new file mode 100644 index 00000000..cf6eba79 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Attach.js @@ -0,0 +1,73 @@ +data = ` + + +Attaching the original + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Attaching the original  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you reply to a message, you can include a copy of the original message with your reply. +

      +This way, when a person receives your response, they'll see a reminder of what you're responding to. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/More.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/More.js new file mode 100644 index 00000000..5196acfd --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/More.js @@ -0,0 +1,82 @@ +data = ` + + +Attaching the original + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Attaching the original  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This feature has to be turned on before you +can use it. Choose this link and make +sure the second box has a check mark in it: +
      + + +
      +€ + +Edit Mail settings +  +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Show.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Show.js new file mode 100644 index 00000000..05f79146 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Attach/Show.js @@ -0,0 +1,71 @@ +data = ` + + +Attaching the original + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Attaching the original  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If this setting has been turned on, you'll see a button for attaching the original every time you reply to a message. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/CarbCops.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/CarbCops.js new file mode 100644 index 00000000..02505ccd --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/CarbCops.js @@ -0,0 +1,77 @@ +data = ` + + +Carbon copies (cc) + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Carbon copies (cc)  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Whenever you send someone an e-mail message, +you can also send a carbon copy of +the message to someone else. +

      +Once the carbon copy setting has been turned +on, you'll see an area labeled cc: +whenever you write a message. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/More.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/More.js new file mode 100644 index 00000000..820af165 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/More.js @@ -0,0 +1,82 @@ +data = ` + + +Carbon copies (cc) + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Carbon copies (cc)  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This feature has to be turned on before you +can use it. Choose this link and make +sure the third box has a check mark in it: +
      + + +
      +€ + +Edit Mail settings +  +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/Show.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/Show.js new file mode 100644 index 00000000..7c55a867 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/CarbCops/Show.js @@ -0,0 +1,75 @@ +data = ` + + +Carbon copies (cc) + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Carbon copies (cc)  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If the carbon copy setting has been turned on, an area labeled +Cc will appear right below the area labeled To whenever you write a message. +

      +If you want to send a carbon copy +to someone, type their address after Cc. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Compose.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Compose.js new file mode 100644 index 00000000..ecb74bd0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Compose.js @@ -0,0 +1 @@ +data = ` Composing +


      Composing 
       

      Writing E-Mail

      Checking Messages
      Message Light, Remote Mail

      Receiving and Storing
      Capacity, Attachments, Full Mailbox

      Address Book
      Delivery, Replying

      Harassment
      Spam, Unwanted Mail

      Multimedia E-mail
      Audio and Video Attachments

      `; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Privacy.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Privacy.js new file mode 100644 index 00000000..33f3051c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Privacy.js @@ -0,0 +1,81 @@ +data = ` + + +Is e-mail private? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Is e-mail private?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can prevent other people from accessing your +e-mail by setting a password. To set a password, choose this link: +
      + + +
      +€ + +Change password +  +
      +
        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Reading.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Reading.js new file mode 100644 index 00000000..49e296a4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/Reading.js @@ -0,0 +1,76 @@ +data = ` + + +How to read your e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +How to read your e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To write your e-mail, choose Mail from your Home page. You will see a list of +your messages. Choose any of the messages to read it. +

      +Some messages are too long to fit on the screen all at once. You may have to +press the DOWN ARROW on your remote control or keyboard +to see the whole message. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/WriteMail.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/WriteMail.js new file mode 100644 index 00000000..e2c91eb5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GetStarted/WriteMail.js @@ -0,0 +1,84 @@ +data = ` + + +What is e-mail? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is e-mail?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To write an e-mail message, choose Mail from your Home page, then +choose Write. +

      +For more detailed instructions, choose this link: +
      + + +
      +€ + +Step-by-step instructions +  +
      + +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GettingStarted.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GettingStarted.js new file mode 100644 index 00000000..146a5f6a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/GettingStarted.js @@ -0,0 +1 @@ +data = ` Mail: Getting Started


      Mail: Getting Started 
       
      You can send and receive messages with anyone using e-mail. To learn more, choose one:

      Q: What is e-mail?
      Q: How to write an e-mail message
      Q: How to read your e-mail
      Q: Your e-mail address
      Q: Is e-mail private?

      If you're ready to start using Mail,
      choose Try Mail.

           
      `; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Main.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Main.js new file mode 100644 index 00000000..57840031 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Main.js @@ -0,0 +1,326 @@ +data = ` + + +Help: Mail + + + + + +
      +
      +
      + + + +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture.js new file mode 100644 index 00000000..0faf055c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture.js @@ -0,0 +1,73 @@ +data = ` + + +Adding pictures to e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures to e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you're writing e-mail, you can attach a picture +to your message from a TV show, a tape in your VCR, a video +camera, an e-scanner with video output, or a digital camera with video output. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture2.js new file mode 100644 index 00000000..38e60296 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture2.js @@ -0,0 +1,75 @@ +data = ` + + +Adding pictures to e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures to e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To add a picture to an e-mail message, follow these steps: +

      Step 1 +Choose Write. +

      Step 2 +When you're ready to add a picture, choose Photo. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture3.js new file mode 100644 index 00000000..6f236cc9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture3.js @@ -0,0 +1,77 @@ +data = ` + + +Adding pictures to e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures to e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 3 +A panel will appear, showing what's on TV. +

      +If you want to get the picture from some other +device — like a VCR, e-scanner, or video camera — choose the +TV/VIDEO switch to set it on +VIDEO. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture4.js new file mode 100644 index 00000000..d76e5855 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture4.js @@ -0,0 +1,77 @@ +data = ` + + +Adding pictures to e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures to e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 4 +When you see the picture you want to attach, +choose Freeze. +

      +If you choose Freeze a second time it will unfreeze the picture and you can try again. +

      +If you are using an e-scanner, skip this step. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture5.js new file mode 100644 index 00000000..ad12121c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Picture/Picture5.js @@ -0,0 +1,75 @@ +data = ` + + +Adding pictures to e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures to e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 5 +When you're happy with the frozen picture, choose Add to Message. +

      +This takes you back to the message, where you can address and send it +as usual. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply.js new file mode 100644 index 00000000..d8c9b4a7 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply.js @@ -0,0 +1,75 @@ +data = ` + + +Replying to a message + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Replying to a message  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When someone sends you a message and you want to send a message back to them, follow these steps: +

      Step 1 +From your Mail list, choose the message you want to reply to. +

      Step 2 +Choose Reply. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply2.js new file mode 100644 index 00000000..2bed680c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Reply/Reply2.js @@ -0,0 +1,76 @@ +data = ` + + +Replying to a message + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Replying to a message  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 3 +The address of the person you're replying to is filled in automatically after the word To:. +

      Step 4 +Type your message in the blank area underneath the word Subject. +

      Step 5 +After you've typed your response, choose Send. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature.js new file mode 100644 index 00000000..383201db --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature.js @@ -0,0 +1,75 @@ +data = ` + + +Your e-mail signature + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Your e-mail signature  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +An e-mail signature is a few lines of text that are +automatically added to the end of each message that you write. +

      +You can type whatever you want in your signature. Often people type +their name, address, phone number, or favorite quotation. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature2.js new file mode 100644 index 00000000..1a605a30 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature2.js @@ -0,0 +1,74 @@ +data = ` + + +Your e-mail signature + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Your e-mail signature  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +After you've written your signature,it will appear automatically +at the bottom of each message you write. +

      You can always remove the signature from a message you're writing +by choosing Remove signature. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature3.js new file mode 100644 index 00000000..a4a9a3f2 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Signature/Signature3.js @@ -0,0 +1,83 @@ +data = ` + + +Your e-mail signature + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Your e-mail signature  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To edit your signature now, choose this link +and type your signature into the box: +
      + + +
      +€ + +Edit your signature +  +
      +

      +If you don't want to have a signature, you can leave the box blank. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage.js new file mode 100644 index 00000000..c69bd608 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage.js @@ -0,0 +1,75 @@ +data = ` + + +What is the storage area? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is the storage area?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +The storage area is where you can keep track +of your messages. +

      +There are separate folders for messages you have saved, messages +you have sent, and messages you have discarded. You can move messages from one folder to another to organize your messages as you wish. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage2.js new file mode 100644 index 00000000..3f216d9b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Storage/Storage2.js @@ -0,0 +1,81 @@ +data = ` + + +What is the storage area? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is the storage area?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +In order to have access to the storage area, you need to make sure the setting has been turned on. Choose this link and +make sure the first box has a check mark in it: +
      + + +
      +€ + +Edit Mail settings +  +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/WhatIs.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/WhatIs.js new file mode 100644 index 00000000..0258b104 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/WhatIs.js @@ -0,0 +1,74 @@ +data = ` + + +What is e-mail? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is e-mail?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +With e-mail — short for electronic mail — you can exchange types messages +with anyone in the world who has an e-mail address. +

      +E-mail messages travel quickly through the internet, often arriving in minutes. +

        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing.js new file mode 100644 index 00000000..30b3492c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing.js @@ -0,0 +1,104 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +To write an e-mail message, follow these steps: +

      Step 1 + + +First, if you're not already in Mail, choose Mail from `; +if (session_data.hasCap("client-has-tv-experience")) + data += "Web Home" +else + data += "Home" +data += ` or press the Mail key on your keyboard. + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing2.js new file mode 100644 index 00000000..27b1a716 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing2.js @@ -0,0 +1,93 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +

      Step 2 + + +Then choose Write. + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing3.js new file mode 100644 index 00000000..10e5ef3b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing3.js @@ -0,0 +1,103 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +

      Step 3 + + +After the word To, type in the e-mail +address of the person you're writing to. +

      +Here's an example of an e-mail address: +

      +somename@webtv.net + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing4.js new file mode 100644 index 00000000..4c45352e --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing4.js @@ -0,0 +1,102 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +

      Step 4 + + +After the word Subject, type +a short phrase describing what the message is about. +

      +When your message appears in the person's +mailbox, they'll see it first. + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing5.js new file mode 100644 index 00000000..0ae32839 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing5.js @@ -0,0 +1,99 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +

      Step 5 + + +In the area beneath the subject, +type in the message itself. + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing6.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing6.js new file mode 100644 index 00000000..a6103835 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/Write/Writing6.js @@ -0,0 +1,99 @@ +data = ` + + +Writing E-Mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Writing E-Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +

      Step 6 + + +Finally, choose Send, and your +message will be sent. + +

      + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/mail.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/mail.js new file mode 100644 index 00000000..c28303b4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Mail/mail.js @@ -0,0 +1 @@ +data = ` Help: Mail


      Mail

      Getting started with Mail
      Everything you need to know to begin using e-mail

      Detailed instructions
      Step-by-step instructions on using e-mail

      Frequently asked questions
      Find an answer or send us e-mail about Mail

      `; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs.js new file mode 100644 index 00000000..18625c70 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs.js @@ -0,0 +1,77 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + +data = ` + + +What is remote mail? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is remote mail?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Remote mail is a feature that allows you to have e-mail from another mail service delivered to your WebTV Mail list. +
        +  +  +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs2.js new file mode 100644 index 00000000..9d3e0e87 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/MailPOP/WhatIs/WhatIs2.js @@ -0,0 +1,96 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + +data = ` + + +What is remote mail? + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +What is remote mail?  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + + + + + +
      +
      +To set up remote mail, choose Settings from your Mail list. + + + + + +
      + +
      + + +
      +
      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail.js new file mode 100644 index 00000000..5bcb9d09 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail.js @@ -0,0 +1,73 @@ +data = ` + + +Adding pictures from an e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures from an e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can add pictures to any +Web page you are creating. To +learn more, choose Continue. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail2.js new file mode 100644 index 00000000..28061171 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail2.js @@ -0,0 +1,75 @@ +data = ` + + +Adding pictures from an e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures from an e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To add a picture from an e-mail message +to your Scrapbook, follow these steps: +

      Step 1 +Choose a message from your Mail List that has a +picture attached. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail3.js new file mode 100644 index 00000000..b45edadf --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Scrapbook/AddFromMail/AddFromMail3.js @@ -0,0 +1,76 @@ +data = ` + + +Adding pictures from an e-mail + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding pictures from an e-mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 2 +Choose Scrapbook. +

      +NOTE: The Scrapbook link will +only appear when you're looking at an e-mail message +that has a picture attached. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview.js new file mode 100644 index 00000000..a5ac5e0f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview.js @@ -0,0 +1,76 @@ +data = ` + + +Spell-checker overview + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Spell-checker overview  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +The spell-checker looks for misspelled words in a message +and helps you correct them. +

      +The spell-checker can also add words to your word list. You can add words that are spelled correctly but aren't in the dictionary, like someone's name or the name of a town. +

      +The words are saved on your list until you remove them. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview2.js new file mode 100644 index 00000000..2d5119cf --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview2.js @@ -0,0 +1,75 @@ +data = ` + + +Spell-checker overview + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Spell-checker overview  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To use the spell-checker, follow these steps: +

      Step 1 +Choose Write from your Mail list. +

      Step 2 +Write your message as usual. When you're done, choose Spelling. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview3.js new file mode 100644 index 00000000..4bccd62c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview3.js @@ -0,0 +1,77 @@ +data = ` + + +Spell-checker overview + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Spell-checker overview  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 3 +The first misspelled word appears at the top of the page, highlighted in white. +

      Step 4 +A list of suggested corrections appears at the middle of the screen. +

      +You can select any of the words on the list to make the change +and move on to the next word. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview4.js new file mode 100644 index 00000000..af69c961 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview4.js @@ -0,0 +1,75 @@ +data = ` + + +Spell-checker overview + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Spell-checker overview  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 5 +If you don't find the word you want among the suggestions, move the yellow box up to the area labeled POSSIBLE MISSPELLING and type in a correction, then choose Change. +

      Step 6 +If you don't want to change a word that gets highlighted as +a misspelling, choose Skip Word. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview5.js new file mode 100644 index 00000000..7cc021d3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Spelling/Overview/Overview5.js @@ -0,0 +1,79 @@ +data = ` + + +Spell-checker overview + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Spell-checker overview  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +

      Step 7 +If the highlighted word is not misspelled +— someone's name, for example — +choose Add Word. +

      +The next time you use the word in an e-mail message, +the spell-checker won't mark it as a misspelling. +

      Step 8 +When you reach the last word, choose Done. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Find.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Find.js new file mode 100644 index 00000000..b2a6b64a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Find.js @@ -0,0 +1,89 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Here's a trick for quickly selecting a word on a page. +First press cmd-f on your keyboard. +Then type Panama and choose Find on Page. +

      +The word Panama above should now be selected. See if +you can copy (cmd-c) and paste (cmd-v) +it after the text in the rectangle below. +

      +

      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Paste.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Paste.js new file mode 100644 index 00000000..3cb62de0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Paste.js @@ -0,0 +1,89 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Again, move the yellow box to the rectangle. Then, +using the arrow keys, position the blinking cursor +where you'd like to paste the text. +

      +Then type cmd-v +(type the letter v while holding +down the cmd key) to paste. +

      +

      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/PasteWord.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/PasteWord.js new file mode 100644 index 00000000..1a4780e3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/PasteWord.js @@ -0,0 +1,86 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Now try to paste the word only — from +the previous page — between the words It's +and a below. Move the cursor before the word a, then +press cmd-v to paste. +

      +

      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Review.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Review.js new file mode 100644 index 00000000..ed23d19e --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Review.js @@ -0,0 +1,85 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Here are the key combinations for cutting and pasting: +

      +

        +
      • cmd-a to select all the text in an area
      • + +
      • cmd-c to copy the selected text
      • + +
      • cmd-x to cut the selected text
      • + +
      • cmd-v to paste
      • + +
      • shift-arrow to select some of the text
      • + +
      • cmd-f to find and select text on a page
      • +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Select.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Select.js new file mode 100644 index 00000000..1175d74f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Select.js @@ -0,0 +1,91 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To practice selecting and copying text, move the yellow +box up to the rectangle below. You'll see a blinking +line — or cursor — after the word copy. +

      +Then press cmd-a (type the letter a while holding +down the cmd key). +This selects all the text in the area. Next, type +cmd-c to copy the +text. Choose Continue. +

      +

      +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/SelectWord.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/SelectWord.js new file mode 100644 index 00000000..72114df7 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/SelectWord.js @@ -0,0 +1,90 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can also cut and paste individual words. +Again, move to the rectangle. Then hold down +shift and use the arrow keys to select +the text. To start over, +release the shift key and press an arrow key. +

      +

      +
      +

      +Try selecting just the word only, then +cut it by pressing cmd-x. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Start.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Start.js new file mode 100644 index 00000000..bb9e6c41 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/CutPaste/Start.js @@ -0,0 +1,78 @@ +data = ` + + +Cut, copy, and paste + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Cut, copy, and paste  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Cutting and pasting is when you remove text +from one place and insert it somewhere else. +You can cut and paste text anywhere you can +type — in an e-mail message, for example. +

      +You can also copy text from one place — +such as a Web page — and paste it +anywhere you can type. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Capitals.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Capitals.js new file mode 100644 index 00000000..28f9e895 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Capitals.js @@ -0,0 +1,89 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To type capital letters, highlight shift on the keyboard +and press the center button. Then highlight the letter you want to type and +press the center button. Try it now: +
      +
      +

      +To turn on caps lock and type many capital letters, highlight shift on the keyboard and press the +center button twice. When you've finished typing capitals, +select the shift key again to turn off caps lock. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Erasing.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Erasing.js new file mode 100644 index 00000000..7ad65b67 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/Erasing.js @@ -0,0 +1,90 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To erase what you've typed: +

      + + + + +
      +1. + +Choose an arrow key on the keyboard and press the center +button until the vertical line is directly to the right of the letter to be erased. +
      +2. + +Choose the delete key on the keyboard. +
      +3. + +Press the center button. +
      +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/GettingRidOf.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/GettingRidOf.js new file mode 100644 index 00000000..903c8d3f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/GettingRidOf.js @@ -0,0 +1,73 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To remove the keyboard from your screen, press +the BACK button on +the remote. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/InsertingSpace.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/InsertingSpace.js new file mode 100644 index 00000000..18091ba4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/InsertingSpace.js @@ -0,0 +1,89 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To add a space: +

      + + + + +
      +1. + +Use the arrow keys on the keyboard to move the vertical yellow line to the position in the text where you want to put a space. +
      +2. + +Highlight space on the on-screen keyboard. +
      +3. + +Press the center button on the remote. +
      +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextLine.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextLine.js new file mode 100644 index 00000000..d1c9d00d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextLine.js @@ -0,0 +1,84 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To move to the next line in the text box: +

      + + + +
      +1. + +Highlight return on the on-screen keyboard. +
      +2. + +Press the center button. +
      +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextTextBox.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextTextBox.js new file mode 100644 index 00000000..c848abb7 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/NextTextBox.js @@ -0,0 +1,84 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To move to the next text box on the same page: +

      + + + +
      +1. + +Highlight continue on the on-screen keyboard. +
      +2. + +Press the center button until the next text box is highlighted. +
      +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/OnScreenKeyboard.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/OnScreenKeyboard.js new file mode 100644 index 00000000..190a0cd0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/OnScreenKeyboard.js @@ -0,0 +1,91 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can use your WebTV +remote control to type. When you +need to type text, you'll see a text box that looks like this: +
      +
      +

      +Press the center +button to make the on-screen keyboard appear. +

      +A small yellow line in the text box shows where +the letters you type will appear. Now you can type. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/PreviousTextBox.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/PreviousTextBox.js new file mode 100644 index 00000000..d5cc05f9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/OnScreenKeyboard/PreviousTextBox.js @@ -0,0 +1,83 @@ +data = ` + + +The on-screen keyboard + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The on-screen keyboard  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +To move to the previous text box on the same page: +

      + + +
      +1. + +Choose the up arrow on the on-screen keyboard. +
      +2. + +Press the center button. +
      +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/Send.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/Send.js new file mode 100644 index 00000000..4dee1294 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/Send.js @@ -0,0 +1,79 @@ +data = ` + + +The Options panel + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +The Options panel  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Choose send if you're on a Web page +and you want to tell someone about it. +

      +Just fill in the person's e-mail address, +and they'll receive a message telling them +the page's address. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Find.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Find.htm new file mode 100644 index 00000000..2e8e1039 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Find.htm @@ -0,0 +1,60 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose find to look for text +on the page you're viewing. +

      +For example, to find the word "viewing" on this page, +press the OPTIONS button, choose find, type viewing, +and choose Find on page. +


      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Goto.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Goto.htm new file mode 100644 index 00000000..68e15ca5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Goto.htm @@ -0,0 +1,70 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose go to if you know the +address of a Web page you want to visit. +For instructions, choose this link: +
      + + +
      +€ + +Using "go to" + +  +
      +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=HangUp.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=HangUp.htm new file mode 100644 index 00000000..3dd3cdeb --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=HangUp.htm @@ -0,0 +1,57 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose hang up if you want +to free up the phone line without +turning your terminal off. +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Info.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Info.htm new file mode 100644 index 00000000..f7a62239 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Info.htm @@ -0,0 +1,55 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose the info button on the Options panel to get information about the Web page you're viewing. +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Messenger.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Messenger.htm new file mode 100644 index 00000000..1b18d405 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Messenger.htm @@ -0,0 +1,71 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose messenger to start a conversation +with somebody using MSN Messenger. +

      +To learn more about MSN Messenger, choose this link: +
      + + +
      +€ + +About Messenger + +  +
      +


      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Print.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Print.htm new file mode 100644 index 00000000..9f988dce --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Print.htm @@ -0,0 +1,71 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      If you have a printer, choose print +to print the page you're viewing. +

      +For more about printing, choose this link: +
      + + +
      +€ + +About printing + +  +
      +


      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Reload.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Reload.htm new file mode 100644 index 00000000..1439fe16 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Reload.htm @@ -0,0 +1,58 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose reload to get the latest version of the page you're viewing. +

      +This is useful if you're viewing a page that gets updated at short intervals — for example, a page with stock quotes, sports +scores, or news headlines. +


      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Save.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Save.htm new file mode 100644 index 00000000..daf01ffa --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=Save.htm @@ -0,0 +1,72 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      If you want to visit a Web page again +later, choose save to add the +page to your favorites. +

      +For more about favorites, choose this link: +
      + + +
      +€ + +About favorites + +  +
      +


      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TVvsWeb.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TVvsWeb.htm new file mode 100644 index 00000000..848e658b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TVvsWeb.htm @@ -0,0 +1,59 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      You can also use the Options panel when +you're watching TV. +

      +For instructions about using the Options +panel in TV world, go to TV Home and choose Help. +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TvWindow.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TvWindow.htm new file mode 100644 index 00000000..d807ed9a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=TvWindow.htm @@ -0,0 +1,69 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      Choose pip to watch TV while you surf the Web. +For more information, choose this link: +
      + + +
      +€ + +About pip + +  +
      +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=logo.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=logo.htm new file mode 100644 index 00000000..3c647689 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options&page=logo.htm @@ -0,0 +1,56 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      The logo on the Options +panel takes you to Web Home. +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options.htm b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options.htm new file mode 100644 index 00000000..d3f5e0c9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Tips/Options/topic=Tips&subtopic=Options.htm @@ -0,0 +1,62 @@ + The Options panel


      The Options panel 

      Main Help Index

      Find an answer
      When you're surfing the Web, the Options panel +provides a quick way to go directly to a Web address, +save a Web page as a Favorite, send a Web page to +a friend, and more. +

      +To make the Options panel appear, press the OPTIONS button +on your remote. Press the OPTIONS button again to put it away. +Pressing the OPTIONS key on your keyboard does the same thing. +

      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/1.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/1.js new file mode 100644 index 00000000..bf7b4434 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/1.js @@ -0,0 +1,79 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +You can add up to five additional users to your +account at no extra charge. +

      +Each user has a different e-mail +address and password, a separate list of +favorites, and other personal settings. +

      +Each time you connect to WebTV, +you'll log on as whichever user you choose. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/2.js new file mode 100644 index 00000000..e44443c3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/2.js @@ -0,0 +1,74 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you add a user, you can set restrictions to make it more child-friendly. +

      +You can block a user's access to inappropriate Web sites. +You can also block access to e-mail, discussion groups, chat rooms, or Web page building. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/3.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/3.js new file mode 100644 index 00000000..6182cd4e --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/3.js @@ -0,0 +1,78 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +Each user you add to your account has its own e-mail address. When you add a new user, you'll create an Internet name, and you'll have a new e-mail address based on that name. +

      +WebTV Internet names must: +

        +
      • Begin with a letter +
      • Contain letters and numbers only +
      • Not contain any spaces or hyphens +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/4.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/4.js new file mode 100644 index 00000000..1dae93e9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/4.js @@ -0,0 +1,76 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you add a user, we'll ask for a first and last name. The +first and last name for each user must: +
        +
      • Contain letters and numbers only +
      • Be at least one character long +
      • Not contain unapproved terms +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/5.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/5.js new file mode 100644 index 00000000..47a9bc49 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/5.js @@ -0,0 +1,75 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If you want to participate in chat rooms or discussion +groups using a different name, you can create a new +user and give that user the name you'd like. +

      +Then you can log on as that new user and use Chat or Discuss with the new name. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/6.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/6.js new file mode 100644 index 00000000..01f2b0d6 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/6.js @@ -0,0 +1,72 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +When you set up a new user, you can specify a password. Only those who know the password will be able to access that +user's e-mail and favorites. +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/7.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/7.js new file mode 100644 index 00000000..ded54f11 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/AddUser/7.js @@ -0,0 +1,81 @@ +data = ` + + +Adding users + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Adding users  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +If you want to add a new user now, choose this +link and then choose Add User: +
      + + +
      +€ + +Users setup +  +
      +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses.js new file mode 100644 index 00000000..7875135a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses.js @@ -0,0 +1,77 @@ +data = ` + + +E-mail addresses + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +E-mail addresses  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +A typical e-mail address looks like this: +

      +someName@someplace.com +

      +In this example, someName is the person's Internet name. The @ sign is pronounced "at." someplace.com is the organization that handles the person's e-mail, sometimes called the domain. +

      +Notice that there are no spaces in e-mail addresses. +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses2.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses2.js new file mode 100644 index 00000000..53944e5d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/prerendered/Users/Addresses/Addresses2.js @@ -0,0 +1,92 @@ +data = ` + + +Your e-mail address + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Your e-mail address  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +This is your e-mail address: +

      +${ssid_sessions[socket.ssid].getSessionData("subscriber_username")}@WebTV +

      +If you want to begin using a different e-mail address, +you can add a new user and give it the +name you want. +To add a new user now, choose this link: +
      + + +
      +€ + +Users setup +  +
      + +

      + + +
      +
      +
      +
      + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary.js new file mode 100644 index 00000000..9c41e629 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary.js @@ -0,0 +1,83 @@ +class WTVTemplate { + + page_args = {}; + + constructor(page_args) { + this.page_args = page_args; + } + + getTemplatePage() { + var data = ` + +Web words: ${this.page_args.word} + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +${this.page_args.word}  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +${this.page_args.definition} +
      + + +
      +
      +
      +
      + + + + +
      +
      + +`; + return data; + } +} +module.exports = WTVTemplate; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_index.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_index.js new file mode 100644 index 00000000..7cd283cd --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_index.js @@ -0,0 +1,92 @@ +class WTVTemplate { + + page_args = {}; + + constructor(page_args) { + this.page_args = page_args; + } + + getTemplatePage() { + var data = ` + +Web words: Index + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Web words  + +
      +  +
      +
      + + + +
      +
      + + + + + every 8 entries, but only if its not the last entry + i = 0; + data += `
      +
      + +Choose the first letter of the word you are looking for. +
      +
      `; + var i = 0; + var j = 0; + var self = this; + Object.keys(this.page_args.letters).forEach(function (k) { + data += `\n${self.page_args.letters[k]}\n` + i++; + j++; + if (i == 8 && self.page_args.letters.length != (j + 1)) { + // add new
      \n`; + } + }) + data += `
      +
      +
      +
      + + + + +
      +
      +` + return data; + } +} +module.exports = WTVTemplate; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_word_index.js b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_word_index.js new file mode 100644 index 00000000..7ffa6267 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceDeps/wtv-guide/templates/glossary_word_index.js @@ -0,0 +1,120 @@ +class WTVTemplate { + + page_args = {}; + + constructor(page_args) { + this.page_args = page_args; + } + + getTemplatePage() { + var data = ` + +Web words: ${this.page_args.letter} + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Web words: ${this.page_args.letter}  + +
      +  +
      +
      + + + + +
      +
      + +Choose a word to see what it means. +
      + + +
      + + +
      `; + var table_split = Math.floor(this.page_args.words.length / 2); + var words_rendered = 0; + var self = this; + console.log(this.page_args.words); + Object.keys(this.page_args.words).forEach(function (k) { + // test + data += `${self.page_args.words[k].word}
      \n` + words_rendered++; + if (self.page_args.words.length % 2 != 0) { + // odd so split later to put extra on first row + if (words_rendered - 1 == table_split) data += `
      `; + } else { + if (words_rendered == table_split) data += ``; + } + }); + + /* +S-Video
      +Save
      +screen saver
      +Scroll buttons
      +Search
      +search engine
      +Send
      +server
      +service provider
      +Shockwave
      +
      +shortcuts
      +site
      +Smart cards
      +spam
      +SSL
      +Storage
      +streaming
      +surf
      +SurfWatch
      +*/ + data += ` +
      +
      +
      +
      +
      + + + + +
      +
      + +`; + return data; + } +} +module.exports = WTVTemplate; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/http_pc/favicon.ico b/zefie_wtvp_minisrv/ServiceVault/http_pc/favicon.ico new file mode 100644 index 00000000..4b9d0730 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/http_pc/favicon.ico differ diff --git a/zefie_wtvp_minisrv/ServiceVault/http_pc/get.js b/zefie_wtvp_minisrv/ServiceVault/http_pc/get.js deleted file mode 100644 index 844beae0..00000000 --- a/zefie_wtvp_minisrv/ServiceVault/http_pc/get.js +++ /dev/null @@ -1,39 +0,0 @@ -var minisrv_service_file = true; - -if (request_headers.query.url) { - if (request_headers.query.url.indexOf(":/") > 0) { - var service_request = request_headers.query.url.split(":/")[0]; - var service_port = 0; - Object.keys(minisrv_config.services).forEach(function (k) { - if (minisrv_config.services[k].disabled) return; - if (k == service_request) service_port = minisrv_config.services[k].port; - }); - if (service_port > 0) { - request_is_async = true; - var request_headers_out = new Array() - request_headers_out.request = "GET " + request_headers.query.url; - request_headers_out.request_url = request_headers.query.url; - request_headers_out['wtv-client-serial-number'] = socket.id + "HTTPPCReq"; - processURL(socket, request_headers_out); -/* - var s = require('net').Socket(); - var outdata = ""; - s.connect(service_port); - s.setTimeout(1, function () { - outdata = outdata.split() - sendToClient(socket,outdata); - }); - s.on('data', function (data) { - outdata += data; - }); - s.write() -*/ - } - } -} - -if (!headers) { - var errpage = wtvshared.doErrorPage(500) - headers = errpage[0]; - data = errpage[1]; -} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/http_pc/index.js b/zefie_wtvp_minisrv/ServiceVault/http_pc/index.js index 30c83bfe..a1833b10 100644 --- a/zefie_wtvp_minisrv/ServiceVault/http_pc/index.js +++ b/zefie_wtvp_minisrv/ServiceVault/http_pc/index.js @@ -3,31 +3,13 @@ var minisrv_service_file = true; headers = `200 OK Content-Type: text/html` -var splash_logo = minisrv_config.config.service_splash_logo; -if (splash_logo.substring(0, 4) == "file") splash_logo = "wtv-star:/ROMCache/splash_logo_hacktv.gif"; - data = ` - -zefie minisrv ${minisrv_config.version} - +zefie minisrv v${minisrv_config.version} -
      - -
      - -


      -


      -


      - -
      -Mini service -
      -zefie minisrv v${minisrv_config.version}`; -if (minisrv_config.config.git_commit) data += " (git " + minisrv_config.config.git_commit + ")"; -data += ` -
      -

      +

      +Welcome to the zefie minisrv v${minisrv_config.version} PC Services +

      `; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js b/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js new file mode 100644 index 00000000..5d5d2cc7 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js @@ -0,0 +1,557 @@ +var minisrv_service_file = true; +var viewer = 2 // debug override + +var viewergen_resource_dir = ServiceDeps + "/viewergen/"; + +var viewers = { + 0: "WebTVIntel--1.0.exe", + 1: "WebTVIntel--1.1.exe", + 2: "WebTVIntel--2.5.exe", + 3: "WebTVIntel--1.0-HE.exe", + 4: "WebTVIntel--2.5-HE.exe" +} + +var logos = { + 0: null, + 1: "SuperViewer_Setup.bmp", + 2: "HackersEdition_Setup.bmp" +} + +var disksets = { + 0: null +} + +var viewer_stock_md5s = { + "WebTVIntel--1.0.exe": "d7bde1adbe3549f58dd95425d3ac2af9", + "WebTVIntel--1.1.exe": "ce7b6d1734b5e3d1cbd5f068609223d1", + "WebTVIntel--2.5.exe": "4c5754bb8b69739b6f414c2d159051da", + "WebTVIntel--1.0-HE.exe": "391f303fd70034e69d3a50583de72c89", + "WebTVIntel--2.5-HE.exe": "f0207865693a45ba76b9057dcb8ea672" +} + + +var patch_defaults = { + "start_url": "client:GoToConn", + "default_ip": "10.0.0.1" +} + +var patch_limits = { + "start_url": 26, + "default_ip": 11, +} + +function getPatchDataType(type, invert = false) { + var patch_data = false; + if ((type == "wtv-incarnation" && !invert) || (type == "wtv-encryption" && invert)) { + patch_data = "wtv-client-serial-number: %s\r\n" + patch_data += "wtv-user-requested-upgrade: %s\r\n"; + patch_data += "wtv-system-cpuprid: %s\r\n"; + patch_data += "wtv-system-version: %s\r\n"; + patch_data += "wtv-capability-flags: %s\r\n"; + patch_data += "wtv-client-bootrom-version: %s\r\n"; + patch_data += "wtv-need-upgrade: %s\n"; + patch_data += "wtv-used-8675309: %s\n"; + patch_data += "wtv-client-rom-type: %s\r\n"; + patch_data += "wtv-system-chipversion: %s\r\n"; + patch_data += "User-Agent: %s\r\n"; + } + else if ((type == "wtv-encryption" && !invert) || (type == "wtv-incarnation" && invert) ) { + patch_data = "wtv-tourist-enabled: %s\r\n"; + patch_data += "wtv-demo-enabled: %s\r\n"; + patch_data += "wtv-default-client-scriptprops: %s\r\n"; + patch_data += "wtv-default-client-useragent: %s\r\n"; + patch_data += "wtv-system-cpuspeed: %s\r\n"; + patch_data += "wtv-system-sysconfig: %s\r\n"; + patch_data += "wtv-my-disk-sucks-sucks-sucks: %s\r\n"; + patch_data += "wtv-disk-first-error: %s\r\n"; + patch_data += "wtv-disk-size: %s\r\n"; + patch_data += "wtv-client-address: %s\r\n"; + } + return patch_data; +} + + +function getResData(file) { + var res_data = null; + if (file.substr(-2, 2).toLowerCase() == "gz") { + var res_gz_data = fs.readFileSync(viewergen_resource_dir + file); + res_data = zlib.gunzipSync(res_gz_data); + } else { + res_data = fs.readFileSync(viewergen_resource_dir + file); + } + return res_data; +} + +var patch_data = { + "WebTVIntel--1.0.exe": { + 225: Buffer.from("\xD8", 'ascii'), + 273: Buffer.from("\x60", 'ascii'), + 332: Buffer.from("\x00\xAA", 'ascii'), + 568: Buffer.from("\x00\xA8", 'ascii'), + 577: Buffer.from("\xAA", 'ascii'), + 624: { + length: 383, + type: "wtv-incarnation" + }, + 132022: Buffer.from("\x68\xE8\x65\x5D\x00", 'ascii'), // patch pre-register pt1 + 157861: Buffer.from("\x68\x70\x02\x40\x00", 'ascii'), // Prepare incarnation hack + 1016856: Buffer.from("\x68\xCC\x04\x5E\x00", 'ascii'), + 1074080: Buffer.from("\x68\xCC\x04\x5E\x00", 'ascii'), + 1263129: Buffer.from("\x68\x70\x6C\x5A\x00", 'ascii'), // Prepare encryption hack + 1919952: Buffer.from("scriptless-visit-reason\x00", 'ascii'), // patch pre-register pt2 + 1919976: Buffer.from("10\x00", 'ascii'), // patch pre-register pt3 + 1728624: { + length: 398, + type: "wtv-encryption" + }, + 1931552: Buffer.from(patch_defaults.default_ip + "\x00", 'ascii'), // patch default service address + 1960460: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 1960496: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 1967796: Buffer.from("\x00".repeat(41), 'ascii'), // remove unwanted headers + 1967856: Buffer.from("\x00".repeat(24), 'ascii'), // remove unwanted headers + 2003968: getResData("ResData--1.0.res.gz") + }, + "WebTVIntel--1.0-HE.exe": { + 624: { + length: 383, + type: "wtv-incarnation" + }, + 1728624: { + length: 398, + type: "wtv-encryption" + } + }, + "WebTVIntel--1.1.exe": { + 209: Buffer.from("\xFA", 'ascii'), + 257: Buffer.from("\x90", 'ascii'), + 316: Buffer.from("\x00\xB6", 'ascii'), + 552: Buffer.from("\x00\xB4", 'ascii'), + 561: Buffer.from("\xB6", 'ascii'), + 620: { + length: 383, + type: "wtv-incarnation" + }, + 132118: Buffer.from("\x68\xE4\x75\x5D\x00", 'ascii'), // patch pre-register pt1 + 157861: Buffer.from("\x68\xCC\x72\x5A\x00", 'ascii'), // Prepare encryption hack + 1015384: Buffer.from("\x68\xCC\x14\x5E\x00", 'ascii'), + 1073264: Buffer.from("\x68\xCC\x14\x5E\x00", 'ascii'), + 1264057: Buffer.from("\x68\x6C\x02\x40\x00", 'ascii'), // Prepare incarnation hack + 1730252: { + length: 307, + type: "wtv-encryption" + }, + 1921484: Buffer.from("scriptless-visit-reason\x00", 'ascii'), // patch pre-register pt2 + 1921508: Buffer.from("10\x00", 'ascii'), // patch pre-register pt3 + 1933064: Buffer.from(patch_defaults.default_ip + "\x00", 'ascii'), // patch default service address + 1962188: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 1962224: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 1969540: Buffer.from("\x00".repeat(84), 'ascii'), // remove unwanted headers + 2005504: getResData("ResData--1.1.res.gz") + }, + + "WebTVIntel--2.5.exe": { + 396: Buffer.from("\x00\x50", 'ascii'), + 720: { + length: 3356, + type: "wtv-encryption" + }, + 279771: Buffer.from("\x68\xB8\x04\x75\x00", 'ascii'), // patch pre-register pt1 + 299023: Buffer.from("\x08", 'ascii'), // Change the call location from ecx+16 to ecx+15 to unlock the communication stream + 329666: Buffer.from("\x68\x82\x6C\x70\x00", 'ascii'), // Prepare incarnation hack + 1893931: Buffer.from("\x71", 'ascii'), // Unlock the wtv- url access from the address bar. + 2201731: Buffer.from("\x68\xD0\x02\x40\x00", 'ascii'), // Prepare encryption hack + 3173506: { + length: 865, + type: "wtv-incarnation" + }, + 3473396: Buffer.from("\x00", 'ascii'), + 3474616: Buffer.from("10\x00", 'ascii'), // patch pre-register pt3 + 3746504: Buffer.from(patch_defaults.default_ip + "\x00", 'ascii'), // patch default service address + 3474628: Buffer.from("scriptless-visit-reason\x00", 'ascii'), // patch pre-register pt2 + 3482832: Buffer.from("\x00".repeat(10), 'ascii'), // remove unwanted headers + 3808684: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 3808720: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 3808748: Buffer.from(patch_defaults.start_url + "\x00", 'ascii'), // patch startup url + 3826408: Buffer.from("\x00".repeat(66), 'ascii'), // remove unwanted headers + 3826356: Buffer.from("\x00".repeat(24), 'ascii'), // remove unwanted headers + 3940352: getResData("ResData--2.5.res.gz") + }, + "WebTVIntel--2.5-HE.exe": { + 720: { + length: 3356, + type: "wtv-encryption" + }, + 3173506: { + length: 865, + type: "wtv-incarnation" + } + } +} + +function getPatchData(fname, client_data_obj, start_url = "client:GoToConn", default_ip = "10.0.0.1") { + var customized_patch_data = patch_data[fname]; + Object.keys(customized_patch_data).forEach(function (idx) { + var val = customized_patch_data[idx]; + + if (typeof val === 'string') { + // start url override + if (start_url != patch_defaults.start_url && start_url.length <= patch_limits.start_url) { + if (val.substr(0, patch_defaults.start_url.length) == patch_defaults.start_url) + customized_patch_data[idx] = start_url + "\x00"; + } + + // default service ip override + if (default_ip != patch_defaults.default_ip && default_ip.length <= patch_limits.default_ip) { + if (val.substr(0, patch_defaults.default_ip.length) == patch_defaults.default_ip) + customized_patch_data[idx] = default_ip + "\x00"; + } + } else { + if (!val.byteLength) { + // not a buffer object + var block_length = val['length']; + var patch_data = getPatchDataType(val['type'], (fname.substr(12,3) != "1.1")); + if (patch_data) { + var patch_data_array = patch_data.split("\r\n"); + var patch_data_string = ""; + Object.keys(patch_data_array).forEach(function (didx) { + var header_end = patch_data_array[didx].indexOf(":"); + if (header_end) { + var patch_data_header = patch_data_array[didx].substr(0, header_end); + var client_value = client_data_obj[patch_data_header]; + if (client_value) + patch_data_string += patch_data_array[didx].replace("%s", client_value) + "\r\n"; + } + }); + } + if (fname.substr(12, 3) != "2.5") { + var length_difference = block_length - patch_data_string.length; + if (length_difference > 0) + patch_data_string += "\x00".repeat(length_difference - (val['type'].length + 1)); + patch_data_string += val['type'] + "\x00"; + } else { + patch_data_string += val['type'] + "\x00"; + var length_difference = block_length - patch_data_string.length; + if (length_difference > 0) + patch_data_string += "\x00".repeat(length_difference); + } + customized_patch_data[idx] = Buffer.from(patch_data_string, 'ascii'); + } + } + }) + return customized_patch_data; +} + +function patchBinary(patchDataObject) { + Object.keys(patchDataObject.patch_data).forEach(function (idx) { + idx = parseInt(idx); + data_length = patchDataObject.patch_data[idx].byteLength || patchDataObject.patch_data[idx].length + patchDataObject.data.fill(patchDataObject.patch_data[idx], idx, data_length + idx); + }) + return patchDataObject.data; +} + +function generateSSID() { + var ssid_template = "91xxxY0xx0b002xx"; + var ssid = ssid_template; + while (ssid.indexOf("x") != -1) { + ssid = ssid.replace("x", Math.floor(Math.random() * 16).toString(16)) + } + ssid = ssid.replace("Y", Math.floor(Math.random() * 7)); + return ssid; +} + +function buildProfile(build) { + var buildProfile = null; + switch (build) { + case 1235: + buildProfile = { + "wtv-system-version": build, + "wtv-capability-flags": "1009c93bef", + "wtv-client-bootrom-version": 105, + "wtv-client-rom-type": "bf0app", + "wtv-system-chipversion": 16842752, + "User-Agent": "Mozilla/4.0 WebTV/1.4.2 (compatible; MSIE 3.0)", + "wtv-system-cpuspeed": 112790760, + "wtv-system-sysconfig": 736935823 + } + break; + + case 7181: + buildProfile = { + "wtv-system-version": build, + "wtv-capability-flags": "10935ffc8f", + "wtv-client-bootrom-version": 2046, + "wtv-client-rom-type": "US-LC2-disk-0MB-8MB", + "wtv-system-chipversion": 51511296, + "User-Agent": "Mozilla/4.0 WebTV/2.2.6.1 (compatible; MSIE 4.0)", + "wtv-system-cpuspeed": 166187148, + "wtv-system-sysconfig": 4163328, + "wtv-disk-size": 8006 + } + break; + + case 71810: + buildProfile = { + "wtv-capability-flags": "d10094938ef", + "wtv-system-version": 7181, + "wtv-client-rom-type": "bf0app", + "wtv-client-bootrom-version": 105, + "wtv-system-chipversion": 16842752, + "wtv-system-sysconfig": 736935823, + "wtv-system-cpuspeed": 112790760, + "User-Agent": "Mozilla/4.0 WebTV/2.5 (compatible; MSIE 4.0)", + } + break; + case 16276: + buildProfile = { + "wtv-system-version": build, + "wtv-capability-flags": "1fee0e1d9b1ffdef", + "wtv-client-bootrom-version": 2046, + "wtv-client-rom-type": "US-LC2-disk-0MB-8MB", + "wtv-system-chipversion": 53608448, + "User-Agent": "Mozilla/4.0 WebTV/2.8.2 (compatible; MSIE 4.0)", + "wtv-system-cpuspeed": 166164662, + "wtv-system-sysconfig": 3116068, + "wtv-disk-size": 8006 + } + break; + } + return buildProfile; +} + +var enable_full_hacktv = false; +if (fs.existsSync(viewergen_resource_dir + "HackTV.zip")) { + enable_full_hacktv = true; + disksets['99'] = "HackTV.zip"; +} + +if (request_headers.query.viewer && + (request_headers.query.client_ssid || request_headers.query.random_ssid)) { + var client_ssid = null; + if (request_headers.query.client_ssid) + client_ssid = request_headers.query.client_ssid; + + if (request_headers.query.random_ssid) + client_ssid = generateSSID(); + + var viewer_file = viewers[request_headers.query.viewer]; + if (!viewer_file) { + errpage = wtvshared.doErrorPage("500", null, socket.minisrv_pc_mode) + headers = errpage[0]; + data = errpage[1]; + } else { + var viewer_gz_data = fs.readFileSync(viewergen_resource_dir + viewer_file + ".gz"); + var viewer_data = zlib.gunzipSync(viewer_gz_data); + var viewer_md5 = crypto.createHash('md5').update(viewer_data).digest("hex"); + if (viewer_md5 != viewer_stock_md5s[viewer_file]) { + console.log(viewer_file, "md5sum error. expected:", viewer_stock_md5s[viewer_file], ", got:", viewer_md5) + errpage = wtvshared.doErrorPage("500", null, socket.minisrv_pc_mode) + headers = errpage[0]; + data = errpage[1]; + } else { + var build = request_headers.query.build; + var client_data_obj = null + if (build) { + if (parseInt(build) > 0) { + client_data_obj = buildProfile(parseInt(build)); + } + } + // fallback + if (!client_data_obj) + client_data_obj = buildProfile(7181); + + client_data_obj["wtv-client-serial-number"] = client_ssid; + var patchDataObject = { + data: viewer_data, + patch_data: getPatchData(viewer_file, client_data_obj) + } + if (!patchDataObject.patch_data) { + errpage = wtvshared.doErrorPage("500", null, socket.minisrv_pc_mode) + headers = errpage[0]; + data = errpage[1]; + } else { + var patched_file = patchBinary(patchDataObject); + headers = `200 OK +Content-Type: application/octet-stream +Content-Disposition: attachment; filename="${viewer_file.replace(".exe", ".zip")}"` + var AdmZip = require("adm-zip"); + var zip = new AdmZip(); + + zip.addZipComment("Viewer SSID: " + client_ssid); + zip.addFile(viewer_file, patched_file); + if (!request_headers.query.viewer_only) { + var romset_zip = new AdmZip(viewergen_resource_dir + viewer_file.replace(".exe", "").replace("WebTVIntel", "AppData") + ".zip"); + var zipEntries = romset_zip.getEntries(); + zipEntries.forEach(function (zipEntry) { + if (zipEntry.entryName == "Setup.bmp" && request_headers.query.logo) { + var logo_file = logos[parseInt(request_headers.query.logo) || 0]; + if (logo_file) { + var logo_gz_data = fs.readFileSync(viewergen_resource_dir + logo_file + ".gz"); + var logo_data = zlib.gunzipSync(logo_gz_data); + zip.addFile(zipEntry.entryName, logo_data); + } else { + zip.addFile(zipEntry.entryName, zipEntry.getData()); + } + } else { + zip.addFile(zipEntry.entryName, zipEntry.getData()); + } + }); + if (request_headers.query.diskset) { + var diskset_file = disksets[parseInt(request_headers.query.diskset) || 0]; + if (diskset_file) { + var diskset_zip = new AdmZip(viewergen_resource_dir + diskset_file); + var zipEntries = diskset_zip.getEntries(); + zipEntries.forEach(function (zipEntry) { + zip.addFile("Disk/" + zipEntry.entryName, zipEntry.getData()); + }); + } + } + } + data = zip.toBuffer(); + } + } + } + +} else { + + headers = `200 OK +Content-Type: text/html` + + data = ` + +zefie minisrv v${minisrv_config.version} + + + + +

      +Welcome to the zefie minisrv v${minisrv_config.version} PC Services
      +


      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Viewer Version: +
      SSID: +
      +Viewer clients should use SSIDs starting with 91,
      +unless you are intentionally trying to spoof a box.
      +
      Startup Logo
      Disk Set +
      Build Spoof
      +This legacy option has little impact on minisrv servers,
      +although certain advanced server operators may use these flags
      +to determine what your "box" can do, and as such, may offer
      +features that do not work in the Viewer, especially older ones
      +
      Other Flags: + Let the server choose the SSID (Ignores SSID above)
      + Only include Viewer EXE, not ROM files or Logos (Advanced Users Only) +
      +
      + +
      +
      + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js index 87a0ede3..3bbfb5ce 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js @@ -1,12 +1,12 @@ var minisrv_service_file = true; -if (socket.ssid != null && !ssid_sessions[socket.ssid].get("wtvsec_login")) { - var wtvsec_login = new WTVSec(minisrv_config); +if (socket.ssid != null && !session_data.get("wtvsec_login")) { + var wtvsec_login = session_data.createWTVSecSession(); wtvsec_login.IssueChallenge(); if (request_headers["wtv-incarnation"]) wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); - ssid_sessions[socket.ssid].set("wtvsec_login", wtvsec_login); + session_data.set("wtvsec_login", wtvsec_login); } else if (socket.ssid != null) { - var wtvsec_login = ssid_sessions[socket.ssid].get("wtvsec_login"); + var wtvsec_login = session_data.get("wtvsec_login"); } if (wtvsec_login) { @@ -15,19 +15,21 @@ if (wtvsec_login) { headers = `200 OK Connection: Keep-Alive minisrv-use-carriage-return: false +minisrv-no-mail-count: true wtv-initial-key: ` + wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + ` Content-Type: text/tellyscript wtv-service: reset -` + getServiceString('wtv-head-waiter') + ` -` + getServiceString('wtv-star', { "no_star_word": true }) + ` -` + getServiceString('wtv-flashrom') + ` +${getServiceString('wtv-1800')} +${getServiceString('wtv-head-waiter')} +${getServiceString('wtv-star', { "no_star_word": true })} +${getServiceString('wtv-flashrom')} wtv-boot-url: wtv-head-waiter:/login? wtv-visit: wtv-head-waiter:/login? wtv-client-time-zone: GMT -0000 wtv-client-time-dst-rule: GMT wtv-client-date: `+ strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + ` GMT`; - var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; + var file_path = ServiceDeps + "/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; if (file_path) { request_is_async = true; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/offer-open-isp-suggest.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/offer-open-isp-suggest.js index 6b76eb8d..b8bb0262 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/offer-open-isp-suggest.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/offer-open-isp-suggest.js @@ -10,6 +10,7 @@ if (request_headers["wtv-ticket"]) { headers = `200 OK Connection: Keep-Alive +minisrv-no-mail-count: true wtv-expire-all: wtv- wtv-open-isp-disabled: false wtv-visit: `+ gourl + ` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js index ac6e516e..54eca96a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js @@ -3,21 +3,21 @@ var minisrv_service_file = true; var gourl = "wtv-head-waiter:/login?"; if (socket.ssid) { - if (ssid_sessions[socket.ssid].loadSessionData() == true) { + if (session_data.loadSessionData() == true) { console.log(" * Loaded session data from disk for", wtvshared.filterSSID(socket.ssid)) - ssid_sessions[socket.ssid].setSessionData("registered", (ssid_sessions[socket.ssid].getSessionData("registered") == true) ? true : false); + session_data.setSessionData("registered", (session_data.getSessionData("registered") == true) ? true : false); } else { - ssid_sessions[socket.ssid].session_data = {}; - ssid_sessions[socket.ssid].setSessionData("registered", false); + session_data.session_data = {}; + session_data.setSessionData("registered", false); } - if (ssid_sessions[socket.ssid].data_store) { - if (ssid_sessions[socket.ssid].data_store.sockets) { + if (session_data.data_store) { + if (session_data.data_store.sockets) { var i = 0; - ssid_sessions[socket.ssid].data_store.sockets.forEach(function (k) { + session_data.data_store.sockets.forEach(function (k) { if (typeof k != "undefined") { if (k != socket) { k.destroy(); - ssid_sessions[socket.ssid].data_store.sockets.delete(k); + session_data.data_store.sockets.delete(k); i++; } } @@ -25,14 +25,14 @@ if (socket.ssid) { if (i > 0 && minisrv_config.config.debug_flags.debug) console.log(" # Closed", i, "previous sockets for", wtvshared.filterSSID(socket.ssid)); } } - if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { + if (session_data.data_store.wtvsec_login) { if (minisrv_config.config.debug_flags.debug) console.log(" # Recreating primary WTVSec login instance for", wtvshared.filterSSID(socket.ssid)); - delete ssid_sessions[socket.ssid].data_store.wtvsec_login; + delete session_data.data_store.wtvsec_login; } - ssid_sessions[socket.ssid].data_store.wtvsec_login = new WTVSec(minisrv_config); - ssid_sessions[socket.ssid].data_store.wtvsec_login.IssueChallenge(); - if (request_headers["wtv-incarnation"]) ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); + session_data.data_store.wtvsec_login = session_data.createWTVSecSession(); + session_data.data_store.wtvsec_login.IssueChallenge(); + if (request_headers["wtv-incarnation"]) session_data.data_store.wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); } else { console.log(" * Something bad happened (we don't know the client ssid???)"); var errpage = wtvshared.doErrorPage(400) @@ -40,33 +40,33 @@ if (socket.ssid) { data = errpage[1]; } -if (request_headers.query.relogin && ssid_sessions[socket.ssid].getSessionData("registered")) gourl += "relogin=true"; -if (request_headers.query.reconnect && ssid_sessions[socket.ssid].getSessionData("registered")) gourl += "reconnect=true"; +if (request_headers.query.relogin && session_data.getSessionData("registered")) gourl += "relogin=true"; +if (request_headers.query.reconnect && session_data.getSessionData("registered")) gourl += "reconnect=true"; -if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { +if (session_data.data_store.wtvsec_login) { var prereg_contype = "text/html"; if (request_headers.query.relogin) { // relogin - ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = null; // clear old ticket + session_data.data_store.wtvsec_login.ticket_b64 = null; // clear old ticket } // if relogin and wtv-script-id != 0, skip tellyscript - ssid_sessions[socket.ssid].set("wtv-open-access", (request_headers['wtv-open-access'] == "true") ? true : false); + session_data.set("wtv-open-access", (request_headers['wtv-open-access'] == "true") ? true : false); var file_path = null; var bf0app_update = false; - var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + var romtype = session_data.get("wtv-client-rom-type"); var send_tellyscript = (minisrv_config.services[service_name].send_tellyscripts && !request_headers.query.relogin); - var wtv_script_id = parseInt(ssid_sessions[socket.ssid].get("wtv-script-id")); - var bootrom = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version"); + var wtv_script_id = parseInt(session_data.get("wtv-script-id")); + var bootrom = session_data.get("wtv-client-bootrom-version"); if ((request_headers.query.reconnect || request_headers.query.relogin) && wtv_script_id != 0) send_tellyscript = false; if (send_tellyscript) { if (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist) { var send_telly_to_ssid = (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist.findIndex(element => element == socket.ssid) != -1) if (send_telly_to_ssid) { - romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + romtype = session_data.get("wtv-client-rom-type"); } } else { - romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + romtype = session_data.get("wtv-client-rom-type"); } var file_path = null; switch (romtype) { @@ -77,22 +77,23 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { case "US-WEBSTAR-disk-0MB-16MB-softmodem-CPU5230": prereg_contype = "text/tellyscript"; // if wtv-open-access: true then client expects OpenISP - if (ssid_sessions[socket.ssid].get("wtv-open-access")) file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OpenISP_56k.tok"; - else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok"; + if (session_data.get("wtv-open-access")) file_path = __dirname + "/" + + + "/wtv-1800/tellyscripts/LC2/LC2_OpenISP_56k.tok"; + else var file_path = ServiceDeps + "/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.tok"; break; case "US-DTV-disk-0MB-32MB-softmodem-CPU5230": - if (wtvshared.isMiniBrowser(ssid_sessions[socket.ssid])) { + if (wtvshared.isMiniBrowser(session_data)) { prereg_contype = "text/tellyscript"; - if (ssid_sessions[socket.ssid].get("wtv-open-access")) file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OpenISP_56k.tok"; - else file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_WTV_18006138199.tok"; + if (session_data.get("wtv-open-access")) file_path = ServiceDeps + "/wtv-1800/tellyscripts/LC2/LC2_OpenISP_56k.tok"; + else file_path = ServiceDeps + "/wtv-1800/tellyscripts/LC2/LC2_WTV_18006138199.tok"; } else { prereg_contype = "text/dialscript"; - if (ssid_sessions[socket.ssid].get("wtv-lan") == "true") { - file_path = __dirname + "/ServiceDeps/premade_tellyscripts/UTV/utv_hsd.tok"; + if (session_data.get("wtv-lan") == "true") { + file_path = ServiceDeps + "/wtv-1800/tellyscripts/UTV/utv_hsd.tok"; } else { // todo OpenISP telly - file_path = __dirname + "/ServiceDeps/premade_tellyscripts/UTV/utv_normal.tok"; + file_path = ServiceDeps + "/wtv-1800/tellyscripts/UTV/utv_normal.tok"; } } break; @@ -100,8 +101,8 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { case "bf0app": prereg_contype = "text/tellyscript"; // if wtv-open-access: true then client expects OpenISP - if (ssid_sessions[socket.ssid].get("wtv-open-access")) file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_OISP.tok"; - else file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; + if (session_data.get("wtv-open-access")) file_path = ServiceDeps + "/wtv-1800/tellyscripts/bf0app/bf0app_OISP.tok"; + else file_path = ServiceDeps + "/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; break; // the following are not yet zefie generated and may have an unknown username/password attached @@ -109,8 +110,8 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { case "JP-Fiji": prereg_contype = "text/tellyscript"; // if wtv-open-access: true then client expects OpenISP - if (ssid_sessions[socket.ssid].get("wtv-open-access")) var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/FIJI/dc_production_normal.tok"; - else var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/FIJI/dc_production_normal.tok"; + if (session_data.get("wtv-open-access")) var file_path = ServiceDeps + "/wtv-1800/tellyscripts/FIJI/dc_production_normal.tok"; + else var file_path = ServiceDeps + "/wtv-1800/tellyscripts/FIJI/dc_production_normal.tok"; break; default: @@ -120,7 +121,7 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { if (socket.ssid.substr(0, 8) == "MSTVSIMU") { prereg_contype = "text/dialscript"; - var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/UTV/utv_hsd.tok"; + var file_path = ServiceDeps + "/wtv-1800/tellyscripts/UTV/utv_hsd.tok"; } } @@ -129,9 +130,9 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode prereg_contype = "text/tellyscript"; - var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; + var file_path = ServiceDeps + "/wtv-1800/tellyscripts/bf0app/bf0app_WTV_18006138199.tok"; var bf0app_update = true; - ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + session_data.set("bf0app_update", bf0app_update); } if (request_headers["wtv-ticket"] && !request_headers.query.reconnect) { @@ -150,9 +151,10 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { headers = "200 OK\n" + headers += "minisrv-no-mail-count: true\n"; if (bf0app_update) headers += "minisrv-use-carriage-return: false\n"; headers += "Connection: Keep-Alive\n"; - headers += "wtv-initial-key: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + "\n"; + headers += "wtv-initial-key: " + session_data.data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + "\n"; headers += "Content-Type: " + prereg_contype + "\n"; if (!request_headers.query.reconnect) headers += "wtv-service: reset\n"; if (!bf0app_update) headers += getServiceString('wtv-1800') + "\n"; @@ -162,8 +164,8 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { if (bf0app_update) headers += getServiceString('wtv-star', { "no_star_word": true }) + "\n"; else headers += getServiceString('wtv-star') + "\n"; - if (request_headers.query.reconnect && !ssid_sessions[socket.ssid].getSessionData("registered")) headers += getServiceString('wtv-register') + "\n"; - headers += getServiceString('wtv-flashrom') + "\n"; + if (request_headers.query.reconnect && !session_data.getSessionData("registered") && !session_data.lockdown) headers += getServiceString('wtv-register') + "\n"; + if (!session_data.lockdown) headers += getServiceString('wtv-flashrom') + "\n"; if (bf0app_update) headers += "wtv-boot-url: " + gourl + "\n"; else { headers += "wtv-boot-url: wtv-head-waiter:/relogin?relogin=true"; @@ -171,7 +173,7 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { headers += "\n"; } if (gourl != null) headers += "wtv-visit: " + gourl + "\n"; - if (!bf0app_update && ssid_sessions[socket.ssid].get("wtv-open-access")) headers += "wtv-open-isp-disabled: false\n"; + if (!bf0app_update && session_data.get("wtv-open-access")) headers += "wtv-open-isp-disabled: false\n"; headers += "wtv-client-time-zone: GMT -0000\n"; headers += "wtv-client-time-dst-rule: GMT\n" headers += "wtv-client-date: " + strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + " GMT"; diff --git a/zefie_wtvp_minisrv/ServiceDeps/TOS.html b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js similarity index 91% rename from zefie_wtvp_minisrv/ServiceDeps/TOS.html rename to zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js index 60aa8e72..32015ce9 100644 --- a/zefie_wtvp_minisrv/ServiceDeps/TOS.html +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js @@ -1,4 +1,10 @@ - +var minisrv_service_file = true; + +headers = `200 OK +Content-type: text/html +minisrv-no-mail-count: true`; + +data = ` Access Denied @@ -11,7 +17,7 @@ hspace=0 vspace=0 fontsize="large" <table cellspacing=0 cellpadding=0^C> <tr> <td width=104 height=74 valign=middle align=center bgcolor="3B3A4D"> -<img src="file://ROM/Cache/WebTVLogoJewel.gif" width=86 height=64> +<img src="${minisrv_config.config.service_logo}" width=86 height=64> <td width=20 valign=top align=left bgcolor="3B3A4D"> <img src="ROMCache/Spacer.gif" width=1 height=1> @@ -48,7 +54,7 @@ Access Denied <td width=104 valign=middle align=center> <td width=20 valign=middle align=center> <td colspan=9 width=100 height=258 valign=top align=left> -<font size=-1>You are not authorized to use this service. <p>Reason: ${REASON} </font> +<font size=-1>You are not authorized to use this service. <p>Reason: ${session_data.lockdownReason}</font> <tr> <td width=104 valign=middle align=center> <td width=20 valign=middle align=center> @@ -89,4 +95,4 @@ type=submit Value=Continue name="Continue" borderimage="file://ROM/Borders/Butto <td width=20 valign=middle align=center> </table> </body> -</html> \ No newline at end of file +</html>`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js new file mode 100644 index 00000000..19dfde37 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/admin.js @@ -0,0 +1,94 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + headers = "200 OK\r\nContent-Type: text/html"; + data = `<html> +<body> +<display nosave nosend> +<title>${minisrv_config.config.service_name} Admin Tricks + + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + + + + + + + + + + + + + + + +
      +
      Standard Tricks + +Account Lookup +
      +
      Ban an SSID + +Delete an Account +
      +
      Unban an SSID + +Delete User from Account +
      +
      Whitelist an SSID + +Remove Pass from User +
      +
      Grant Admin to SSID + +Modify Admin for SSID +
      +
      Polyzoot a User + +Reload Config +
      +
      Restore Favs for User + + +
      +
      + + + + +
      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js new file mode 100644 index 00000000..00cf5837 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/ban.js @@ -0,0 +1,94 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.ssid) { + var ssid = request_headers.query.ssid.toLowerCase(); + if (ssid == socket.ssid) { + var nobanself = true; + } else { + var fake_config = wtvshared.getUserConfig(); + if (!fake_config.config) fake_config.config = {}; + if (!fake_config.config.ssid_block_list) fake_config.config.ssid_block_list = []; + var entry_exists = false; + Object.keys(fake_config.config.ssid_block_list).forEach(function (k) { + if (fake_config.config.ssid_block_list[k] == ssid) { + entry_exists = true; + } + }); + if (!entry_exists) { + fake_config.config.ssid_block_list.push(ssid); + wtvshared.writeToUserConfig(fake_config); + reloadConfig(); + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/ban`; + if (ssid) { + headers += "\nwtv-noback-all: wtv-admin:/ban"; + } + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Ban an SSID

      +
      + + +


      ` + if (request_headers.query.ssid) { + if (nobanself) { + data += "Cannot ban yourself." + } else { + if (entry_exists) { + data += "SSID " + request_headers.query.ssid + " is already in the ban list.

      "; + } else { + data += "SSID " + request_headers.query.ssid + " added to the ban list.

      "; + } + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js new file mode 100644 index 00000000..2a8b5682 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteaccount.js @@ -0,0 +1,112 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.ssid) { + var ssid_match = false; + var ssid = request_headers.query.ssid.toLowerCase(); + var user_info = wtva.getAccountInfoBySSID(ssid); + if (request_headers.query.confirm_delete) { + user_info = null; + if (ssid == socket.ssid) { + ssid_match = true; + } else { + // delete + var userAccount = wtva.getAccountBySSID(ssid); + userAccount.unregisterBox(); + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/deleteaccount +wtv-noback-all: wtv-admin:/deleteaccount`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Delete an Account

      +
      +   +


      ` + if (ssid) { + if (user_info) { + data += ` +User Information: + + +`; + if (user_info.account_users) { + data += ``; + if (Object.keys(user_info.account_users).length > 1) { + data += `` + } + } + data += ` + + + +` + data += `
      Username:${user_info.username} (User ID: ${user_info.user_id})
      SSID:${user_info.ssid}
      Primary User:${user_info.account_users['subscriber'].subscriber_username}
      Additional Users:`; + Object.keys(user_info.account_users).forEach(function (k) { + if (k == "subscriber") return; + data += user_info.account_users[k].subscriber_username + "
      "; + }) + data += `
      +
      + + + +
      +
      `; + } else if (request_headers.query.confirm_delete && ssid_match) { + data += `Cannot delete yourself in this manner.
      Try ${minisrv_config.config.service_name} Tricks Unregister.


      `; + } else if (request_headers.query.confirm_delete) { + data += "Account for SSID \"" + ssid + "\" has been deleted.

      "; + } else { + data += "Could not find an account for SSID \"" + ssid + "\"

      "; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js new file mode 100644 index 00000000..5d96215f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/deleteuser.js @@ -0,0 +1,118 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var show_cannot_modify_self = false; + var show_cannot_remove_primary = false; + var show_box_was_unregistered = false; + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (user_info) { + if (user_info.ssid == socket.ssid) { + show_cannot_modify_self = true; + } + if (request_headers.query.confirm_delete) { + if (!show_cannot_modify_self) { + // delete + var userAccount = wtva.getAccountBySSID(user_info.ssid); + userAccount.switchUserID(0, false, false); + var userCount = Object.keys(user_info.account_users).length; + if (user_info.user_id === 0) { + show_cannot_remove_primary = true; + } else { + var result = userAccount.removeUser(user_info.user_id); + } + } + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/deleteuser +wtv-noback-all: wtv-admin:/deleteuser`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Delete a user from an account

      +
      +   +


      ` + if (request_headers.query.username) { + if (user_info && !request_headers.query.confirm_delete) { + data += ` +User Information: + + +`; + if (user_info.account_users) { + data += ``; + } + data += ` + + + +` + data += `
      Username:${user_info.username} (User ID: ${user_info.user_id})
      SSID:${user_info.ssid}
      Primary User:${user_info.account_users['subscriber'].subscriber_username}
      +
      + + + +
      +
      `; + } else if (request_headers.query.confirm_delete && show_cannot_modify_self) { + data += `Cannot modify your account in this manner.
      Try wtv-setup.


      `; + } else if (request_headers.query.confirm_delete && show_cannot_remove_primary) { + data += `Cannot delete a primary user in this manner.
      Try deleting the account.

      `; + } else if (request_headers.query.confirm_delete && show_box_was_unregistered) { + data += `Account for "${user_info.username}" was deleted, and SSID ${user_info.ssid} unregistered, as it was the only user.

      `; + } else if (request_headers.query.confirm_delete) { + if (result) data += `User "${user_info.username}" has been deleted from account belonging to SSID ${user_info.ssid}.

      `; + else data += `Could not delete "${user_info.username}" from SSID ${user_info.ssid}.

      `; + } else { + data += "Could not find an account for user \"" + request_headers.query.username + "\"

      "; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js new file mode 100644 index 00000000..96d63cac --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/findaccount.js @@ -0,0 +1,100 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (!user_info) user_info = wtva.getAccountInfoBySSID(request_headers.query.username.toLowerCase()); // ssid search + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/findaccount +wtv-noback-all: wtv-admin:/findaccount`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Account Lookup

      +
      +   +


      ` + if (request_headers.query.username) { + if (user_info) { + data += ` +User Information: + + +`; + if (user_info.account_users) { + data += ``; + if (Object.keys(user_info.account_users).length > 1) { + data += `` + } + } + data += ` + + + +` + data += `
      Username:${user_info.username} (User ID: ${user_info.user_id})
      SSID:${user_info.ssid}
      Primary User:${user_info.account_users['subscriber'].subscriber_username}
      Additional Users:`; + Object.keys(user_info.account_users).forEach(function (k) { + if (k == "subscriber") return; + data += user_info.account_users[k].subscriber_username + "
      "; + }) + data += `
      `; + if (wtva.isBanned(user_info.ssid)) { + data += `Unban SSID`; + data += " ".repeat(28); + } else { + data += `Ban SSID`; + data += " ".repeat(32); + } +data += `Delete Account +
      `; + } else { + data += "Could not find user \"" + request_headers.query.username + "\"

      "; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke.gif new file mode 100644 index 00000000..f1928032 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke_inverted.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke_inverted.gif new file mode 100644 index 00000000..a52ecdf2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/nuke_inverted.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/polyzoot.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/polyzoot.jpg new file mode 100644 index 00000000..881753d7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/images/polyzoot.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js new file mode 100644 index 00000000..5ce97658 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/polyzoot.js @@ -0,0 +1,133 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (user_info) { + var userAccount = wtva.getAccountBySSID(user_info.ssid); + userAccount.switchUserID(user_info.user_id, false, false); + if (request_headers.query.confirm) { + var polyzooot = 1407; + var WTVBGMusic = require(classPath + "/WTVBGMusic.js"); + var wtvbgm = new WTVBGMusic(minisrv_config, userAccount); + var bgmcat = wtvbgm.getSongCategory(polyzooot); + var music_obj = wtvbgm.getMusicObj(); + music_obj.enableCategories = [bgmcat]; + music_obj.enableSongs = [polyzooot]; + music_obj = Object.assign({}, music_obj) + userAccount.setSessionData("wtv-bgmusic", music_obj); + var settings_obj = userAccount.getSessionData("wtv-setup"); + if (settings_obj === null) settings_obj = {}; + settings_obj['setup-play-bgm'] = 1; + userAccount.setSessionData("wtv-setup", Object.assign({}, settings_obj)); + userAccount.saveSessionData(); + } + if (request_headers.query.reset) { + var WTVBGMusic = require(classPath + "/WTVBGMusic.js"); + userAccount.deleteSessionData("wtv-bgmusic") + var wtvbgm = new WTVBGMusic(minisrv_config, userAccount); + var music_obj = wtvbgm.getMusicObj(true); + var settings_obj = userAccount.getSessionData("wtv-setup"); + if (settings_obj === null) settings_obj = {}; + settings_obj['setup-play-bgm'] = 0; + userAccount.setSessionData("wtv-setup", Object.assign({}, settings_obj)); + userAccount.saveSessionData(); + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/polyzoot +wtv-noback-all: wtv-admin:/polyzoot`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + + + + +` + data += `
      +

      Polyzoot a User

      `; + + if (!request_headers.query.username) { + data += `"Polyzooting" a user will replace their Background Music with only Polyzoot, +and turn on BGM if they have it disabled. This will not work on Old Classic clients. +Also, the only way to undo a "Polyzooting" is to reset the user's music selection to default.

      ` + } + +data += ` +
      +   +


      ` + if (request_headers.query.username) { + if (user_info && !request_headers.query.confirm && !request_headers.query.reset) { + if (user_info.username == session_data.getSessionData("subscriber_username")) { + data += `Are you sure you want to Polyzoot yourself?
      Are you a masochist?`; + } else { + data += `Are you sure you want to Polyzoot ${user_info.username}?
      Are you a sadist?`; + } + data += ` +

      +
      +
      + + + +
      + + + + + +
      `; + } else if (request_headers.query.confirm) { + data += `You have condemned ${user_info.username}
      to endless loops of Polyzoot.

      It will take effect upon their next login.

      `; + } else if (request_headers.query.reset) { + data += `You have freed ${user_info.username}'s soul
      from the bounds of Polyzoot.

      It will take effect upon their next login.

      `; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js new file mode 100644 index 00000000..50446a1b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/regenfavs.js @@ -0,0 +1,98 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (user_info) { + var userAccount = wtva.getAccountBySSID(user_info.ssid); + userAccount.switchUserID(user_info.user_id, false, false); + if (request_headers.query.folder) { + if (userAccount.favstore.favstoreExists()) { + if (userAccount.favstore.folderExists(request_headers.query.folder)) { + userAccount.favstore.deleteFolder(request_headers.query.folder); + } + userAccount.favstore.createTemplateFolder(request_headers.query.folder); + } + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/regenfavs +wtv-noback-all: wtv-admin:/regenfavs`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + + +` + data += `
      +

      Restore a default favorites folder for a User

      +
      +   +


      ` + if (request_headers.query.username) { + if (user_info && !request_headers.query.folder) { + if (userAccount.favstore.favstoreExists()) { + data += `
      + + +
      +
      `; + } else { + data += `${user_info.username} has not initialized their favorites.

      `; + } + } else { + data += `Successfully regenerated folder ${request_headers.query.folder} for user "${user_info.username}"

      `; + } + } + data += ` +
      +
      + + +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js new file mode 100644 index 00000000..f9b02c6f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/reloadconfig.js @@ -0,0 +1,56 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + reloadConfig(); + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/reloadconfig +wtv-noback-all: wtv-admin:/reloadconfig`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Reload Config

      +The config.json and user_config.json files has been reloaded.
      +If you added a new service, it will not bind without a restart. +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js new file mode 100644 index 00000000..81db23e9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/removeuserpasswd.js @@ -0,0 +1,109 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.username) { + var show_cannot_modify_self = false; + var show_user_has_no_password = false; + var user_info = wtva.getAccountInfo(request_headers.query.username.toLowerCase()); // username search + if (user_info) { + if (user_info.ssid == socket.ssid) { + show_cannot_modify_self = true; + } + var userAccount = wtva.getAccountBySSID(user_info.ssid); + userAccount.switchUserID(user_info.user_id, false, false); + if (!userAccount.getUserPasswordEnabled()) { + show_user_has_no_password = true; + } + if (request_headers.query.confirm_remove) { + if (!show_cannot_modify_self && !show_user_has_no_password) { + userAccount.disableUserPassword(); + } + } + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/removeuserpasswd +wtv-noback-all: wtv-admin:/removeuserpasswd`; + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Remove Password from a User Account

      +
      +   +


      ` + if (request_headers.query.username) { + if (user_info && !request_headers.query.confirm_remove && !show_user_has_no_password && !show_cannot_modify_self) { + data += ` +User Information: + + +`; + if (user_info.account_users) { + data += ``; + } + data += ` + + + +` + data += `
      Username:${user_info.username} (User ID: ${user_info.user_id})
      SSID:${user_info.ssid}
      Primary User:${user_info.account_users['subscriber'].subscriber_username}
      +
      + + + +
      +
      `; + } else if (show_cannot_modify_self) { + data += `Cannot modify your account in this manner.
      Try wtv-setup.


      `; + } else if (show_user_has_no_password) { + data += `${user_info.username} has no password,
      so there nothing to do.

      `; + } else { + data += `Password removed from account "${user_info.username}"

      `; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js new file mode 100644 index 00000000..e9e7442b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-admin/unban.js @@ -0,0 +1,108 @@ +var minisrv_service_file = true; + +var WTVAdmin = require(classPath + "/WTVAdmin.js"); +var wtva = new WTVAdmin(minisrv_config, session_data, service_name); +var auth = wtva.isAuthorized(); +var ssids_removed = []; +if (auth === true) { + var password = null; + if (request_headers.Authorization) { + var authheader = request_headers.Authorization.split(' '); + if (authheader[0] == "Basic") { + password = Buffer.from(authheader[1], 'base64').toString(); + if (password) password = password.split(':')[1]; + } + } + if (wtva.checkPassword(password)) { + if (request_headers.query.unban_ssid) { + var config_changed = false; + var fake_config = wtvshared.getUserConfig(); + if (!fake_config.config) fake_config.config = {}; + if (!fake_config.config.ssid_block_list) fake_config.config.ssid_block_list = []; + if (typeof request_headers.query.unban_ssid === 'string') { + Object.keys(fake_config.config.ssid_block_list).forEach(function (k) { + if (fake_config.config.ssid_block_list[k] == request_headers.query.unban_ssid) { + fake_config.config.ssid_block_list.splice(k, 1); + ssids_removed.push(request_headers.query.unban_ssid) + config_changed = true; + } + }); + } else { + Object.keys(fake_config.config.ssid_block_list).forEach(function (k) { + Object.keys(request_headers.query.unban_ssid).forEach(function (j) { + if (fake_config.config.ssid_block_list[k] == request_headers.query.unban_ssid[j]) { + fake_config.config.ssid_block_list.splice(k,1); + ssids_removed.push(request_headers.query.unban_ssid[j]) + config_changed = true; + } + }); + }); + } + if (config_changed) { + wtvshared.writeToUserConfig(fake_config); + minisrv_config = reloadConfig(); + } + } + headers = `200 OK +Content-Type: text/html +wtv-expire-all: wtv-admin:/unban`; + if (request_headers.query.unban_ssid) { + headers += "\nwtv-noback-all: wtv-admin:/unban"; + } + data = ` + + +${minisrv_config.config.service_name} Admin Tricks + + + + +
      +
      +

      ${minisrv_config.config.service_name} Admin Tricks

      +
      + + + +
      +

      Unban an SSID

      `; + if (minisrv_config.config.ssid_block_list) { + if (minisrv_config.config.ssid_block_list.length > 0) { + data += '
      '; + data += '
      '; + } else { + data += "No SSIDs are in the ban list.

      "; + } + } else { + data += "No SSIDs are in the ban list.

      "; + } + if (ssids_removed.length > 0) { + if (config_changed) { + data += "SSID(s) " + ssids_removed + " removed from the ban list.

      "; + } + } + data += ` +
      +
      +
      +

      +Go Back +

      + + +`; + } else { + var errpage = wtvshared.doErrorPage(401, "Please enter the administration password, you can leave the username blank."); + headers = errpage[0]; + data = errpage[1]; + } +} else { + var errpage = wtvshared.doErrorPage(403, auth); + headers = errpage[0]; + data = errpage[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-chat/MakeChatPage.js b/zefie_wtvp_minisrv/ServiceVault/wtv-chat/MakeChatPage.js index bdecc0d2..d1c6921f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-chat/MakeChatPage.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-chat/MakeChatPage.js @@ -1,7 +1,7 @@ var minisrv_service_file = true; headers = "200 OK"; -if (request_headers.query.nick) headers += "\n" + ssid_sessions[socket.ssid].setIRCNick(request_headers.query.nick); +if (request_headers.query.nick) headers += "\n" + session_data.setIRCNick(request_headers.query.nick); headers += "\nContent-Type: text/html"; if (request_headers.query.host && request_headers.query.port && request_headers.query.channel) { diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-chat/home.js b/zefie_wtvp_minisrv/ServiceVault/wtv-chat/home.js index bc8e4ca3..542f211e 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-chat/home.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-chat/home.js @@ -2,11 +2,11 @@ var minisrv_service_file = true; var irc_nick = ""; headers = "200 OK"; -if (request_headers.query.nick) headers += "\n" + ssid_sessions[socket.ssid].setIRCNick(request_headers.query.nick); -else if (!ssid_sessions[socket.ssid].getSessionData("subscriber_irc_nick")) ssid_sessions[socket.ssid].getSessionData("subscriber_username") || ssid_sessions[socket.ssid].setIRCNick(minisrv_config.config.service_name + '_' + Math.floor(Math.random() * 100000)).substring(0, 16); +if (request_headers.query.nick) headers += "\n" + session_data.setIRCNick(request_headers.query.nick); +else if (!session_data.getSessionData("subscriber_irc_nick")) session_data.getSessionData("subscriber_username") || session_data.setIRCNick(minisrv_config.config.service_name + '_' + Math.floor(Math.random() * 100000)).substring(0, 16); headers += "\nContent-Type: text/html"; -var irc_nick = ssid_sessions[socket.ssid].getSessionData("subscriber_irc_nick") || ssid_sessions[socket.ssid].getSessionData("subscriber_username"); +var irc_nick = session_data.getSessionData("subscriber_irc_nick") || session_data.getSessionData("subscriber_username"); data = ` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/add.js b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/add.js index 2c9df7f8..e6d9ba45 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/add.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/add.js @@ -2,8 +2,8 @@ var minisrv_service_file = true; if (socket.ssid) { if (request_headers.post_data) { - if (ssid_sessions[socket.ssid]) { - ssid_sessions[socket.ssid].addCookie(request_headers.query.domain,request_headers.query.path,request_headers.query.expires,request_headers.query.cookie); + if (session_data) { + session_data.addCookie(request_headers.query.domain,request_headers.query.path,request_headers.query.expires,request_headers.query.cookie); headers = "200 OK\n"; headers += "Content-Type: text/html"; } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/get.js b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/get.js index 9ab5d993..dad24ebb 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/get.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/get.js @@ -3,8 +3,8 @@ var minisrv_service_file = true; if (request_headers.post_data) { if (request_headers.query.domain && request_headers.query.path) { if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { - data = ssid_sessions[socket.ssid].getCookieString(request_headers.query.domain, request_headers.query.path); + if (session_data) { + data = session_data.getCookieString(request_headers.query.domain, request_headers.query.path); headers = "200 OK\n"; headers += "Content-Type: text/plain"; } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/list.js b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/list.js index 7c2141bb..351216a6 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/list.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/list.js @@ -1,9 +1,9 @@ var minisrv_service_file = true; if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { + if (session_data) { - data = ssid_sessions[socket.ssid].listCookies(); + data = session_data.listCookies(); headers = "200 OK\n"; headers += "Content-Type: text/plain"; } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/reset.js b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/reset.js index c0d6fd0d..e82a7cdc 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/reset.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-cookie/reset.js @@ -1,8 +1,8 @@ var minisrv_service_file = true; if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { - ssid_sessions[socket.ssid].resetCookies(); + if (session_data) { + session_data.resetCookies(); headers = "200 OK\n"; headers += "Content-Type: text/html"; data = ` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Compressed1.1/Patches.hsb b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Compressed1.1/Patches.hsb new file mode 100644 index 00000000..909c89f9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Compressed1.1/Patches.hsb differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Uncompressed1.1/Patches.hsb b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Uncompressed1.1/Patches.hsb new file mode 100644 index 00000000..baacf700 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/Instruments/Uncompressed1.1/Patches.hsb differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/backwaters.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/backwaters.rmf new file mode 100644 index 00000000..23c27cda Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/backwaters.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium-w-samples.rmf new file mode 100644 index 00000000..97c3e8b0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium.rmf new file mode 100644 index 00000000..60e7e902 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/byzantium.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave-w-samples.rmf new file mode 100644 index 00000000..8fdf89ef Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave.rmf new file mode 100644 index 00000000..c84b2cb3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cave.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/chunnel.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/chunnel.rmf new file mode 100644 index 00000000..78a7601e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/chunnel.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cozy.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cozy.rmf new file mode 100644 index 00000000..a81dd717 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/cozy.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/index.html new file mode 100644 index 00000000..d201a1b5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/index.html @@ -0,0 +1,115 @@ + + + + +Ambient Music + + + + + + + + +
      + + + + + +
      + + Ambient Music +
      +
      +
      + +
      + +Backwaters
      +Ambient Music
      +
      +Byzantium Samples
      +Ambient Music
      +
      +Byzantium
      +Ambient Music
      +
      +Cave Samples
      +Ambient Music
      +
      +Cave
      +Ambient Music
      +
      +Chunnel
      +Ambient Music
      +
      +Cozy
      +Ambient Music
      +
      +Moodrider Samples
      +Ambient Music
      + +
      + + +Moodrider
      +Ambient Music
      +
      +Naugal
      +Ambient Music
      +
      +Overmind Samples
      +Ambient Music
      +
      +Overmind
      +Ambient Music
      +
      +Pacifica Samples
      +Ambient Music
      +
      +Pacifica
      +Ambient Music
      +
      +Personal Twilight
      +Ambient Music
      +
      +Precipice
      +Ambient Music
      + +
      + + +Shibuya
      +Ambient Music
      +
      +Travelling Samples
      +Ambient Music
      +
      +Travelling
      +Ambient Music
      +
      +Undersea Samples
      +Ambient Music
      +
      +Undersea
      +Ambient Music
      +
      +Waiting Game
      +Ambient Music
      +
      +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider-w-samples.rmf new file mode 100644 index 00000000..a33d3cab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider.rmf new file mode 100644 index 00000000..e15cd3bc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/moodrider.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/naugal.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/naugal.rmf new file mode 100644 index 00000000..edb63a39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/naugal.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind-w-samples.rmf new file mode 100644 index 00000000..49313e0f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind.rmf new file mode 100644 index 00000000..7d8aa79e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/overmind.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica-w-samples.rmf new file mode 100644 index 00000000..e8e2656e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica.rmf new file mode 100644 index 00000000..43045e9a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/pacifica.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/personal-twilight.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/personal-twilight.rmf new file mode 100644 index 00000000..5efd3e2d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/personal-twilight.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/precipice.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/precipice.rmf new file mode 100644 index 00000000..9bc0ce60 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/precipice.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/shibuya-ku.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/shibuya-ku.rmf new file mode 100644 index 00000000..bee4f4ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/shibuya-ku.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling-w-samples.rmf new file mode 100644 index 00000000..23971a62 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling.rmf new file mode 100644 index 00000000..49c1a680 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/travelling.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea-w-samples.rmf new file mode 100644 index 00000000..41c33ef7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea.rmf new file mode 100644 index 00000000..43ff283f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/undersea.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/waitinggame.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/waitinggame.rmf new file mode 100644 index 00000000..b6b16bac Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/ambient/waitinggame.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/7th-storey-traffic.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/7th-storey-traffic.rmf new file mode 100644 index 00000000..4351c905 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/7th-storey-traffic.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/busy-bar.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/busy-bar.rmf new file mode 100644 index 00000000..263a7de4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/busy-bar.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/forest-birds.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/forest-birds.rmf new file mode 100644 index 00000000..ec288ca5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/forest-birds.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/index.html new file mode 100644 index 00000000..17376a13 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/index.html @@ -0,0 +1,134 @@ + + +Atmospheric Music + + + + + + + + +
      + + + + + +
      + + Atmospheric Music +
      +
      +
      + +
      + +7th-storey-traffic.rmf
      +Atmospheric Music
      +
      +busy-bar.rmf
      +Atmospheric Music
      +
      +forest-birds.rmf
      +Atmospheric Music
      +
      +komputordome.rmf
      +Atmospheric Music
      +
      +lush-lagoon-big.rmf
      +Atmospheric Music
      +
      +lush-lagoon.rmf
      +Atmospheric Music
      +
      +modern-office.rmf
      +Atmospheric Music
      +
      +money.rmf
      +Atmospheric Music
      +
      +mystical-cave-big.rmf
      +Atmospheric Music
      +
      +mystical-cave.rmf
      +Ambient Music
      +
      + +
      + + +netherworld.rmf
      +Ambient Music
      +
      +night-factory-big.rmf
      +Ambient Music
      +
      +night-factory.rmf
      +Ambient Music
      +
      +night-forest-alt1.rmf
      +Ambient Music
      +
      +night-forest-alt2.rmf
      +Ambient Music
      +
      +night-forest-alt3.rmf
      +Ambient Music
      +
      +night-forest.rmf
      +Ambient Music
      +
      +rainforest-alt1.rmf
      +Ambient Music
      +
      + +
      + + +rainforest-alt2.rmf
      +Ambient Music
      +
      +rainforest.rmf
      +Ambient Music
      +
      +spacecraft.rmf
      +Ambient Music
      +
      +sports-alt.rmf
      +Ambient Music
      +
      +sports.rmf
      +Ambient Music
      +
      +tarmac.rmf
      +Ambient Music
      +
      +thunderstorm.rmf
      +Ambient Music
      +
      +war-zone.rmf
      +Ambient Music
      +
      +wind.rmf
      +Ambient Music
      +
      +windchimes.rmf
      +Ambient Music
      +
      + +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/komputordome.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/komputordome.rmf new file mode 100644 index 00000000..74532d70 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/komputordome.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon-big.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon-big.rmf new file mode 100644 index 00000000..550aa21f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon-big.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon.rmf new file mode 100644 index 00000000..69b79ab8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/lush-lagoon.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/modern-office.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/modern-office.rmf new file mode 100644 index 00000000..bb701a07 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/modern-office.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/money.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/money.rmf new file mode 100644 index 00000000..e352c4dc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/money.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave-big.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave-big.rmf new file mode 100644 index 00000000..2550e593 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave-big.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave.rmf new file mode 100644 index 00000000..1eab58ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/mystical-cave.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/netherworld.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/netherworld.rmf new file mode 100644 index 00000000..1413758e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/netherworld.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory-big.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory-big.rmf new file mode 100644 index 00000000..a40423f6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory-big.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory.rmf new file mode 100644 index 00000000..8faccc65 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-factory.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt1.rmf new file mode 100644 index 00000000..fd4d1cfb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt2.rmf new file mode 100644 index 00000000..81ec2a0d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt3.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt3.rmf new file mode 100644 index 00000000..5462df17 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest-alt3.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest.rmf new file mode 100644 index 00000000..4d172b55 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/night-forest.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt1.rmf new file mode 100644 index 00000000..348e756c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt2.rmf new file mode 100644 index 00000000..ef97365a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest-alt2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest.rmf new file mode 100644 index 00000000..6f54c416 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/rainforest.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/spacecraft.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/spacecraft.rmf new file mode 100644 index 00000000..8da25f45 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/spacecraft.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports-alt.rmf new file mode 100644 index 00000000..c3631dcb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports.rmf new file mode 100644 index 00000000..c89ceb8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/sports.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/tarmac.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/tarmac.rmf new file mode 100644 index 00000000..b582e9a7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/tarmac.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/thunderstorm.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/thunderstorm.rmf new file mode 100644 index 00000000..c5b32e18 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/thunderstorm.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/war-zone.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/war-zone.rmf new file mode 100644 index 00000000..005f204a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/war-zone.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/wind.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/wind.rmf new file mode 100644 index 00000000..946cd1f4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/wind.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/windchimes.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/windchimes.rmf new file mode 100644 index 00000000..308bbaac Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/atmospheres/windchimes.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-air.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-air.rmf new file mode 100644 index 00000000..25334ce2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-air.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-prelude-1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-prelude-1.rmf new file mode 100644 index 00000000..9df21f16 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/bach-prelude-1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/brahms-rhapsody.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/brahms-rhapsody.rmf new file mode 100644 index 00000000..a0308523 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/brahms-rhapsody.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-1.rmf new file mode 100644 index 00000000..82371144 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-2.rmf new file mode 100644 index 00000000..0581cd64 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-ballade-2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-nocturne.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-nocturne.rmf new file mode 100644 index 00000000..cd2fe5ce Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/chopin-nocturne.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/index.html new file mode 100644 index 00000000..fc830c27 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/index.html @@ -0,0 +1,107 @@ + + + + +Classical Music + + + + + + + + +
      + + + + + +
      + + Classical Music +
      +
      +
      + +
      + +bach-air
      +Classical Music
      +
      +bach-prelude-1
      +Classical Music
      +
      +brahms-rhapsody
      +Classical Music
      +
      +chopin-ballade-1
      +Classical Music
      +
      +chopin-ballade-2
      +Classical Music
      +
      +chopin-nocturne
      +Classical Music
      +
      + +
      + + +la-barriera-w-samples
      +Classical Music
      +
      +lvb-moonlight
      +Classical Music
      +
      +lvb-ode-to-joy
      +Classical Music
      +
      +lvb-scherzo9th
      +Classical Music
      +
      +mendelssohn-prelude
      +Classical Music
      +
      +mm-promenade
      +Classical Music
      +
      + +
      + + +mouret-rondeau
      +Classical Music
      +
      +mozart-symphony40
      +Classical Music
      +
      +nrk-bumblebee
      +Classical Music
      +
      +purcell-voluntary
      +Classical Music
      +
      +schubert-ave-maria
      +Classical Music
      +
      +smetana-moldau
      +Classical Music
      +
      + + +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/la-barriera-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/la-barriera-w-samples.rmf new file mode 100644 index 00000000..cd353ab2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/la-barriera-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-moonlight.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-moonlight.rmf new file mode 100644 index 00000000..d5bcaafb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-moonlight.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-ode-to-joy.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-ode-to-joy.rmf new file mode 100644 index 00000000..822e0905 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-ode-to-joy.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-scherzo9th.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-scherzo9th.rmf new file mode 100644 index 00000000..331ca052 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/lvb-scherzo9th.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mendelssohn-prelude.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mendelssohn-prelude.rmf new file mode 100644 index 00000000..a2dbf4b8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mendelssohn-prelude.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mm-promenade.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mm-promenade.rmf new file mode 100644 index 00000000..6d470a8c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mm-promenade.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mouret-rondeau.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mouret-rondeau.rmf new file mode 100644 index 00000000..fb136d28 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mouret-rondeau.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mozart-symphony40.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mozart-symphony40.rmf new file mode 100644 index 00000000..33dfafdc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/mozart-symphony40.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/nrk-bumblebee.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/nrk-bumblebee.rmf new file mode 100644 index 00000000..dacfa226 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/nrk-bumblebee.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/purcell-voluntary.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/purcell-voluntary.rmf new file mode 100644 index 00000000..1dbaf8f7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/purcell-voluntary.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/schubert-ave-maria.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/schubert-ave-maria.rmf new file mode 100644 index 00000000..59e767ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/schubert-ave-maria.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/smetana-moldau.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/smetana-moldau.rmf new file mode 100644 index 00000000..636d6593 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/classical/smetana-moldau.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/index.html new file mode 100644 index 00000000..de16b4c9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/index.html @@ -0,0 +1,115 @@ + + + + +RMF Music + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + + +
      + + + +
      + +RMF Music +
      +
      +
      + + +This is the Rich Music, MOD and MIDI set from Headspace, designed for WebTV Plus. +
      + +Ambient
      +Ambient Music
      +
      +Atmospheres
      +Atmospheric Music
      +
      +Classical
      +Classical Music
      +
      +Mellow
      +Mellow Music
      +
      + +
      + + +Moods
      +Moody Music
      +
      +Sonic Icons
      +Iconoclastic Music
      +
      +Underground
      +Underground Music
      +
      +Upbeat
      +Upbeat Music
      + +
      + +
      + + +
      + +
      + + +
      + +
      + +Choose Done when you are ready to go back. + +
      + + +
      +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish01.rmf new file mode 100644 index 00000000..ea137c10 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish02.rmf new file mode 100644 index 00000000..7fda8845 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-full.rmf new file mode 100644 index 00000000..3476fc66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-short.rmf new file mode 100644 index 00000000..bb07a26c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/aqua-sky-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full-alt.rmf new file mode 100644 index 00000000..d5872067 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full.rmf new file mode 100644 index 00000000..d1b755d0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-w-samples.rmf new file mode 100644 index 00000000..8f37e3dd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/badinerie-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish01.rmf new file mode 100644 index 00000000..48b303bc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish02.rmf new file mode 100644 index 00000000..ac531b48 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish03.rmf new file mode 100644 index 00000000..752a7820 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-full.rmf new file mode 100644 index 00000000..a422c56a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-groove.rmf new file mode 100644 index 00000000..e8fa07f0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-short.rmf new file mode 100644 index 00000000..d10000a7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/camelworld-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish01.rmf new file mode 100644 index 00000000..0d45ea19 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish02.rmf new file mode 100644 index 00000000..5c7e25e7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish03.rmf new file mode 100644 index 00000000..746b3427 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish04.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish04.rmf new file mode 100644 index 00000000..0b5f5173 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-flourish04.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-full.rmf new file mode 100644 index 00000000..cb61b0e3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-short.rmf new file mode 100644 index 00000000..3a6c7a28 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-w-samples.rmf new file mode 100644 index 00000000..d7bfb972 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/celestial-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish01.rmf new file mode 100644 index 00000000..ab65f4de Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish02.rmf new file mode 100644 index 00000000..6eb2bba8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-full.rmf new file mode 100644 index 00000000..6915ab91 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove01.rmf new file mode 100644 index 00000000..04cab2da Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove02.rmf new file mode 100644 index 00000000..9f4ee1f0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-groove02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-short.rmf new file mode 100644 index 00000000..6a65c98d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/chillin-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish01.rmf new file mode 100644 index 00000000..25e66bf5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish02.rmf new file mode 100644 index 00000000..b11cf9b5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish03.rmf new file mode 100644 index 00000000..10a7e33e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-full.rmf new file mode 100644 index 00000000..bfba4158 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-groove.rmf new file mode 100644 index 00000000..da7e95f0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-short.rmf new file mode 100644 index 00000000..479a6c32 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/garden-of-time-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish01.rmf new file mode 100644 index 00000000..42d55846 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish02.rmf new file mode 100644 index 00000000..a68cd3fc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish03.rmf new file mode 100644 index 00000000..4c7b2732 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-full.rmf new file mode 100644 index 00000000..f896fcfa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-groove.rmf new file mode 100644 index 00000000..9be829d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-short.rmf new file mode 100644 index 00000000..3a532a23 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/grinning-pound-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/index.html new file mode 100644 index 00000000..6694d07b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/index.html @@ -0,0 +1,222 @@ + + +Mellow Music + + + + + + + + +
      + + + + + +
      + + Mellow Music +
      +
      +
      + +
      + +aqua-sky-flourish01.rmf
      +Mellow Music
      +
      +aqua-sky-flourish02.rmf
      +Mellow Music
      +
      +aqua-sky-full.rmf
      +Mellow Music
      +
      +aqua-sky-short.rmf
      +Mellow Music
      +
      +badinerie-full-alt.rmf
      +Mellow Music
      +
      +badinerie-full.rmf
      +Mellow Music
      +
      +badinerie-w-samples.rmf
      +Mellow Music
      +
      +camelworld-flourish01.rmf
      +Mellow Music
      +
      +camelworld-flourish02.rmf
      +Mellow Music
      +
      +camelworld-flourish03.rmf
      +Mellow Music
      +
      +camelworld-full.rmf
      +Mellow Music
      +
      +camelworld-groove.rmf
      +Mellow Music
      +
      +camelworld-short.rmf
      +Mellow Music
      +
      +celestial-flourish01.rmf
      +Mellow Music
      +
      +celestial-flourish02.rmf
      +Mellow Music
      +
      +celestial-flourish03.rmf
      +Mellow Music
      +
      +celestial-flourish04.rmf
      +Mellow Music
      +
      +celestial-full.rmf
      +Mellow Music
      +
      +celestial-short.rmf
      +Mellow Music
      +
      + +
      + + +celestial-w-samples.rmf
      +Mellow Music
      +
      +chillin-flourish01.rmf
      +Mellow Music
      +
      +chillin-flourish02.rmf
      +Mellow Music
      +
      +chillin-full.rmf
      +Mellow Music
      +
      +chillin-groove01.rmf
      +Mellow Music
      +
      +chillin-groove02.rmf
      +Mellow Music
      +
      +chillin-short.rmf
      +Mellow Music
      +
      +garden-of-time-flourish01.rmf
      +Mellow Music
      +
      +garden-of-time-flourish02.rmf
      +Mellow Music
      +
      +garden-of-time-flourish03.rmf
      +Mellow Music
      +
      +garden-of-time-full.rmf
      +Mellow Music
      +
      +garden-of-time-groove.rmf
      +Mellow Music
      +
      +garden-of-time-short.rmf
      +Mellow Music
      +
      +grinning-pound-flourish01.rmf
      +Mellow Music
      +
      +grinning-pound-flourish02.rmf
      +Mellow Music
      +
      +grinning-pound-flourish03.rmf
      +Mellow Music
      +
      +grinning-pound-full.rmf
      +Mellow Music
      +
      + + +
      + + +grinning-pound-groove.rmf
      +Mellow Music
      +
      +grinning-pound-short.rmf
      +Mellow Music
      +
      +pastorale-flourish01.rmf
      +Mellow Music
      +
      +pastorale-flourish02.rmf
      +Mellow Music
      +
      +pastorale-full-alt.rmf
      +Mellow Music
      +
      +pastorale-full.rmf
      +Mellow Music
      +
      +pastorale-short.rmf
      +Mellow Music
      +
      +pastorale-w-samples.rmf
      +Mellow Music
      +
      +smoothgroov-flourish01.rmf
      +Mellow Music
      +
      +smoothgroov-flourish02.rmf
      +Mellow Music
      +
      +smoothgroov-full.rmf
      +Mellow Music
      +
      +smoothgroov-groove01.rmf
      +Mellow Music
      +
      +smoothgroov-groove02.rmf
      +Mellow Music
      +
      +smoothgroov-short.rmf
      +Mellow Music
      +
      +sunlane-flourish01.rmf
      +Mellow Music
      +
      +sunlane-flourish02.rmf
      +Mellow Music
      +
      +sunlane-flourish03.rmf
      +Mellow Music
      +
      +sunlane-flourish04.rmf
      +Mellow Music
      +
      +sunlane-full.rmf
      +Mellow Music
      +
      +sunlane-short.rmf
      +Mellow Music
      +
      +sunlane-w-samples.rmf
      +Mellow Music
      +
      + +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish01.rmf new file mode 100644 index 00000000..4f600f59 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish02.rmf new file mode 100644 index 00000000..c9bcdf86 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full-alt.rmf new file mode 100644 index 00000000..b5026f58 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full.rmf new file mode 100644 index 00000000..177bf394 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-short.rmf new file mode 100644 index 00000000..79970f5b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-w-samples.rmf new file mode 100644 index 00000000..f997caac Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/pastorale-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish01.rmf new file mode 100644 index 00000000..d665243f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish02.rmf new file mode 100644 index 00000000..19e7bbbe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-full.rmf new file mode 100644 index 00000000..38faa103 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove01.rmf new file mode 100644 index 00000000..75317e1e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove02.rmf new file mode 100644 index 00000000..8733f166 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-groove02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-short.rmf new file mode 100644 index 00000000..5258ff9e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/smoothgroov-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish01.rmf new file mode 100644 index 00000000..f500b3ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish02.rmf new file mode 100644 index 00000000..7b87ff3d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish03.rmf new file mode 100644 index 00000000..3fb3a57d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish04.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish04.rmf new file mode 100644 index 00000000..917ab405 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-flourish04.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-full.rmf new file mode 100644 index 00000000..c17f4999 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-short.rmf new file mode 100644 index 00000000..767dc933 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-w-samples.rmf new file mode 100644 index 00000000..2b90c42d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/mellow/sunlane-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/affectionate.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/affectionate.rmf new file mode 100644 index 00000000..f5977944 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/affectionate.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anticipation.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anticipation.rmf new file mode 100644 index 00000000..623f6b89 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anticipation.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anxiety-attack.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anxiety-attack.rmf new file mode 100644 index 00000000..fce4e74c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/anxiety-attack.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/busybody.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/busybody.rmf new file mode 100644 index 00000000..553e8b78 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/busybody.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/contemplate.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/contemplate.rmf new file mode 100644 index 00000000..7becdb00 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/contemplate.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/creeping-fear.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/creeping-fear.rmf new file mode 100644 index 00000000..0e7d3617 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/creeping-fear.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/curious.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/curious.rmf new file mode 100644 index 00000000..59321eac Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/curious.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/grandeur.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/grandeur.rmf new file mode 100644 index 00000000..6ddd5a55 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/grandeur.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/happy-go-lucky.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/happy-go-lucky.rmf new file mode 100644 index 00000000..84835b20 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/happy-go-lucky.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/index.html new file mode 100644 index 00000000..3a8040d8 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/index.html @@ -0,0 +1,97 @@ + + +Moody Music + + + + + + + + +
      + + + + + +
      + + Moody Music +
      +
      +
      + +
      + +affectionate.rmf
      +Moody Music
      +
      +anticipation.rmf
      +Moody Music
      +
      +anxiety-attack.rmf
      +Moody Music
      +
      +busybody.rmf
      +Moody Music
      +
      +contemplate.rmf
      +Moody Music
      +
      + +
      + + +loungy-sixties.rmf
      +Moody Music
      +
      +mystical.rmf
      +Moody Music
      +
      +quietude.rmf
      +Moody Music
      +
      +reminisce.rmf
      +Moody Music
      +
      +sociable.rmf
      +Moody Music
      +
      + + +
      + + +creeping-fear.rmf
      +Moody Music
      +
      +curious.rmf
      +Moody Music
      +
      +grandeur.rmf
      +Moody Music
      +
      +happy-go-lucky.rmf
      +Moody Music
      +
      +intrigue.rmf
      +Moody Music
      +
      + + +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/intrigue.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/intrigue.rmf new file mode 100644 index 00000000..75aad2d3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/intrigue.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/loungy-sixties.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/loungy-sixties.rmf new file mode 100644 index 00000000..7388f3e8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/loungy-sixties.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/mystical.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/mystical.rmf new file mode 100644 index 00000000..0f7e31b8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/mystical.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/quietude.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/quietude.rmf new file mode 100644 index 00000000..3092c129 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/quietude.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/reminisce.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/reminisce.rmf new file mode 100644 index 00000000..690acf25 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/reminisce.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/sociable.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/sociable.rmf new file mode 100644 index 00000000..734c77af Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/moods/sociable.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/acid-sting.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/acid-sting.rmf new file mode 100644 index 00000000..5ab7c8d5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/acid-sting.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/alien-landscape.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/alien-landscape.rmf new file mode 100644 index 00000000..cb364e8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/alien-landscape.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/applauncher.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/applauncher.rmf new file mode 100644 index 00000000..a4600c37 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/applauncher.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/asteroid-belt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/asteroid-belt.rmf new file mode 100644 index 00000000..298f4b04 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/asteroid-belt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/astral-matrix.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/astral-matrix.rmf new file mode 100644 index 00000000..6c7ef221 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/astral-matrix.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/atomictea.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/atomictea.rmf new file mode 100644 index 00000000..2ad6bb62 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/atomictea.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bellweather.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bellweather.rmf new file mode 100644 index 00000000..8f1f8e39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bellweather.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/blue-blade.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/blue-blade.rmf new file mode 100644 index 00000000..ef74e8ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/blue-blade.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bubble-memory.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bubble-memory.rmf new file mode 100644 index 00000000..32eed0c1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/bubble-memory.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/buzz-by.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/buzz-by.rmf new file mode 100644 index 00000000..2923298a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/buzz-by.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cascaderup.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cascaderup.rmf new file mode 100644 index 00000000..18ab7580 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cascaderup.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/celloaccent.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/celloaccent.rmf new file mode 100644 index 00000000..171a6616 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/celloaccent.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chiclet-click.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chiclet-click.rmf new file mode 100644 index 00000000..4f3a979a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chiclet-click.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chirp-alert.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chirp-alert.rmf new file mode 100644 index 00000000..cfeb1c5e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/chirp-alert.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/click-warble.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/click-warble.rmf new file mode 100644 index 00000000..49708057 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/click-warble.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/collision.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/collision.rmf new file mode 100644 index 00000000..cd7ce290 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/collision.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/copper-moon.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/copper-moon.rmf new file mode 100644 index 00000000..5a33e1eb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/copper-moon.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cubic-fall.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cubic-fall.rmf new file mode 100644 index 00000000..b20457a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/cubic-fall.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/descent.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/descent.rmf new file mode 100644 index 00000000..3b0ace4d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/descent.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/doubleclicker.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/doubleclicker.rmf new file mode 100644 index 00000000..696a3940 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/doubleclicker.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/elven-collision.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/elven-collision.rmf new file mode 100644 index 00000000..fd707f24 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/elven-collision.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/entrysnapper.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/entrysnapper.rmf new file mode 100644 index 00000000..0a4bdae5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/entrysnapper.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/euro-star.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/euro-star.rmf new file mode 100644 index 00000000..e85d5d8a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/euro-star.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/falling-beep.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/falling-beep.rmf new file mode 100644 index 00000000..da16919b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/falling-beep.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flasher.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flasher.rmf new file mode 100644 index 00000000..0a1bfe1c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flasher.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flowchart.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flowchart.rmf new file mode 100644 index 00000000..5155bc29 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/flowchart.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/fluteyopen.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/fluteyopen.rmf new file mode 100644 index 00000000..21da3bba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/fluteyopen.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/foscil.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/foscil.rmf new file mode 100644 index 00000000..d8303369 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/foscil.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/friendlypad.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/friendlypad.rmf new file mode 100644 index 00000000..28720ad7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/friendlypad.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/gravity.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/gravity.rmf new file mode 100644 index 00000000..bb96f594 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/gravity.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/green-world.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/green-world.rmf new file mode 100644 index 00000000..37b8be48 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/green-world.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty.rmf new file mode 100644 index 00000000..415d2ce6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty2.rmf new file mode 100644 index 00000000..058df750 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hello-kitty2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hi-popclick.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hi-popclick.rmf new file mode 100644 index 00000000..08245099 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hi-popclick.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hornstabber.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hornstabber.rmf new file mode 100644 index 00000000..004e2da8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/hornstabber.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/insectoid.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/insectoid.rmf new file mode 100644 index 00000000..ea580874 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/insectoid.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/inside-out.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/inside-out.rmf new file mode 100644 index 00000000..6e3ef0f4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/inside-out.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lo-popclick.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lo-popclick.rmf new file mode 100644 index 00000000..7635bb46 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lo-popclick.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lowstaberbreathe.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lowstaberbreathe.rmf new file mode 100644 index 00000000..d6ce47e3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lowstaberbreathe.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-landing.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-landing.rmf new file mode 100644 index 00000000..be3847f6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-landing.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-1.rmf new file mode 100644 index 00000000..cb9d3654 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-2.rmf new file mode 100644 index 00000000..710b74e1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lunar-orbit-2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lusherdrone.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lusherdrone.rmf new file mode 100644 index 00000000..1bfbbe06 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lusherdrone.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lushopen.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lushopen.rmf new file mode 100644 index 00000000..2d7271de Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/lushopen.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/marshimmer.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/marshimmer.rmf new file mode 100644 index 00000000..acd956df Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/marshimmer.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-1.rmf new file mode 100644 index 00000000..8f381521 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-2.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-2.rmf new file mode 100644 index 00000000..eff9147b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-2.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-3.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-3.rmf new file mode 100644 index 00000000..252b4ab9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-3.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-4.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-4.rmf new file mode 100644 index 00000000..a7652793 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mechanix-4.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mellow-yellow.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mellow-yellow.rmf new file mode 100644 index 00000000..ba23c6e9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mellow-yellow.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/metalfolderopen.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/metalfolderopen.rmf new file mode 100644 index 00000000..24d85cdf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/metalfolderopen.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/microbes.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/microbes.rmf new file mode 100644 index 00000000..48e98df2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/microbes.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mission-control.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mission-control.rmf new file mode 100644 index 00000000..539aaa45 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/mission-control.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-glow.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-glow.rmf new file mode 100644 index 00000000..cca1b9c0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-glow.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-sprout.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-sprout.rmf new file mode 100644 index 00000000..97eb3d44 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moon-sprout.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moonrise.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moonrise.rmf new file mode 100644 index 00000000..d77e83d6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/moonrise.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/nebula-1.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/nebula-1.rmf new file mode 100644 index 00000000..b1a06931 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/nebula-1.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/noodle-factory.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/noodle-factory.rmf new file mode 100644 index 00000000..1385d8f5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/noodle-factory.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/oil-fone.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/oil-fone.rmf new file mode 100644 index 00000000..5711a454 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/oil-fone.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/orbital.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/orbital.rmf new file mode 100644 index 00000000..020fa511 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/orbital.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/particle-spray.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/particle-spray.rmf new file mode 100644 index 00000000..683e3931 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/particle-spray.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/phazer.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/phazer.rmf new file mode 100644 index 00000000..f0b5fd2e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/phazer.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/purple-sphere.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/purple-sphere.rmf new file mode 100644 index 00000000..edfe157c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/purple-sphere.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/push-thru.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/push-thru.rmf new file mode 100644 index 00000000..ce4c4631 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/push-thru.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/quazar.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/quazar.rmf new file mode 100644 index 00000000..89f39a8c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/quazar.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/raygun.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/raygun.rmf new file mode 100644 index 00000000..9f2ef424 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/raygun.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/ring-cloud.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/ring-cloud.rmf new file mode 100644 index 00000000..97b1338f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/ring-cloud.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/silver-sphere.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/silver-sphere.rmf new file mode 100644 index 00000000..6ba9adef Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/silver-sphere.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-insertion.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-insertion.rmf new file mode 100644 index 00000000..baad1732 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-insertion.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-selection.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-selection.rmf new file mode 100644 index 00000000..6af361b5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/soft-selection.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/solar-flare.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/solar-flare.rmf new file mode 100644 index 00000000..4f1c2f66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/solar-flare.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-junk.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-junk.rmf new file mode 100644 index 00000000..c869c259 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-junk.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-legs.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-legs.rmf new file mode 100644 index 00000000..ffb85617 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/space-legs.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/splunk.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/splunk.rmf new file mode 100644 index 00000000..7e5a93f3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/splunk.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/square-beep.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/square-beep.rmf new file mode 100644 index 00000000..fa5096f1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/square-beep.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/success.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/success.rmf new file mode 100644 index 00000000..6e5aa7bb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/success.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/swish-42.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/swish-42.rmf new file mode 100644 index 00000000..4a00c98e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/swish-42.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/synthtoggler.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/synthtoggler.rmf new file mode 100644 index 00000000..2d4fcc36 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/synthtoggler.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/terraform.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/terraform.rmf new file mode 100644 index 00000000..af545489 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/terraform.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tickermove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tickermove.rmf new file mode 100644 index 00000000..764be851 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tickermove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tranquility-base.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tranquility-base.rmf new file mode 100644 index 00000000..33d8f2ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/tranquility-base.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-clave.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-clave.rmf new file mode 100644 index 00000000..7df4f76f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-clave.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-probe.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-probe.rmf new file mode 100644 index 00000000..9cad2556 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/venus-probe.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/warbler.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/warbler.rmf new file mode 100644 index 00000000..0142941b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/warbler.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/womperhit.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/womperhit.rmf new file mode 100644 index 00000000..2797b5a9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/womperhit.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/zoopover.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/zoopover.rmf new file mode 100644 index 00000000..c8b4fd75 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/sonic-icons/zoopover.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ah-ha.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ah-ha.rmf new file mode 100644 index 00000000..9301e991 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ah-ha.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/big-entrance.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/big-entrance.rmf new file mode 100644 index 00000000..000af7f0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/big-entrance.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/cafe.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/cafe.rmf new file mode 100644 index 00000000..742a378c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/cafe.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/colossus.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/colossus.rmf new file mode 100644 index 00000000..69258ddb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/colossus.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/corp-tag.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/corp-tag.rmf new file mode 100644 index 00000000..ea587010 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/corp-tag.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/crickets-loop.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/crickets-loop.rmf new file mode 100644 index 00000000..8f7b0c74 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/crickets-loop.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ethnik.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ethnik.rmf new file mode 100644 index 00000000..24d9a068 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ethnik.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/evening-star.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/evening-star.rmf new file mode 100644 index 00000000..93779896 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/evening-star.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/glimmer.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/glimmer.rmf new file mode 100644 index 00000000..a5ce552c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/glimmer.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/grab-em.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/grab-em.rmf new file mode 100644 index 00000000..3c9b96ef Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/grab-em.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/kule-guy.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/kule-guy.rmf new file mode 100644 index 00000000..0b2e610c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/kule-guy.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/monkey.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/monkey.rmf new file mode 100644 index 00000000..24ce2ba2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/monkey.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/nature.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/nature.rmf new file mode 100644 index 00000000..6bc470d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/nature.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/number-one.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/number-one.rmf new file mode 100644 index 00000000..102f5829 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/number-one.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ocean.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ocean.rmf new file mode 100644 index 00000000..86070128 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/ocean.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/piano.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/piano.rmf new file mode 100644 index 00000000..092b702e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/piano.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/profile.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/profile.rmf new file mode 100644 index 00000000..bb3e8261 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/profile.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/subtle.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/subtle.rmf new file mode 100644 index 00000000..e3656625 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/subtle.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/swing-up.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/swing-up.rmf new file mode 100644 index 00000000..98c5712a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/swing-up.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/techy.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/techy.rmf new file mode 100644 index 00000000..f4469ea5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/stingers/techy.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-full.rmf new file mode 100644 index 00000000..be581589 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-short.rmf new file mode 100644 index 00000000..51efea3c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/aerialize-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-groove.rmf new file mode 100644 index 00000000..3aa57bee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-short.rmf new file mode 100644 index 00000000..dd5670b4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-w-samples.rmf new file mode 100644 index 00000000..6428efa8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight.rmf new file mode 100644 index 00000000..551bd4da Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bleulight.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full-alt.rmf new file mode 100644 index 00000000..b4ed205f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full.rmf new file mode 100644 index 00000000..b2966c7e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-groove.rmf new file mode 100644 index 00000000..878bd37d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/blue-fog-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-full.rmf new file mode 100644 index 00000000..aa8804a3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-groove.rmf new file mode 100644 index 00000000..5faeac84 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-short.rmf new file mode 100644 index 00000000..13e2015b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/bugbreaker-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-full.rmf new file mode 100644 index 00000000..fc13db55 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-groove.rmf new file mode 100644 index 00000000..a7993ea6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-short.rmf new file mode 100644 index 00000000..ecc14ec5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/chop-squad-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-full.rmf new file mode 100644 index 00000000..bd6cebd9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-groove.rmf new file mode 100644 index 00000000..3e9cad4e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-short.rmf new file mode 100644 index 00000000..df97f1c7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/frenitian-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full-alt.rmf new file mode 100644 index 00000000..80ca52ae Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full.rmf new file mode 100644 index 00000000..49168833 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-groove.rmf new file mode 100644 index 00000000..8ee7e3cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-short.rmf new file mode 100644 index 00000000..8622bf11 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/irradiator-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-full.rmf new file mode 100644 index 00000000..41b5aa11 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-groove.rmf new file mode 100644 index 00000000..303c9166 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/obliquia-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot-full.rmf new file mode 100644 index 00000000..da066c6f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot.rmf new file mode 100644 index 00000000..4a254eff Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/polyzoot.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-full.rmf new file mode 100644 index 00000000..70e2480c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-groove.rmf new file mode 100644 index 00000000..56e630d5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-short.rmf new file mode 100644 index 00000000..bcac148d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/renegado-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full-alt.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full-alt.rmf new file mode 100644 index 00000000..766e6df5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full-alt.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full.rmf new file mode 100644 index 00000000..cab18f94 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-short.rmf new file mode 100644 index 00000000..4a94534d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/seethroo-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/the-future-is.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/the-future-is.rmf new file mode 100644 index 00000000..0dafae27 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/the-future-is.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-full.rmf new file mode 100644 index 00000000..e74f4526 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-short.rmf new file mode 100644 index 00000000..8ce880f9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/tripwire-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/vampster.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/vampster.rmf new file mode 100644 index 00000000..8947e9d9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/vampster.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/windows-everywhere.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/windows-everywhere.rmf new file mode 100644 index 00000000..a52c01c1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/underground/windows-everywhere.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish01.rmf new file mode 100644 index 00000000..68d0dcad Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish02.rmf new file mode 100644 index 00000000..d0ed31b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-full.rmf new file mode 100644 index 00000000..d9940352 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove01.rmf new file mode 100644 index 00000000..8d7cfcca Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove02.rmf new file mode 100644 index 00000000..7cbf7d69 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-groove02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-short.rmf new file mode 100644 index 00000000..b66cf7ac Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-solo.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-solo.rmf new file mode 100644 index 00000000..d0cef464 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-solo.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-w-samples.rmf new file mode 100644 index 00000000..f6425196 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/groovedeux-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish01.rmf new file mode 100644 index 00000000..63d8bc28 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish02.rmf new file mode 100644 index 00000000..a360d028 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish03.rmf new file mode 100644 index 00000000..88e5cb6c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-full.rmf new file mode 100644 index 00000000..52739806 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-groove.rmf new file mode 100644 index 00000000..d3dcf6a3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-short.rmf new file mode 100644 index 00000000..feebffdc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-w-samples.rmf new file mode 100644 index 00000000..fcec6e5b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hardtek-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish01.rmf new file mode 100644 index 00000000..ed67fb71 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish02.rmf new file mode 100644 index 00000000..db7741dd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish03.rmf new file mode 100644 index 00000000..f92a3d08 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-full.rmf new file mode 100644 index 00000000..d9199f1f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-groove.rmf new file mode 100644 index 00000000..3efabb00 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-short.rmf new file mode 100644 index 00000000..2c141fcf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/hi-tech-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/index.html new file mode 100644 index 00000000..9009088b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/index.html @@ -0,0 +1,266 @@ + + + + +Upbeat Music + + + + + + + + +
      + + + + + +
      + + Upbeat Music +
      +
      +
      + +
      + +groovedeux-flourish01
      +Upbeat Music
      +
      +groovedeux-flourish02
      +Upbeat Music
      +
      +groovedeux-full
      +Upbeat Music
      +
      +groovedeux-groove01
      +Upbeat Music
      +
      +groovedeux-groove02
      +Upbeat Music
      +
      +groovedeux-short
      +Upbeat Music
      +
      +groovedeux-solo
      +Upbeat Music
      +
      +groovedeux-w-samples
      +Upbeat Music
      +
      +hardtek-flourish01
      +Upbeat Music
      +
      +hardtek-flourish02
      +Upbeat Music
      +
      +hardtek-flourish03
      +Upbeat Music
      +
      +hardtek-full
      +Upbeat Music
      +
      +hardtek-groove
      +Upbeat Music
      +
      +hardtek-short
      +Upbeat Music
      +
      +hardtek-w-samples
      +Upbeat Music
      +
      +hi-tech-flourish01
      +Upbeat Music
      +
      +hi-tech-flourish02
      +Upbeat Music
      +
      +hi-tech-flourish03
      +Upbeat Music
      +
      +hi-tech-full
      +Upbeat Music
      +
      +hi-tech-groove
      +Upbeat Music
      +
      +hi-tech-short
      +Upbeat Music
      +
      +jetset-flourish01
      +Upbeat Music
      +
      +jetset-flourish02
      +Upbeat Music
      +
      +jetset-full
      +Upbeat Music
      + +
      + + +jetset-groove01
      +Upbeat Music
      +
      +jetset-groove02
      +Upbeat Music
      +
      +jetset-groove03
      +Upbeat Music
      +
      +jetset-short
      +Upbeat Music
      +
      +jetset-w-samples
      +Upbeat Music
      +
      +kraftytechy-flourish01
      +Upbeat Music
      +
      +kraftytechy-flourish02
      +Upbeat Music
      +
      +kraftytechy-flourish03
      +Upbeat Music
      +
      +kraftytechy-full
      +Upbeat Music
      +
      +kraftytechy-groove
      +Upbeat Music
      +
      +kraftytechy-short
      +Upbeat Music
      +
      +kraftytechy-w-samples
      +Upbeat Music
      +
      +man-o-war-flourish01
      +Upbeat Music
      +
      +man-o-war-flourish02
      +Upbeat Music
      +
      +man-o-war-flourish03
      +Upbeat Music
      +
      +man-o-war-full
      +Upbeat Music
      +
      +man-o-war-short
      +Upbeat Music
      +
      +man-o-war-w-samples
      +Upbeat Music
      +
      +popster-flourish01
      +Upbeat Music
      +
      +popster-flourish02
      +Upbeat Music
      +
      +popster-flourish03
      +Upbeat Music
      +
      +popster-flourish04
      +Upbeat Music
      +
      +popster-full-samples
      +Upbeat Music
      +
      +popster-full
      +Upbeat Music
      + +
      + + +popster-groove
      +Upbeat Music
      +
      +popster-short
      +Upbeat Music
      +
      +schizo-trance-flourish01
      +Upbeat Music
      +
      +schizo-trance-flourish02
      +Upbeat Music
      +
      +schizo-trance-flourish03
      +Upbeat Music
      +
      +schizo-trance-full
      +Upbeat Music
      +
      +schizo-trance-groove
      +Upbeat Music
      +
      +schizo-trance-samples
      +Upbeat Music
      +
      +schizo-trance-short01
      +Upbeat Music
      +
      +schizo-trance-short02
      +Upbeat Music
      +
      +synchotronic-flourish01
      +Upbeat Music
      +
      +synchotronic-flourish02
      +Upbeat Music
      +
      +synchotronic-flourish03
      +Upbeat Music
      +
      +synchotronic-flourish04
      +Upbeat Music
      +
      +synchotronic-full
      +Upbeat Music
      +
      +synchotronic-groove
      +Upbeat Music
      +
      +synchotronic-short
      +Upbeat Music
      +
      +tropicalist-flourish01
      +Upbeat Music
      +
      +tropicalist-flourish02
      +Upbeat Music
      +
      +tropicalist-flourish03
      +Upbeat Music
      +
      +tropicalist-full
      +Upbeat Music
      +
      +tropicalist-groove01
      +Upbeat Music
      +
      +tropicalist-groove02
      +Upbeat Music
      +
      +tropicalist-w-samples
      +Upbeat Music
      +
      + +
      + + +
      + +
      + + +
      + +
      +
      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish01.rmf new file mode 100644 index 00000000..4e336f7a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish02.rmf new file mode 100644 index 00000000..5ba821aa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-full.rmf new file mode 100644 index 00000000..b4b02503 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove01.rmf new file mode 100644 index 00000000..dd7c5421 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove02.rmf new file mode 100644 index 00000000..a21ca994 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove03.rmf new file mode 100644 index 00000000..bc0e7c49 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-groove03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-short.rmf new file mode 100644 index 00000000..136f8d3c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-w-samples.rmf new file mode 100644 index 00000000..2c8d8df7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/jetset-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish01.rmf new file mode 100644 index 00000000..6f202f97 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish02.rmf new file mode 100644 index 00000000..fb3efad9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish03.rmf new file mode 100644 index 00000000..047f2d4c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-full.rmf new file mode 100644 index 00000000..ee4f5da3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-groove.rmf new file mode 100644 index 00000000..564143a1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-short.rmf new file mode 100644 index 00000000..f61dec81 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-w-samples.rmf new file mode 100644 index 00000000..ad07cbba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/kraftytechy-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish01.rmf new file mode 100644 index 00000000..83fc18a0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish02.rmf new file mode 100644 index 00000000..16bd8ab9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish03.rmf new file mode 100644 index 00000000..f40e2e0f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-full.rmf new file mode 100644 index 00000000..083df1cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-short.rmf new file mode 100644 index 00000000..79876ebd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-w-samples.rmf new file mode 100644 index 00000000..4817799c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/man-o-war-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish01.rmf new file mode 100644 index 00000000..1d1bb33a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish02.rmf new file mode 100644 index 00000000..14e1e03c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish03.rmf new file mode 100644 index 00000000..4275002b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish04.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish04.rmf new file mode 100644 index 00000000..0a7fbbbc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-flourish04.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full-samples.rmf new file mode 100644 index 00000000..2fa8e42b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full.rmf new file mode 100644 index 00000000..a93563ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-groove.rmf new file mode 100644 index 00000000..66699894 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-short.rmf new file mode 100644 index 00000000..2458445d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/popster-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish01.rmf new file mode 100644 index 00000000..5ce35a66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish02.rmf new file mode 100644 index 00000000..59e04f46 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish03.rmf new file mode 100644 index 00000000..d1404bd9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-full.rmf new file mode 100644 index 00000000..9bbf54cd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-groove.rmf new file mode 100644 index 00000000..1abfe6ff Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-samples.rmf new file mode 100644 index 00000000..f8fc82e0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short01.rmf new file mode 100644 index 00000000..5e1e6238 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short02.rmf new file mode 100644 index 00000000..7d9a51ba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/schizo-trance-short02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish01.rmf new file mode 100644 index 00000000..a40efe3b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish02.rmf new file mode 100644 index 00000000..0346e902 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish03.rmf new file mode 100644 index 00000000..ed2f5cf6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish04.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish04.rmf new file mode 100644 index 00000000..19a8da81 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-flourish04.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-full.rmf new file mode 100644 index 00000000..b8c6a5ba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-groove.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-groove.rmf new file mode 100644 index 00000000..025dc560 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-groove.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-short.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-short.rmf new file mode 100644 index 00000000..f3c23e1e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/synchotronic-short.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish01.rmf new file mode 100644 index 00000000..290d0d82 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish02.rmf new file mode 100644 index 00000000..b403be7a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish03.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish03.rmf new file mode 100644 index 00000000..323e7dc2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-flourish03.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-full.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-full.rmf new file mode 100644 index 00000000..b7298281 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-full.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove01.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove01.rmf new file mode 100644 index 00000000..07eedc45 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove01.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove02.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove02.rmf new file mode 100644 index 00000000..5152555d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-groove02.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-w-samples.rmf b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-w-samples.rmf new file mode 100644 index 00000000..32bb0bd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/headspace/RMF/upbeat/tropicalist-w-samples.rmf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe00.jpg new file mode 100644 index 00000000..636ba246 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe01.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe01.jpg new file mode 100644 index 00000000..3a7bc453 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe01.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe02.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe02.jpg new file mode 100644 index 00000000..ca6e3e59 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe02.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe03.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe03.jpg new file mode 100644 index 00000000..f38760d2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe03.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe04.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe04.jpg new file mode 100644 index 00000000..a6438571 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/europe04.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower00.jpg new file mode 100644 index 00000000..5eeb94a0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower01.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower01.jpg new file mode 100644 index 00000000..369e7f40 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/flower01.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france00.jpg new file mode 100644 index 00000000..7bdb04b9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france01.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france01.jpg new file mode 100644 index 00000000..65482a53 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france01.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france02.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france02.jpg new file mode 100644 index 00000000..d6528164 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france02.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france03.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france03.jpg new file mode 100644 index 00000000..4e82b73f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/france03.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar0.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar0.jpg new file mode 100644 index 00000000..9905884c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar0.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar1.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar1.jpg new file mode 100644 index 00000000..fc1e25e0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar1.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar10.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar10.jpg new file mode 100644 index 00000000..4b693bcb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar10.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar11.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar11.jpg new file mode 100644 index 00000000..1b69858a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar11.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar12.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar12.jpg new file mode 100644 index 00000000..39559fdd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar12.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar13.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar13.jpg new file mode 100644 index 00000000..30853965 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar13.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar14.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar14.jpg new file mode 100644 index 00000000..098ed700 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar14.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar15.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar15.jpg new file mode 100644 index 00000000..ac198a01 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar15.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar16.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar16.jpg new file mode 100644 index 00000000..4d76a333 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar16.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar17.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar17.jpg new file mode 100644 index 00000000..72ace264 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar17.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar18.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar18.jpg new file mode 100644 index 00000000..db004597 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar18.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar19.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar19.jpg new file mode 100644 index 00000000..d705dc8b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar19.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar2.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar2.jpg new file mode 100644 index 00000000..02694fd5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar2.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar20.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar20.jpg new file mode 100644 index 00000000..b4c3600d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar20.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar21.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar21.jpg new file mode 100644 index 00000000..006be5e6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar21.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar22.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar22.jpg new file mode 100644 index 00000000..0da66805 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar22.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar23.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar23.jpg new file mode 100644 index 00000000..ea77d475 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar23.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar24.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar24.jpg new file mode 100644 index 00000000..06098a94 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar24.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar25.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar25.jpg new file mode 100644 index 00000000..f718a113 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar25.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar26.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar26.jpg new file mode 100644 index 00000000..410e3965 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar26.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar27.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar27.jpg new file mode 100644 index 00000000..075959bf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar27.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar28.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar28.jpg new file mode 100644 index 00000000..55230eab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar28.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar29.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar29.jpg new file mode 100644 index 00000000..6fa31c3e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar29.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar3.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar3.jpg new file mode 100644 index 00000000..12f45921 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar3.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar4.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar4.jpg new file mode 100644 index 00000000..73c22666 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/kar4.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape02.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape02.jpg new file mode 100644 index 00000000..f636748d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape02.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape03.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape03.jpg new file mode 100644 index 00000000..5068039a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape03.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape04.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape04.jpg new file mode 100644 index 00000000..fc2bbfa6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape04.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape05.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape05.jpg new file mode 100644 index 00000000..56098411 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/landscape05.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain00.jpg new file mode 100644 index 00000000..79bca029 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain02.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain02.jpg new file mode 100644 index 00000000..ce152cf8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain02.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain03.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain03.jpg new file mode 100644 index 00000000..5f87a4e8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/mountain03.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset00.jpg new file mode 100644 index 00000000..fe79856f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset01.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset01.jpg new file mode 100644 index 00000000..c3d84823 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset01.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset02.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset02.jpg new file mode 100644 index 00000000..1e0afd3b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/sunset02.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/tree01.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/tree01.jpg new file mode 100644 index 00000000..b271492e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/tree01.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/water.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/water.jpg new file mode 100644 index 00000000..fa7d42f8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/water.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/waterfall00.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/waterfall00.jpg new file mode 100644 index 00000000..25750693 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/waterfall00.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/wfish.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/wfish.jpg new file mode 100644 index 00000000..e01323f3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/karaoke/images/wfish.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged.mid new file mode 100644 index 00000000..9e4ce94f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged2.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged2.mid new file mode 100644 index 00000000..fefb6bfa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Bogged2.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Brasilia.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Brasilia.mid new file mode 100644 index 00000000..63f5a2bf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Brasilia.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Busy.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Busy.mid new file mode 100644 index 00000000..7f9dcf9a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Busy.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CantWait.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CantWait.mid new file mode 100644 index 00000000..88552969 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CantWait.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Catamran.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Catamran.mid new file mode 100644 index 00000000..3cea2539 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Catamran.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ComeInn.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ComeInn.mid new file mode 100644 index 00000000..d77fa5fe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ComeInn.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CoolShad.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CoolShad.mid new file mode 100644 index 00000000..d20dbe2e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/CoolShad.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Dancing.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Dancing.mid new file mode 100644 index 00000000..682a33b6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Dancing.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DarkGame.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DarkGame.mid new file mode 100644 index 00000000..dd400c60 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DarkGame.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DeerXing.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DeerXing.mid new file mode 100644 index 00000000..4048979e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/DeerXing.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Downtown.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Downtown.mid new file mode 100644 index 00000000..83260322 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Downtown.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Fever.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Fever.mid new file mode 100644 index 00000000..47bc058d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Fever.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutey.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutey.mid new file mode 100644 index 00000000..282accf7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutey.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutter.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutter.mid new file mode 100644 index 00000000..5f3f4a3c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Flutter.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Georgy.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Georgy.mid new file mode 100644 index 00000000..79998bba Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Georgy.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/GetBy.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/GetBy.mid new file mode 100644 index 00000000..681ee15e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/GetBy.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Glasses.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Glasses.mid new file mode 100644 index 00000000..c577c1ec Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Glasses.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Harry.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Harry.mid new file mode 100644 index 00000000..a858d840 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Harry.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Herbie.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Herbie.mid new file mode 100644 index 00000000..c9b2bcb1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Herbie.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/HomeAgn.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/HomeAgn.mid new file mode 100644 index 00000000..b493cc5a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/HomeAgn.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Huffin.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Huffin.mid new file mode 100644 index 00000000..54f73bb2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Huffin.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jazzin.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jazzin.mid new file mode 100644 index 00000000..e578069f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jazzin.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jimi.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jimi.mid new file mode 100644 index 00000000..06434d08 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Jimi.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JiveJava.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JiveJava.mid new file mode 100644 index 00000000..820d809f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JiveJava.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JustBlue.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JustBlue.mid new file mode 100644 index 00000000..88e72def Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/JustBlue.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/LizLarry.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/LizLarry.mid new file mode 100644 index 00000000..de0f9dd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/LizLarry.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Midterm.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Midterm.mid new file mode 100644 index 00000000..87242a39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Midterm.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Missin.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Missin.mid new file mode 100644 index 00000000..1cdad44b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Missin.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Moorea.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Moorea.mid new file mode 100644 index 00000000..c537ec35 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Moorea.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/MoveOver.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/MoveOver.mid new file mode 100644 index 00000000..5ceb9b4e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/MoveOver.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/NiteFunk.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/NiteFunk.mid new file mode 100644 index 00000000..63df3f4e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/NiteFunk.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnBoogie.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnBoogie.mid new file mode 100644 index 00000000..7bccab68 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnBoogie.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnFire.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnFire.mid new file mode 100644 index 00000000..577a7fb5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/OnFire.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PCH.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PCH.mid new file mode 100644 index 00000000..a24e3799 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PCH.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkIt.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkIt.mid new file mode 100644 index 00000000..92a195c1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkIt.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkWalk.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkWalk.mid new file mode 100644 index 00000000..48fe4ba4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ParkWalk.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz1.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz1.mid new file mode 100644 index 00000000..342f538f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz1.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz2.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz2.mid new file mode 100644 index 00000000..c43666cb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/PianoJz2.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prezo.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prezo.mid new file mode 100644 index 00000000..a0309c3b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prezo.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prussian.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prussian.mid new file mode 100644 index 00000000..96c11d0e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Prussian.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Pundit.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Pundit.mid new file mode 100644 index 00000000..9afca401 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Pundit.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/RickPunk.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/RickPunk.mid new file mode 100644 index 00000000..1944fa62 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/RickPunk.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Road.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Road.mid new file mode 100644 index 00000000..47d9eac8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Road.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Saunter.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Saunter.mid new file mode 100644 index 00000000..4da119a3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Saunter.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ShadowMe.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ShadowMe.mid new file mode 100644 index 00000000..7a1fb012 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/ShadowMe.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Shre.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Shre.mid new file mode 100644 index 00000000..b15569b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Shre.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SlowDay.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SlowDay.mid new file mode 100644 index 00000000..901c1760 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SlowDay.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SoGrand.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SoGrand.mid new file mode 100644 index 00000000..ba4ca60a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SoGrand.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/StarDanc.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/StarDanc.mid new file mode 100644 index 00000000..a0859f4d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/StarDanc.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Stubborn.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Stubborn.mid new file mode 100644 index 00000000..818b7fbf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Stubborn.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Surge.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Surge.mid new file mode 100644 index 00000000..f3c7d690 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Surge.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Swang.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Swang.mid new file mode 100644 index 00000000..4c652faa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Swang.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SwingSet.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SwingSet.mid new file mode 100644 index 00000000..5eb8b33f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/SwingSet.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TastyWav.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TastyWav.mid new file mode 100644 index 00000000..bfec74a2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TastyWav.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TheGirl.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TheGirl.mid new file mode 100644 index 00000000..f441a102 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/TheGirl.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Theme.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Theme.mid new file mode 100644 index 00000000..10f5c33a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Theme.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Think.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Think.mid new file mode 100644 index 00000000..7a9ad441 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Think.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Travel.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Travel.mid new file mode 100644 index 00000000..20dd9f77 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Travel.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Tumbling.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Tumbling.mid new file mode 100644 index 00000000..377d503c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Tumbling.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Under.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Under.mid new file mode 100644 index 00000000..d44652bd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Under.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Upping.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Upping.mid new file mode 100644 index 00000000..8be68b8d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Upping.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Wind1.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Wind1.mid new file mode 100644 index 00000000..577d3e5b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Wind1.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Xess.mid b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Xess.mid new file mode 100644 index 00000000..181832c6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/Xess.mid differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/index.html new file mode 100644 index 00000000..5794d4b0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/midi/index.html @@ -0,0 +1,198 @@ + + + + Midi Index + + + + +

      + + +
      +

      - Midi Index -

      + +


      +

      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +

      Bogged.mid +

      +

      Jazzin.mid +

      +

      Saunter.mid +

      +

      Bogged2.mid +

      +

      Jimi.mid +

      +

      ShadowMe.mid +

      +

      Brasilia.mid +

      +

      JiveJava.mid +

      +

      Shre.mid +

      +

      Busy.mid +

      +

      JustBlue.mid +

      +

      SlowDay.mid +

      +

      CantWait.mid +

      +

      LizLarry.mid +

      +

      SoGrand.mid +

      +

      Catamran.mid +

      +

      Midterm.mid +

      +

      StarDanc.mid +

      +

      ComeInn.mid +

      +

      Missin.mid +

      +

      Stubborn.mid +

      +

      CoolShad.mid +

      +

      Moorea.mid +

      +

      Surge.mid +

      +

      Dancing.mid +

      +

      MoveOver.mid +

      +

      Swang.mid +

      +

      DarkGame.mid +

      +

      NiteFunk.mid +

      +

      SwingSet.mid +

      +

      DeerXing.mid +

      +

      OnBoogie.mid +

      +

      TastyWav.mid +

      +

      Downtown.mid +

      +

      OnFire.mid +

      +

      TheGirl.mid +

      +

      Fever.mid +

      +

      ParkIt.mid +

      +

      Theme.mid +

      +

      Flutey.mid +

      +

      ParkWalk.mid +

      +

      Think.mid +

      +

      Flutter.mid +

      +

      PCH.mid +

      +

      Travel.mid +

      +

      Georgy.mid +

      +

      PianoJz1.mid +

      +

      Tumbling.mid +

      +

      GetBy.mid +

      +

      PianoJz2.mid +

      +

      Under.mid +

      +

      Glasses.mid +

      +

      Prezo.mid +

      +

      Upping.mid +

      +

      Harry.mid +

      +

      Prussian.mid +

      +

      Wind1.mid +

      +

      Herbie.mid +

      +

      Pundit.mid +

      +

      Xess.mid +

      +

      HomeAgn.mid +

      +

      RickPunk.mid +

      +

      +

      +

      Huffin.mid +

      +

      Road.mid +

      +

      +

      + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/128k.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/128k.xm new file mode 100644 index 00000000..b2911588 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/128k.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-chord.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-chord.mod new file mode 100644 index 00000000..46a7b373 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-chord.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-dream.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-dream.mod new file mode 100644 index 00000000..121bba16 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-dream.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-even.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-even.mod new file mode 100644 index 00000000..8e1b5b2c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-even.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-night.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-night.mod new file mode 100644 index 00000000..52f3d513 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-night.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-seasd.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-seasd.mod new file mode 100644 index 00000000..988682e0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-seasd.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-sound.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-sound.mod new file mode 100644 index 00000000..4993a791 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-sound.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-upstr.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-upstr.mod new file mode 100644 index 00000000..8bf68e9a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-upstr.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-wintr.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-wintr.mod new file mode 100644 index 00000000..69b4bddd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/as-wintr.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bells.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bells.xm new file mode 100644 index 00000000..abf7f7a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bells.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bouncin.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bouncin.xm new file mode 100644 index 00000000..245d50a8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/bouncin.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/chordF.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/chordF.mod new file mode 100644 index 00000000..46a7b373 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/chordF.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/consolid.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/consolid.xm new file mode 100644 index 00000000..adaee900 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/consolid.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/dream.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/dream.mod new file mode 100644 index 00000000..121bba16 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/dream.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/evening.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/evening.mod new file mode 100644 index 00000000..8e1b5b2c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/evening.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/freedom.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/freedom.xm new file mode 100644 index 00000000..07e12808 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/freedom.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/index.html b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/index.html new file mode 100644 index 00000000..a1df55f3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/index.html @@ -0,0 +1,219 @@ + + + + Mod Index + + + + + +

      + + +
      +

      - Mod Index -

      + +


      +

      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +

      as-chord.mod +

      +

      la-vast.xm +

      +

      ms-news.s3m +

      +

      as-dream.mod +

      +

      mg-128k.xm +

      +

      ms-scrm.s3m +

      +

      as-even.mod +

      +

      mg-acous.xm +

      +

      ms-still.s3m +

      +

      as-night.mod +

      +

      mg-bells.xm +

      +

      ms-tranc.s3m +

      +

      as-seasd.mod +

      +

      mg-bounc.xm +

      +

      ms-virt.s3m +

      +

      as-sound.mod +

      +

      mg-free.xm +

      +

      ms-way.s3m +

      +

      as-upstr.mod +

      +

      mg-jamn.xm +

      +

      ta-cafe.xm +

      +

      as-wintr.mod +

      +

      mg-melod.xm +

      +

      ta-drift.xm +

      +

      la-cnsld.xm +

      +

      mg-mount.xm +

      +

      ta-first.xm +

      +

      la-dung.mod +

      +

      mg-piano.xm +

      +

      ta-leave.xm +

      +

      la-farew.mod +

      +

      mg-rain.xm +

      +

      ta-lifel.xm +

      +

      la-flake.xm +

      +

      mg-rav95.xm +

      +

      ta-musq.xm +

      +

      la-illus.xm +

      +

      mg-xmasr.xm +

      +

      ta-nerv.xm +

      +

      la-medal.mod +

      +

      ms-4you.s3m +

      +

      ta-sky.xm +

      +

      la-ramba.mod +

      +

      ms-beat.s3m +

      +

      ta-soft.xm +

      +

      la-romnc.xm +

      +

      ms-fire.s3m +

      +

      ta-welcm.xm +

      + + +

      + + +
      +


      +

      + +

      + + + + + + + + + + + + + + +
      +

      128k.xm +

      +

      evening.mod +

      +

      snowflak.xm +

      +

      bells.xm +

      +

      freedom.xm +

      +

      sounds.mod +

      +

      bouncin.xm +

      +

      jammin.xm +

      +

      upstream.mod +

      +

      chordF.mod +

      +

      nitetime.mod +

      +

      vastness.xm +

      +

      consolid.xm +

      +

      oldpiano.xm +

      +

      winter.mod +

      +

      dream.mod +

      +

      rave95.xm +

      +

      xmasrave.xm +

      +

      +

      +

      seaside.mod +

      +

      +

      + + + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/jammin.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/jammin.xm new file mode 100644 index 00000000..bd6869ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/jammin.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-cnsld.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-cnsld.xm new file mode 100644 index 00000000..adaee900 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-cnsld.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-dung.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-dung.mod new file mode 100644 index 00000000..eb5f6b40 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-dung.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-farew.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-farew.mod new file mode 100644 index 00000000..07ad5d3e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-farew.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-flake.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-flake.xm new file mode 100644 index 00000000..a3a84e75 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-flake.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-illus.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-illus.xm new file mode 100644 index 00000000..9fc0e971 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-illus.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-medal.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-medal.mod new file mode 100644 index 00000000..8ffdeb43 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-medal.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-ramba.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-ramba.mod new file mode 100644 index 00000000..9228531e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-ramba.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-romnc.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-romnc.xm new file mode 100644 index 00000000..718c1913 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-romnc.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-vast.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-vast.xm new file mode 100644 index 00000000..47bdb607 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/la-vast.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-128k.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-128k.xm new file mode 100644 index 00000000..644ae661 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-128k.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-acous.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-acous.xm new file mode 100644 index 00000000..ec3829e1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-acous.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bells.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bells.xm new file mode 100644 index 00000000..db0ebe0e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bells.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bounc.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bounc.xm new file mode 100644 index 00000000..245d50a8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-bounc.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-free.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-free.xm new file mode 100644 index 00000000..72293912 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-free.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-jamn.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-jamn.xm new file mode 100644 index 00000000..bd6869ea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-jamn.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-melod.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-melod.xm new file mode 100644 index 00000000..2b18b6c2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-melod.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-mount.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-mount.xm new file mode 100644 index 00000000..f7791952 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-mount.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-piano.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-piano.xm new file mode 100644 index 00000000..4365755d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-piano.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rain.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rain.xm new file mode 100644 index 00000000..a5d5f3e0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rain.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rav95.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rav95.xm new file mode 100644 index 00000000..7442851c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-rav95.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-xmasr.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-xmasr.xm new file mode 100644 index 00000000..fb313c66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/mg-xmasr.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-4you.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-4you.s3m new file mode 100644 index 00000000..32a37c38 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-4you.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-beat.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-beat.s3m new file mode 100644 index 00000000..0dffb83a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-beat.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-fire.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-fire.s3m new file mode 100644 index 00000000..efd51691 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-fire.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-news.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-news.s3m new file mode 100644 index 00000000..9fbaa103 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-news.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-scrm.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-scrm.s3m new file mode 100644 index 00000000..a94630d7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-scrm.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-still.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-still.s3m new file mode 100644 index 00000000..f6b84444 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-still.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-tranc.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-tranc.s3m new file mode 100644 index 00000000..ed13ecc4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-tranc.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-virt.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-virt.s3m new file mode 100644 index 00000000..6dbf5b13 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-virt.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-way.s3m b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-way.s3m new file mode 100644 index 00000000..f44fa381 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ms-way.s3m differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/nitetime.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/nitetime.mod new file mode 100644 index 00000000..52f3d513 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/nitetime.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/oldpiano.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/oldpiano.xm new file mode 100644 index 00000000..4bc2b049 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/oldpiano.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/rave95.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/rave95.xm new file mode 100644 index 00000000..7442851c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/rave95.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/seaside.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/seaside.mod new file mode 100644 index 00000000..988682e0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/seaside.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/snowflak.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/snowflak.xm new file mode 100644 index 00000000..a3a84e75 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/snowflak.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/sounds.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/sounds.mod new file mode 100644 index 00000000..4993a791 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/sounds.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-cafe.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-cafe.xm new file mode 100644 index 00000000..5628bdce Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-cafe.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-drift.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-drift.xm new file mode 100644 index 00000000..46a0add2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-drift.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-first.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-first.xm new file mode 100644 index 00000000..f39e2bf4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-first.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-leave.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-leave.xm new file mode 100644 index 00000000..d234cb44 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-leave.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-lifel.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-lifel.xm new file mode 100644 index 00000000..d07d1e08 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-lifel.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-musq.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-musq.xm new file mode 100644 index 00000000..6ec86980 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-musq.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-nerv.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-nerv.xm new file mode 100644 index 00000000..6a16757a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-nerv.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-sky.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-sky.xm new file mode 100644 index 00000000..1a313bf4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-sky.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-soft.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-soft.xm new file mode 100644 index 00000000..6154a91e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-soft.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-welcm.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-welcm.xm new file mode 100644 index 00000000..78f6874b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/ta-welcm.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/upstream.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/upstream.mod new file mode 100644 index 00000000..8bf68e9a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/upstream.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/vastness.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/vastness.xm new file mode 100644 index 00000000..47bdb607 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/vastness.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/winter.mod b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/winter.mod new file mode 100644 index 00000000..69b4bddd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/winter.mod differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/xmasrave.xm b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/xmasrave.xm new file mode 100644 index 00000000..fb313c66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Music/mod/xmasrave.xm differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Karaoke.json b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Karaoke.json new file mode 100644 index 00000000..9d04b5b4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Karaoke.json @@ -0,0 +1,160 @@ +{ + "Karaoke": { + "base": "file://Disk/Music/", + "location": "content/Music/", + "service_owned": true, + "partition_size": 29360128, + "files": [ + { + "file": "file://Disk/Music/karaoke/images/europe00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe04.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/flower00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/flower01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar0.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar1.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar10.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar11.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar12.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar13.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar14.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar15.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar16.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar17.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar18.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar19.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar2.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar20.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar21.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar22.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar23.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar24.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar25.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar26.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar27.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar28.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar29.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar3.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar4.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape04.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape05.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/tree01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/water.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/waterfall00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/wfish.jpg" + } + ] + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Music.json b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Music.json new file mode 100644 index 00000000..064d0fc6 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/Music.json @@ -0,0 +1,1651 @@ +{ + "Music": { + "base": "file://Disk/Music/", + "location": "content/Music/", + "service_owned": true, + "partition_size": 29360128, + "files": [ + { + "file": "file://Disk/Music/headspace/Instruments/Compressed1.1/Patches.hsb" + }, + { + "file": "file://Disk/Music/headspace/Instruments/Uncompressed1.1/Patches.hsb" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/backwaters.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/byzantium-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/byzantium.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/cave-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/cave.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/chunnel.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/cozy.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/moodrider-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/moodrider.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/naugal.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/overmind-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/overmind.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/pacifica-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/pacifica.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/personal-twilight.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/precipice.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/shibuya-ku.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/travelling-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/travelling.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/undersea-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/undersea.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/ambient/waitinggame.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/7th-storey-traffic.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/busy-bar.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/forest-birds.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/komputordome.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/lush-lagoon-big.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/lush-lagoon.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/modern-office.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/money.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/mystical-cave-big.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/mystical-cave.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/netherworld.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-factory-big.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-factory.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-forest-alt1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-forest-alt2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-forest-alt3.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/night-forest.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/rainforest-alt1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/rainforest-alt2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/rainforest.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/spacecraft.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/sports-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/sports.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/tarmac.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/thunderstorm.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/war-zone.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/wind.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/atmospheres/windchimes.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/bach-air.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/bach-prelude-1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/brahms-rhapsody.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/chopin-ballade-1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/chopin-ballade-2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/chopin-nocturne.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/la-barriera-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/lvb-moonlight.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/lvb-ode-to-joy.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/lvb-scherzo9th.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/mendelssohn-prelude.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/mm-promenade.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/mouret-rondeau.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/mozart-symphony40.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/nrk-bumblebee.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/purcell-voluntary.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/schubert-ave-maria.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/classical/smetana-moldau.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/aqua-sky-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/aqua-sky-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/aqua-sky-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/aqua-sky-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/badinerie-full-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/badinerie-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/badinerie-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/camelworld-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-flourish04.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/celestial-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-groove01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-groove02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/chillin-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/garden-of-time-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/grinning-pound-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-full-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/pastorale-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-groove01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-groove02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/smoothgroov-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-flourish04.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/mellow/sunlane-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/affectionate.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/anticipation.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/anxiety-attack.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/busybody.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/contemplate.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/creeping-fear.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/curious.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/grandeur.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/happy-go-lucky.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/intrigue.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/loungy-sixties.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/mystical.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/quietude.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/reminisce.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/moods/sociable.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/acid-sting.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/alien-landscape.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/applauncher.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/asteroid-belt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/astral-matrix.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/atomictea.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/bellweather.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/blue-blade.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/bubble-memory.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/buzz-by.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/cascaderup.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/celloaccent.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/chiclet-click.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/chirp-alert.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/click-warble.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/collision.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/copper-moon.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/cubic-fall.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/descent.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/doubleclicker.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/elven-collision.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/entrysnapper.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/euro-star.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/falling-beep.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/flasher.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/flowchart.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/fluteyopen.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/foscil.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/friendlypad.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/gravity.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/green-world.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/hello-kitty.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/hello-kitty2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/hi-popclick.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/hornstabber.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/insectoid.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/inside-out.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lo-popclick.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lowstaberbreathe.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lunar-landing.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lunar-orbit-1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lunar-orbit-2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lusherdrone.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/lushopen.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/marshimmer.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mechanix-1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mechanix-2.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mechanix-3.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mechanix-4.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mellow-yellow.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/metalfolderopen.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/microbes.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/mission-control.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/moon-glow.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/moon-sprout.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/moonrise.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/nebula-1.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/noodle-factory.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/oil-fone.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/orbital.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/particle-spray.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/phazer.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/purple-sphere.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/push-thru.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/quazar.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/raygun.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/ring-cloud.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/silver-sphere.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/soft-insertion.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/soft-selection.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/solar-flare.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/space-junk.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/space-legs.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/splunk.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/square-beep.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/success.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/swish-42.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/synthtoggler.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/terraform.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/tickermove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/tranquility-base.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/venus-clave.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/venus-probe.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/warbler.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/womperhit.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/sonic-icons/zoopover.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/ah-ha.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/big-entrance.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/cafe.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/colossus.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/corp-tag.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/crickets-loop.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/ethnik.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/evening-star.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/glimmer.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/grab-em.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/kule-guy.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/monkey.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/nature.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/number-one.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/ocean.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/piano.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/profile.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/subtle.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/swing-up.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/stingers/techy.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/aerialize-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/aerialize-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bleulight-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bleulight-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bleulight-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bleulight.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/blue-fog-full-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/blue-fog-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/blue-fog-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bugbreaker-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bugbreaker-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/bugbreaker-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/chop-squad-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/chop-squad-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/chop-squad-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/frenitian-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/frenitian-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/frenitian-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/irradiator-full-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/irradiator-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/irradiator-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/irradiator-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/obliquia-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/obliquia-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/polyzoot-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/polyzoot.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/renegado-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/renegado-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/renegado-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/seethroo-full-alt.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/seethroo-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/seethroo-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/the-future-is.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/tripwire-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/tripwire-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/vampster.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/underground/windows-everywhere.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-groove01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-groove02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-solo.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/groovedeux-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hardtek-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/hi-tech-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/index.html" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-groove01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-groove02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-groove03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/jetset-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/kraftytechy-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/man-o-war-w-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-flourish04.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-full-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/popster-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-samples.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-short01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/schizo-trance-short02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-flourish04.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-groove.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/synchotronic-short.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-flourish01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-flourish02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-flourish03.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-full.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-groove01.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-groove02.rmf" + }, + { + "file": "file://Disk/Music/headspace/RMF/upbeat/tropicalist-w-samples.rmf" + }, + { + "file": "file://Disk/Music/karaoke/images/europe00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/europe04.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/flower00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/flower01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/france03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar0.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar1.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar10.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar11.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar12.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar13.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar14.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar15.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar16.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar17.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar18.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar19.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar2.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar20.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar21.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar22.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar23.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar24.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar25.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar26.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar27.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar28.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar29.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar3.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/kar4.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape04.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/landscape05.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/mountain03.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/sunset02.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/tree01.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/water.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/waterfall00.jpg" + }, + { + "file": "file://Disk/Music/karaoke/images/wfish.jpg" + }, + { + "file": "file://Disk/Music/midi/Bogged.mid" + }, + { + "file": "file://Disk/Music/midi/Bogged2.mid" + }, + { + "file": "file://Disk/Music/midi/Brasilia.mid" + }, + { + "file": "file://Disk/Music/midi/Busy.mid" + }, + { + "file": "file://Disk/Music/midi/CantWait.mid" + }, + { + "file": "file://Disk/Music/midi/Catamran.mid" + }, + { + "file": "file://Disk/Music/midi/ComeInn.mid" + }, + { + "file": "file://Disk/Music/midi/CoolShad.mid" + }, + { + "file": "file://Disk/Music/midi/Dancing.mid" + }, + { + "file": "file://Disk/Music/midi/DarkGame.mid" + }, + { + "file": "file://Disk/Music/midi/DeerXing.mid" + }, + { + "file": "file://Disk/Music/midi/Downtown.mid" + }, + { + "file": "file://Disk/Music/midi/Fever.mid" + }, + { + "file": "file://Disk/Music/midi/Flutey.mid" + }, + { + "file": "file://Disk/Music/midi/Flutter.mid" + }, + { + "file": "file://Disk/Music/midi/Georgy.mid" + }, + { + "file": "file://Disk/Music/midi/GetBy.mid" + }, + { + "file": "file://Disk/Music/midi/Glasses.mid" + }, + { + "file": "file://Disk/Music/midi/Harry.mid" + }, + { + "file": "file://Disk/Music/midi/Herbie.mid" + }, + { + "file": "file://Disk/Music/midi/HomeAgn.mid" + }, + { + "file": "file://Disk/Music/midi/Huffin.mid" + }, + { + "file": "file://Disk/Music/midi/index.html" + }, + { + "file": "file://Disk/Music/midi/Jazzin.mid" + }, + { + "file": "file://Disk/Music/midi/Jimi.mid" + }, + { + "file": "file://Disk/Music/midi/JiveJava.mid" + }, + { + "file": "file://Disk/Music/midi/JustBlue.mid" + }, + { + "file": "file://Disk/Music/midi/LizLarry.mid" + }, + { + "file": "file://Disk/Music/midi/Midterm.mid" + }, + { + "file": "file://Disk/Music/midi/Missin.mid" + }, + { + "file": "file://Disk/Music/midi/Moorea.mid" + }, + { + "file": "file://Disk/Music/midi/MoveOver.mid" + }, + { + "file": "file://Disk/Music/midi/NiteFunk.mid" + }, + { + "file": "file://Disk/Music/midi/OnBoogie.mid" + }, + { + "file": "file://Disk/Music/midi/OnFire.mid" + }, + { + "file": "file://Disk/Music/midi/ParkIt.mid" + }, + { + "file": "file://Disk/Music/midi/ParkWalk.mid" + }, + { + "file": "file://Disk/Music/midi/PCH.mid" + }, + { + "file": "file://Disk/Music/midi/PianoJz1.mid" + }, + { + "file": "file://Disk/Music/midi/PianoJz2.mid" + }, + { + "file": "file://Disk/Music/midi/Prezo.mid" + }, + { + "file": "file://Disk/Music/midi/Prussian.mid" + }, + { + "file": "file://Disk/Music/midi/Pundit.mid" + }, + { + "file": "file://Disk/Music/midi/RickPunk.mid" + }, + { + "file": "file://Disk/Music/midi/Road.mid" + }, + { + "file": "file://Disk/Music/midi/Saunter.mid" + }, + { + "file": "file://Disk/Music/midi/ShadowMe.mid" + }, + { + "file": "file://Disk/Music/midi/Shre.mid" + }, + { + "file": "file://Disk/Music/midi/SlowDay.mid" + }, + { + "file": "file://Disk/Music/midi/SoGrand.mid" + }, + { + "file": "file://Disk/Music/midi/StarDanc.mid" + }, + { + "file": "file://Disk/Music/midi/Stubborn.mid" + }, + { + "file": "file://Disk/Music/midi/Surge.mid" + }, + { + "file": "file://Disk/Music/midi/Swang.mid" + }, + { + "file": "file://Disk/Music/midi/SwingSet.mid" + }, + { + "file": "file://Disk/Music/midi/TastyWav.mid" + }, + { + "file": "file://Disk/Music/midi/TheGirl.mid" + }, + { + "file": "file://Disk/Music/midi/Theme.mid" + }, + { + "file": "file://Disk/Music/midi/Think.mid" + }, + { + "file": "file://Disk/Music/midi/Travel.mid" + }, + { + "file": "file://Disk/Music/midi/Tumbling.mid" + }, + { + "file": "file://Disk/Music/midi/Under.mid" + }, + { + "file": "file://Disk/Music/midi/Upping.mid" + }, + { + "file": "file://Disk/Music/midi/Wind1.mid" + }, + { + "file": "file://Disk/Music/midi/Xess.mid" + }, + { + "file": "file://Disk/Music/mod/128k.xm" + }, + { + "file": "file://Disk/Music/mod/as-chord.mod" + }, + { + "file": "file://Disk/Music/mod/as-dream.mod" + }, + { + "file": "file://Disk/Music/mod/as-even.mod" + }, + { + "file": "file://Disk/Music/mod/as-night.mod" + }, + { + "file": "file://Disk/Music/mod/as-seasd.mod" + }, + { + "file": "file://Disk/Music/mod/as-sound.mod" + }, + { + "file": "file://Disk/Music/mod/as-upstr.mod" + }, + { + "file": "file://Disk/Music/mod/as-wintr.mod" + }, + { + "file": "file://Disk/Music/mod/bells.xm" + }, + { + "file": "file://Disk/Music/mod/bouncin.xm" + }, + { + "file": "file://Disk/Music/mod/chordF.mod" + }, + { + "file": "file://Disk/Music/mod/consolid.xm" + }, + { + "file": "file://Disk/Music/mod/dream.mod" + }, + { + "file": "file://Disk/Music/mod/evening.mod" + }, + { + "file": "file://Disk/Music/mod/freedom.xm" + }, + { + "file": "file://Disk/Music/mod/index.html" + }, + { + "file": "file://Disk/Music/mod/jammin.xm" + }, + { + "file": "file://Disk/Music/mod/la-cnsld.xm" + }, + { + "file": "file://Disk/Music/mod/la-dung.mod" + }, + { + "file": "file://Disk/Music/mod/la-farew.mod" + }, + { + "file": "file://Disk/Music/mod/la-flake.xm" + }, + { + "file": "file://Disk/Music/mod/la-illus.xm" + }, + { + "file": "file://Disk/Music/mod/la-medal.mod" + }, + { + "file": "file://Disk/Music/mod/la-ramba.mod" + }, + { + "file": "file://Disk/Music/mod/la-romnc.xm" + }, + { + "file": "file://Disk/Music/mod/la-vast.xm" + }, + { + "file": "file://Disk/Music/mod/mg-128k.xm" + }, + { + "file": "file://Disk/Music/mod/mg-acous.xm" + }, + { + "file": "file://Disk/Music/mod/mg-bells.xm" + }, + { + "file": "file://Disk/Music/mod/mg-bounc.xm" + }, + { + "file": "file://Disk/Music/mod/mg-free.xm" + }, + { + "file": "file://Disk/Music/mod/mg-jamn.xm" + }, + { + "file": "file://Disk/Music/mod/mg-melod.xm" + }, + { + "file": "file://Disk/Music/mod/mg-mount.xm" + }, + { + "file": "file://Disk/Music/mod/mg-piano.xm" + }, + { + "file": "file://Disk/Music/mod/mg-rain.xm" + }, + { + "file": "file://Disk/Music/mod/mg-rav95.xm" + }, + { + "file": "file://Disk/Music/mod/mg-xmasr.xm" + }, + { + "file": "file://Disk/Music/mod/ms-4you.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-beat.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-fire.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-news.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-scrm.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-still.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-tranc.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-virt.s3m" + }, + { + "file": "file://Disk/Music/mod/ms-way.s3m" + }, + { + "file": "file://Disk/Music/mod/nitetime.mod" + }, + { + "file": "file://Disk/Music/mod/oldpiano.xm" + }, + { + "file": "file://Disk/Music/mod/rave95.xm" + }, + { + "file": "file://Disk/Music/mod/seaside.mod" + }, + { + "file": "file://Disk/Music/mod/snowflak.xm" + }, + { + "file": "file://Disk/Music/mod/sounds.mod" + }, + { + "file": "file://Disk/Music/mod/ta-cafe.xm" + }, + { + "file": "file://Disk/Music/mod/ta-drift.xm" + }, + { + "file": "file://Disk/Music/mod/ta-first.xm" + }, + { + "file": "file://Disk/Music/mod/ta-leave.xm" + }, + { + "file": "file://Disk/Music/mod/ta-lifel.xm" + }, + { + "file": "file://Disk/Music/mod/ta-musq.xm" + }, + { + "file": "file://Disk/Music/mod/ta-nerv.xm" + }, + { + "file": "file://Disk/Music/mod/ta-sky.xm" + }, + { + "file": "file://Disk/Music/mod/ta-soft.xm" + }, + { + "file": "file://Disk/Music/mod/ta-welcm.xm" + }, + { + "file": "file://Disk/Music/mod/upstream.mod" + }, + { + "file": "file://Disk/Music/mod/vastness.xm" + }, + { + "file": "file://Disk/Music/mod/winter.mod" + }, + { + "file": "file://Disk/Music/mod/xmasrave.xm" + } + ] + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/delete-group.js b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/delete-group.js deleted file mode 100644 index 1b3d42ae..00000000 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/delete-group.js +++ /dev/null @@ -1,49 +0,0 @@ -var minisrv_service_file = true; - -if (request_headers.query.group) { - const WTVDownloadList = require("./WTVDownloadList.js"); - var wtvdl = new WTVDownloadList(minisrv_config, service_name); - if (request_headers['wtv-request-type']) { - headers = "200 OK\nContent-Type: " + wtvdl.content_type; - wtvdl.deleteGroup(request_headers.query.group); - wtvdl.deleteGroupUpdate(request_headers.query.group); - data = wtvdl.getDownloadList(); - } - var title = "Deleting group" - var message = title + " " + request_headers.query.group; - headers = "200 OK\nContent-Type: text/html" - data = wtvdl.getSyncPage(title, request_headers.query.group, "delete", message, message, null, null, "client:goback", "client:goback", "wtv-disk:/delete-group"); -} else { - headers = "200 OK\nContent-Type: text/html" - data = ` - - -Delete a DiskMap Group - - -
      - - -
      -
        -`; - var groups = [ - "HackTV", - "HackTV-Base", - "HackTV-Music", - "FREEDOOM", - "Doom", - "DealerDemo", - "Modem_Firmware", - "MAME", - "zefie" - ] - groups.forEach(function (group) { - data += "
      • Delete Group \"" + group + "\"
      • \n"; - }) - data += ` -
      - - -` -} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js index c8ef1c13..2f4386cd 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/sync.js @@ -1,7 +1,7 @@ var minisrv_service_file = true; -const WTVDownloadList = require("./WTVDownloadList.js"); -var wtvdl = new WTVDownloadList(minisrv_config, service_name); +var diskmap = Object.getCaseInsensitiveKey(request_headers.query, "DiskMap"); +var wtvdl = new WTVDisk(minisrv_config, service_name); var force_update = (request_headers.query.force == "true") ? true : false; var no_delete = (request_headers.query.dont_delete_files == "true") ? true : false; @@ -23,8 +23,6 @@ if (request_headers['wtv-request-type'] == 'download') { wtvdl.execute(diskmap_group_data.execute_start); } - console.log(diskmap_group_data.client_group_data); - // delete groups if force, or group is invalid if (diskmap_group_data.client_group_data) { if (force_update || diskmap_group_data.client_group_data.state == "invalid") { @@ -209,7 +207,7 @@ if (request_headers['wtv-request-type'] == 'download') { var wtv_download_list = new Array(); var newest_file_epoch = version; Object.keys(diskmap_group_data.files).forEach(function (k) { - if (!diskmap_group_data.files[k].location) diskmap_group_data.files[k].location = wtvshared.makeSafePath(diskmap_group_data.location,diskmap_group_data.files[k].file.replace(diskmap_group_data.base, "")); + if (!diskmap_group_data.files[k].location) diskmap_group_data.files[k].location = wtvshared.makeSafePath(diskmap_group_data.location,diskmap_group_data.files[k].file.replace(diskmap_group_data.base, ""), true); var diskmap_data_file = null; Object.keys(service_vaults).forEach(function (g) { if (diskmap_data_file != null) return; @@ -217,34 +215,36 @@ if (request_headers['wtv-request-type'] == 'download') { if (!fs.existsSync(diskmap_data_file)) diskmap_data_file = null; }); - var diskmap_file_stat = fs.lstatSync(diskmap_data_file); - var diskmap_file_data = new Buffer.from(fs.readFileSync(diskmap_data_file, { - encoding: null, - flags: 'r' - })); - diskmap_group_data.files[k].base = diskmap_group_data.base; - diskmap_group_data.files[k].last_modified = (new Date(new Date(diskmap_file_stat.mtime).toUTCString()) / 1000); - diskmap_group_data.files[k].content_length = diskmap_file_stat.size; - diskmap_group_data.files[k].action = (diskmap_group_data.files[k].action) ? diskmap_group_data.files[k].action.toUpperCase() : "GET"; + if (diskmap_data_file) { + var diskmap_file_stat = fs.lstatSync(diskmap_data_file); + var diskmap_file_data = new Buffer.from(fs.readFileSync(diskmap_data_file, { + encoding: null, + flags: 'r' + })); + diskmap_group_data.files[k].base = diskmap_group_data.base; + diskmap_group_data.files[k].last_modified = (new Date(new Date(diskmap_file_stat.mtime).toUTCString()) / 1000); + diskmap_group_data.files[k].content_length = diskmap_file_stat.size; + diskmap_group_data.files[k].action = (diskmap_group_data.files[k].action) ? diskmap_group_data.files[k].action.toUpperCase() : "GET"; - // we need the checksum of the uncompressed data - if (wtvshared.getFileExt(diskmap_data_file).toLowerCase() == "gz") { - var gunzipped = zlib.gunzipSync(diskmap_file_data); - diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(gunzipped)).toString(CryptoJS.enc.Hex).toLowerCase(); - var gzip_fn_end = diskmap_file_data.indexOf("\0", 10); - if (!diskmap_group_data.files[k].dont_extract_filename) { - diskmap_group_data.files[k].original_filename = diskmap_file_data.toString('utf8', 10, gzip_fn_end); + // we need the checksum of the uncompressed data + if (wtvshared.getFileExt(diskmap_data_file).toLowerCase() == "gz") { + var gunzipped = zlib.gunzipSync(diskmap_file_data); + diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(gunzipped)).toString(CryptoJS.enc.Hex).toLowerCase(); + var gzip_fn_end = diskmap_file_data.indexOf("\0", 10); + if (!diskmap_group_data.files[k].dont_extract_filename) { + diskmap_group_data.files[k].original_filename = diskmap_file_data.toString('utf8', 10, gzip_fn_end); + } + diskmap_group_data.files[k].uncompressed_size = gunzipped.byteLength; + gunzipped = null; + } else { + diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(diskmap_file_data)).toString(CryptoJS.enc.Hex).toLowerCase(); } - diskmap_group_data.files[k].uncompressed_size = gunzipped.byteLength; - gunzipped = null; - } else { - diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(diskmap_file_data)).toString(CryptoJS.enc.Hex).toLowerCase(); + + if (parseInt(diskmap_group_data.files[k].last_modified) > newest_file_epoch) newest_file_epoch = parseInt(diskmap_group_data.files[k].last_modified); + + diskmap_group_data.files[k].invalid = true; + wtv_download_list.push(diskmap_group_data.files[k]); } - - if (parseInt(diskmap_group_data.files[k].last_modified) > newest_file_epoch) newest_file_epoch = parseInt(diskmap_group_data.files[k].last_modified); - - diskmap_group_data.files[k].invalid = true; - wtv_download_list.push(diskmap_group_data.files[k]); }); // check to see if client says they have this version diskmap_group_data.version = newest_file_epoch; @@ -264,11 +264,11 @@ if (request_headers['wtv-request-type'] == 'download') { return output_data; } - if (request_headers.query.diskmap && request_headers.query.group) { + if (diskmap && request_headers.query.group) { var diskmap_json_file = null; Object.keys(service_vaults).forEach(function (g) { if (diskmap_json_file != null) return; - diskmap_json_file = service_vaults[g] + "/" + service_name + "/" + diskmap_dir + request_headers.query.diskmap + ".json"; + diskmap_json_file = service_vaults[g] + "/" + service_name + "/" + diskmap_dir + diskmap + ".json"; if (!fs.existsSync(diskmap_json_file)) diskmap_json_file = null; }); @@ -285,7 +285,6 @@ if (request_headers['wtv-request-type'] == 'download') { diskmap_data = diskmap_data[request_headers.query.group]; if (!diskmap_data.location) { Object.keys(diskmap_data).forEach(function (k) { - console.log(diskmap_data[k]); if (diskmap_data[k]) { diskmap_data[k].version = (new Date(new Date(json_stats.mtime).toUTCString()) / 1000); data += processGroup(request_headers.query.group, diskmap_data[k], k, diskmap_data.version); @@ -316,9 +315,9 @@ if (request_headers['wtv-request-type'] == 'download') { data = errpage[1]; if (minisrv_config.config.debug_flags.debug) console.error(" # " + service_name + ":/sync error", "missing query arguments"); } -} else if (request_headers.query.group && request_headers.query.diskmap) { +} else if (request_headers.query.group && diskmap) { var message = request_headers.query.message || "Retrieving files..."; var main_message = request_headers.query.main_message || "Your receiver is downloading files."; - headers = "200 OK\nwtv-connection-close: close\nConnection: close\nContent-Type: text/html"; - data = wtvdl.getSyncPage(message, request_headers.query.group, request_headers.query.diskmap, main_message, message, force_update, no_delete); + headers = "200 OK\nContent-Type: text/html\nwtv-expire-all: wtv-disk:"; + data = wtvdl.getSyncPage(message, request_headers.query.group, diskmap, main_message, message, force_update, no_delete); } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/userstore.js b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/userstore.js index be483345..f257c06a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/userstore.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/userstore.js @@ -3,9 +3,9 @@ var minisrv_service_file = true; if (request_headers.post_data) { if (request_headers.query.partialPath || request_headers.query.path) { if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { - if (ssid_sessions[socket.ssid].isRegistered()) { - var result = ssid_sessions[socket.ssid].storeUserStoreFile(request_headers.query.path || request_headers.query.partialPath, new Buffer.from(request_headers.post_data.toString(CryptoJS.enc.Hex), 'hex'), request_headers.query['last-modified-seconds'] || null, (request_headers.query.no_overwrite) ? false : true); + if (session_data) { + if (session_data.isRegistered()) { + var result = session_data.storeUserStoreFile(request_headers.query.path || request_headers.query.partialPath, new Buffer.from(request_headers.post_data.toString(CryptoJS.enc.Hex), 'hex'), request_headers.query['last-modified-seconds'] || null, (request_headers.query.no_overwrite) ? false : true); if (result) { headers = "200 OK\n"; headers += "Content-Type: text/plain"; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif new file mode 100644 index 00000000..c0b028dc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif new file mode 100644 index 00000000..2f216513 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FarRightTopWithNextTab.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif new file mode 100644 index 00000000..ba0e4f81 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FavoritesBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif new file mode 100644 index 00000000..b43d9b09 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/FoldersCoverBorder.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif new file mode 100644 index 00000000..10d41b58 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftBottom.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif new file mode 100644 index 00000000..2de8a99b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddle.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif new file mode 100644 index 00000000..77a09d19 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftMiddleTabOnly.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif new file mode 100644 index 00000000..5689eed9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif new file mode 100644 index 00000000..f0bb48d1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/LeftTopWithPreviousTab.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif new file mode 100644 index 00000000..9afd24d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/MiddleTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightBottom.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightBottom.gif new file mode 100644 index 00000000..0d13a92e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightBottom.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif new file mode 100644 index 00000000..e185e1d7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddle.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddleEdgeOnly.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddleEdgeOnly.gif new file mode 100644 index 00000000..9c8e57b9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightMiddleEdgeOnly.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif new file mode 100644 index 00000000..71fa0feb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif new file mode 100644 index 00000000..c71f2113 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopEdgeOnly.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif new file mode 100644 index 00000000..21e8db42 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/RightTopMost.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/WebTVLogoJewel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/WebTVLogoJewel.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/WebTVLogoJewel.gif rename to zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/WebTVLogoJewel.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif new file mode 100644 index 00000000..8a1c5656 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/ROMCache/fkey.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js new file mode 100644 index 00000000..7ae5064b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/add.js @@ -0,0 +1,138 @@ +var minisrv_service_file = true; +var request_is_async = true; + +var max_redirects = 3; +var redirects = 0; + +function hex_to_ascii(POST) + { + var hex = POST.toString(); + var str = ''; + for (var n = 0; n < hex.length; n += 2) { + str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); + } + return str; +} +if (request_headers.post_data) { + var POST = request_headers.post_data; + var image = hex_to_ascii(POST); +} + +function getTitle(url) { + return new Promise(function (resolve, reject) { + var page_title = "Web Page"; + var request_type = (url.substring(0, 5) == "https") ? "https" : "http"; + var proxy_agent = null; + switch (request_type) { + case "https": + var proxy_agent = require('https'); + break; + case "http": + var proxy_agent = require('http');; + break; + } + if (proxy_agent) { + var options = { + method: 'GET' + } + const request = proxy_agent.get(url, options, (response) => { + let req_data = ''; + if (response.statusCode == 301 || response.statusCode == 302) { + redirects++; + if (redirects < max_redirects) resolve(getTitle(response.headers.location)); + else reject(`Too many redirects. Max: ${max_redirects}, Current: ${redirects}`); + } + response.on('data', (chunk) => { + req_data += chunk.toString(); + }); + + response.on('end', () => { + let match = req_data.match(/([^<]*)<\/title>/) // regular expression to parse contents of the <title> tag + if (match && typeof match[1] === 'string') page_title = match[1]; + resolve(page_title); + }); + }); + + request.on('error', (error) => { + console.log(' *** Error getting title for wtv-favorite', error); + reject(); + }); + } + }); +} + +async function saveFavorite(favstore, title, folder, imagetype, favurl) { + var headers, data = ''; + if (!favstore.favstoreExists()) { + // create favstore if the user hasn't already navigated to favorites + favstore.createFavstore(); + } + if (favstore.favstoreExists()) { + var default_folder = "Personal"; // default to "Personal" + var favoritenum = 0; + + if (!folder) folder = default_folder; + if (!favstore.folderExists(folder)) { + // user did not define a folder, and the default folder does not exist + // so choose the user's first available folder + var favfolders = favstore.getFolders(); + if (favfolders.length > 0) folder = favfolders[0]; + } + if (!folder) { + // user has no folders, forcefully recreate "Personal" + folder = default_folder; + favstore.createTemplateFolder(folder); + } + + var favarray = favstore.listFavorites(folder); + favoritenum = Object.keys(favarray).length; + + + if (!title) { + try { + await getTitle(favurl).then(function (res) { + title = res; + if (!minisrv_config.config.debug_flags.quiet) console.log(" * Client sent favorite-url without title, got title:", title); + }); + } catch (e) { + console.error(" * Error: Client sent favorite-url without title, and we could not get the title from the server:", e); + } + } + + if (!image) { + imagetype = "url"; + image = "canned/favorite_default.gif" + } + + if (favoritenum == minisrv_config.services[service_name].max_favorites_per_folder) { + headers = `400 You can only have ${minisrv_config.services[service_name].max_favorites_per_folder} favorites in a folder. Discard some favorites or choose a different folder, then try again.` + } else { + + var createresult = favstore.createFavorite(title, favurl, folder, image, imagetype); + if (!createresult) { // true if fail + headers = `200 OK +wtv-expire: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` + } else { + var err = wtvshared.doErrorPage(500); + headers = err[0]; + data = err[1]; + } + + sendToClient(socket, headers, data); + } + } else { + var err = wtvshared.doErrorPage(500); + headers = err[0]; + data = err[1]; + sendToClient(socket, headers, data); + } +} + + +var title = request_headers.query['favorite-title']; +var folder = request_headers.query['favorite-category']; +if (folder) folder = folder.replaceAll("+", " ") +var imagetype = request_headers.query['favorite-thumbnail-type'] +var favurl = request_headers.query['favorite-url']; + +saveFavorite(session_data.favstore, title, folder, imagetype, favurl); \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif new file mode 100644 index 00000000..fbb4ac23 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/90s.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif new file mode 100644 index 00000000..cf284b8c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Music.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/RetroSite.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/RetroSite.gif new file mode 100644 index 00000000..2676b135 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/RetroSite.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Thumbs.db b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Thumbs.db new file mode 100644 index 00000000..0ed66e9e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/Thumbs.db differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/favorite_default.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/favorite_default.gif new file mode 100644 index 00000000..66fa3184 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/favorite_default.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/funlover.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/funlover.gif new file mode 100644 index 00000000..a53e5a64 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/funlover.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/halen.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/halen.gif new file mode 100644 index 00000000..140342fa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/halen.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif new file mode 100644 index 00000000..696ad5f5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/amazon.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/barnesandnoble.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/barnesandnoble.gif new file mode 100644 index 00000000..d5d0ade9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/barnesandnoble.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif new file mode 100644 index 00000000..1fe4d446 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/chicago_tribune.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ctt-wtv.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ctt-wtv.gif new file mode 100644 index 00000000..4c1a4abc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ctt-wtv.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/discovery.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/discovery.gif new file mode 100644 index 00000000..86f80d5c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/discovery.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/e_online.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/e_online.gif new file mode 100644 index 00000000..e746c3ab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/e_online.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif new file mode 100644 index 00000000..67eba7d6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/la_times.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif new file mode 100644 index 00000000..f7882a39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/msnbc.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ny_times.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ny_times.gif new file mode 100644 index 00000000..0b19eec3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/ny_times.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/pbs_online.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/pbs_online.gif new file mode 100644 index 00000000..aae0e163 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/pbs_online.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif new file mode 100644 index 00000000..fd829717 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/premiere.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif new file mode 100644 index 00000000..de63abf9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/roget.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/soap-wtv.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/soap-wtv.gif new file mode 100644 index 00000000..8b330361 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/soap-wtv.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/trivialpursuit.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/trivialpursuit.gif new file mode 100644 index 00000000..b8c7541e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/trivialpursuit.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif new file mode 100644 index 00000000..809bdaa0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/images/webster.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/magnavox.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/magnavox.gif new file mode 100644 index 00000000..c40b10e5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/magnavox.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mattman69.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mattman69.gif new file mode 100644 index 00000000..3e540165 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mattman69.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif new file mode 100644 index 00000000..8cc2a059 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/midnightchannel.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif new file mode 100644 index 00000000..3e8c36e3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/mitsubishi.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/news.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/news.gif new file mode 100644 index 00000000..ce795609 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/news.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif new file mode 100644 index 00000000..2d5ae069 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldavista.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif new file mode 100644 index 00000000..a0d8e257 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/oldnet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif new file mode 100644 index 00000000..f0835e93 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/samsung.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/simulator.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/simulator.gif new file mode 100644 index 00000000..7ab6db54 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/simulator.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif new file mode 100644 index 00000000..1710d55e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif new file mode 100644 index 00000000..6b7d9638 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures_store.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures_store.gif new file mode 100644 index 00000000..0ced8f07 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/canned/sony_pictures_store.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-add-folder.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-add-folder.js new file mode 100644 index 00000000..bb440e03 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-add-folder.js @@ -0,0 +1,36 @@ +var minisrv_service_file = true; + +var foldername = request_headers.query.new_folder_name; +var favstore_exists = session_data.favstore.favstoreExists(); +var folder_exists = session_data.favstore.folderExists(foldername); +var folder_array = session_data.favstore.getFolders(); + +if (foldername) +{ + if (favstore_exists != true) + session_data.favstore.createFavstore(); + + if (folder_exists != true) + { + if (folder_array.length < minisrv_config.services[service_name].max_folders) + { + //if (session_data.favstore.checkFolderName(foldername) == true) + //{ + session_data.favstore.createFolder(foldername); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/favorite +wtv-expire-all: wtv-favorite:` + //} else { + // headers = `400 That folder name is not valid. Choose a different name and try again.` + //} + } else { + headers = `400 You can only have ${minisrv_config.services[service_name].max_folders} folders at one time. Delete some folders and try again.` + } + } else { + headers = `400 That folder already exists. Choose a different name and try again.` + } +} else { + headers = `400 Please type a folder name.` +} diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-arrange-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-arrange-favorites.js new file mode 100644 index 00000000..0acaa300 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-arrange-favorites.js @@ -0,0 +1,14 @@ +var minisrv_service_file = true; + +var with_pictures = request_headers.query.with_pictures + +if (with_pictures = "on") +{ + session_data.setSessionData("subscriber_fav_images", true) +} else { + session_data.setSessionData("subscriber_fav_images", false) +} +session_data.saveSessionData(); + +headers = `300 OK +Location: wtv-favorite:/favorite` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-favorites.js new file mode 100644 index 00000000..99f774b5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-favorites.js @@ -0,0 +1,82 @@ +var minisrv_service_file = true; +var errpage; + +var query = request_headers.query + +var discardAll = request_headers.query.DiscardAll + +if (discardAll != "Discard All") +{ +var strName, strValue ; + +for(strName in query) +{ + if (strName != "favorite_folder_name") + break; +} + +strName = strName.replaceAll("+", " "); +} +var folder = request_headers.query.favorite_folder_name; +if (request_headers.query.ForwardToBrowser) +{ + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` +} else if (strName != "getCaseInsensitiveKey") { +var favorite = session_data.favstore.getFavorite(folder, strName); + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + if (!request_headers.query.confirm_remove) { + if (discardAll == "Discard All") + { + var message = `Are you sure you want to discard all favorites in this folder?`; + var removeurl = request_headers.request_url; + removeurl += "&confirm_remove=true&DiscardAll=Discard All"; + } else { + var message = `Are you sure you want to discard <b>${favorite.title}</b>?`; + var removeurl = request_headers.request_url; + removeurl += "&confirm_remove=true"; + } + + + var confirmAlert = new clientShowAlert({ + 'message': message, + 'buttonlabel1': "Don't Remove", + 'buttonaction1': "client:donothing", + 'buttonlabel2': "Remove", + 'buttonaction2': removeurl, + 'noback': true, + }).getURL(); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${confirmAlert}` + } else { + + var gourl = `wtv-favorite:/serve-discard-favorites?favorite_folder_name=${folder}`; + if (discardAll == "Discard All") + { + session_data.favstore.clearFolder(folder); + } else { + session_data.favstore.deleteFavorite(strName, folder); + } + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${gourl}` + } +} +} else { + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js new file mode 100644 index 00000000..7a00e752 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-discard-folders.js @@ -0,0 +1,76 @@ +var minisrv_service_file = true; +var errpage; + +var query = request_headers.query +var folder_array = session_data.favstore.getFolders(); +var totalfavorites = folder_array.length; + +var strName, strValue ; + +for(strName in query) +{ + break; +} + +strName = strName.replaceAll("+", " "); + +if (request_headers.query.ForwardToFolders) +{ + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/favorite` +} else if (strName != "getCaseInsensitiveKey") { +var folder = session_data.favstore.getFolders(); +var folderdata = session_data.favstore.listFavorites(strName); +var numoffavorites = Object.keys(folderdata).length; + +if (totalfavorites == 1) { + errpage = wtvshared.doErrorPage(400, "You cannot remove your last folder."); +} + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + if (!request_headers.query.confirm_remove) { + var message = ''; + if (numoffavorites == 0) { + message = `Are you sure you want to remove <b>${strName}</b>?`; + } else { + message = `Removing <b>${strName}</b> will also remove the ${numoffavorites} favorites it contains.`; + } + var removeurl = request_headers.request_url; + removeurl += "&confirm_remove=true"; + + var confirmAlert = new clientShowAlert({ + 'message': message, + 'buttonlabel1': "Don't Remove", + 'buttonaction1': "client:donothing", + 'buttonlabel2': "Remove", + 'buttonaction2': removeurl, + 'noback': true, + }).getURL(); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${confirmAlert}` + } else { + + var gourl = "wtv-favorite:/serve-discard-folders"; + session_data.favstore.deleteFolder(strName); + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +Location: ${gourl}` + } +} +} else { + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/serve-discard-folders` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js new file mode 100644 index 00000000..a763f59a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-move-favorites.js @@ -0,0 +1,43 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var folder = request_headers.query.favorite_folder_name || null; +var favarray = session_data.favstore.listFavorites(folder); +var error_occured = false; +if (!folder) error_occured = true; +else { + favoritenum = Object.keys(favarray).length; + + if (typeof request_headers.query.favoriteid === 'string') { + // one favorite + var favid = request_headers.query.favoriteid; + var favfolder = request_headers.query.favoritefolder; + if (folder != favfolder) session_data.favstore.moveFavorite(folder, favfolder, favid); + } else { + if (request_headers.query.favoriteid.length == request_headers.query.favoritefolder.length) { + // both queries should have the same number of entries + Object.keys(request_headers.query.favoriteid).forEach(function (k) { + var favid = request_headers.query.favoriteid[k]; + var favfolder = request_headers.query.favoritefolder[k]; + if (folder != favfolder) session_data.favstore.moveFavorite(folder, favfolder, favid); + }) + } else { + error_occured = true; + } + } + + if (!error_occured) { + var gourl = `wtv-favorite:/serve-browser?favorite_folder_name=${folder}`; + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${gourl} +Location: ${gourl}` + } else { + var err = doErrorPage(500); + headers = err[0]; + data = err[1]; + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js new file mode 100644 index 00000000..6f1ea484 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-rename-favorites.js @@ -0,0 +1,94 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var folder = request_headers.query.favorite_folder_name; +var favarray = session_data.favstore.listFavorites(folder); + +favoritenum = Object.keys(favarray).length; + +for (let i = 0; i < favoritenum; i++) { + switch(i) { + case 0: + var favid = request_headers.query.favorite0id; + var favname = request_headers.query.favorite0name; + break; + case 1: + var favid = request_headers.query.favorite1id; + var favname = request_headers.query.favorite1name; + break; + case 2: + var favid = request_headers.query.favorite2id; + var favname = request_headers.query.favorite2name; + break; + case 3: + var favid = request_headers.query.favorite3id; + var favname = request_headers.query.favorite3name; + break; + case 4: + var favid = request_headers.query.favorite4id; + var favname = request_headers.query.favorite4name; + break; + case 5: + var favid = request_headers.query.favorite5id; + var favname = request_headers.query.favorite5name; + break; + case 6: + var favid = request_headers.query.favorite6id; + var favname = request_headers.query.favorite6name; + break; + case 7: + var favid = request_headers.query.favorite7id; + var favname = request_headers.query.favorite7name; + break; + case 8: + var favid = request_headers.query.favorite8id; + var favname = request_headers.query.favorite8name; + break; + case 9: + var favid = request_headers.query.favorite9id; + var favname = request_headers.query.favorite9name; + break; + case 10: + var favid = request_headers.query.favorite10id; + var favname = request_headers.query.favorite10name; + break; + case 11: + var favid = request_headers.query.favorite11id; + var favname = request_headers.query.favorite11name; + break; + case 12: + var favid = request_headers.query.favorite12id; + var favname = request_headers.query.favorite12name; + break; + case 13: + var favid = request_headers.query.favorite13id; + var favname = request_headers.query.favorite13name; + break; + case 14: + var favid = request_headers.query.favorite14id; + var favname = request_headers.query.favorite14name; + break; + case 15: + var favid = request_headers.query.favorite15id; + var favname = request_headers.query.favorite15name; + break; + case 16: + var favid = request_headers.query.favorite16id; + var favname = request_headers.query.favorite16name; + break; + case 17: + var favid = request_headers.query.favorite17id; + var favname = request_headers.query.favorite17name; + break; + } + session_data.favstore.changeFavoriteName(favid, folder, favname); +} + +var gourl = `wtv-favorite:/serve-browser?favorite_folder_name=${folder}`; + +headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite: +wtv-visit: ${gourl} +Location: ${gourl}` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js new file mode 100644 index 00000000..73bd906c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-samples-page.js @@ -0,0 +1,42 @@ +var minisrv_service_file = true; + +var totalfavorites = 0; + +var createFun = request_headers.query.Fun; +var createMoney = request_headers.query.Money; +var createMovies = request_headers.query.Movies; +var createNews = request_headers.query.News; +var createRecommended = request_headers.query.Recommended; +var createReference = request_headers.query.Reference; +var folder_array = session_data.favstore.getFolders(); +totalfavorites = folder_array.length; + +if (totalfavorites < 14) +{ + if (createFun == "true") + session_data.favstore.createTemplateFolder("Fun"); + + if (createMoney == "true") + session_data.favstore.createTemplateFolder("Money"); + + if (createMovies == "true") + session_data.favstore.createTemplateFolder("Movies"); + + if (createNews == "true") + session_data.favstore.createTemplateFolder("News"); + + if (createRecommended == "true") + session_data.favstore.createTemplateFolder("Recommended"); + console.log("FUGHFVJSGHJFDGIJUFDSHGFJDSKHJKLGFHJKHDJKHJKLGF " + createRecommended) + + if (createReference == "true") + session_data.favstore.createTemplateFolder("Reference"); + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +Location: wtv-favorite:/favorite +wtv-expire-all: wtv-favorite:` +} else { + headers = `400 You can only have 14 folders at one time. Delete some folders and try again.` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js new file mode 100644 index 00000000..093fb42f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/commit-shortcuts-favorites.js @@ -0,0 +1,9 @@ +var minisrv_service_file = true; + +var folder = request_headers.query.favorite_folder_name; +var key = request_headers.query.Choose; +var id = request_headers.query.favoriteid; + +session_data.favstore.createShortcutKey(); +session_data.favstore.updateShortcutKey("none", key, folder, id); + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js new file mode 100644 index 00000000..0098e04f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite-index.js @@ -0,0 +1,18 @@ +var minisrv_service_file = true; + +var favstore_exists = session_data.favstore.favstoreExists(); + +if (favstore_exists != true) +{ + session_data.favstore.createFavstore(); + headers = `300 OK +Location: wtv-favorite:/favorite` +} else { + +var folder_array = session_data.favstore.getFolders(); +var url = request_headers.request; +var key = url.split('?')[1] + +headers = `400 You have not assigned a favorite to ${key}` + +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js new file mode 100644 index 00000000..feadfbb1 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/favorite.js @@ -0,0 +1,267 @@ +var minisrv_service_file = true; + +var favstore_exists = session_data.favstore.favstoreExists(); + +if (favstore_exists != true) +{ + session_data.favstore.createFavstore(); + headers = `300 OK +Location: wtv-favorite:/favorite` +} else { + +var folder_array = session_data.favstore.getFolders(); +var totalfavorites = folder_array.length; +var stopdrawing = false; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-browser +wtv-expire-all: wtv-favorite:/favorite +` + + +data = `<html><head> + +<title> +Favorite folders + + + + + + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + + +
      + +
      + Add folder   +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Remove      +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Help            +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + +
      + +Favorite folders +for ${session_data.getSessionData("subscriber_username") || "You"} + +
      +
      +
      + + +
      + +
      + +
      + + + + + + +
      ` + var kval = 0; + // process evens + Object.keys(folder_array).forEach(function (k) { + if (k == 0) return; // skip 0 since it was processed above + if (parseInt(k) % 2 == 0) { + // even + // Left Middle + data += `
      + +
      + + + + + + +
      `; + kval = k; + } + }); + + // process end if total is even + if (folder_array.length > 1) { + if (folder_array.length % 2 == 0) { + data += `
      + +
      + + +
      `; + } + } + + // process middle (folder 2 (id 1)) + if (folder_array.length == 1) { + // no folder 2 + data += `
      +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      ` + } else { + // process folder 2 (id 1) + data += `
      +
      + +
      +
      +
      + +
      +
      + +
      + + + + + + +
      `; + } + + // process odds + Object.keys(folder_array).forEach(function (k) { + if (k == 1) return; // skip 1 since it was processed above + if (parseInt(k) % 2 != 0) { + // odd + // Right Middle + data += `
      + +
      + + + + + + +
      `; + } + }); + + // process end if total is odd + if (folder_array.length > 1) { + if (folder_array.length % 2 != 0) { + data += `
      + +
      + + +
      `; + } + } + + data += ` +
      +
      + +
      +
      + + + +
      +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js new file mode 100644 index 00000000..08cbaa24 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/get-thumbnail.js @@ -0,0 +1,13 @@ +var minisrv_service_file = true; + +var errpage = null; + +var id = request_headers.query.id; +var folder = request_headers.query.folder; +var favorite = session_data.favstore.getFavorite(folder, id); +if (!favorite) errpage = wtvshared.doErrorPage(400, "Invalid favorite ID"); + + + headers = `200 OK +Content-Type: ${favorite.imagetype}`; + data = new Buffer.from(favorite.image, 'base64'); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif new file mode 100644 index 00000000..19ae5703 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/checkmark.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/fkey.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/fkey.gif new file mode 100644 index 00000000..8a1c5656 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/images/fkey.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js new file mode 100644 index 00000000..5ad37958 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/list-folders.js @@ -0,0 +1,16 @@ +var minisrv_service_file = true; + +var favstore_exists = session_data.favstore.favstoreExists(); + +if (favstore_exists != true) +{ + session_data.favstore.createFavstore(); +} + +var folder_array = session_data.favstore.getFolders(); +var data = ""; + +for (let i = 0; i < folder_array.length; i++) data += folder_array[i] + "\0"; + +headers = `200 OK +Content-type: text/plain` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js new file mode 100644 index 00000000..614ac988 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-add-folder-page.js @@ -0,0 +1,125 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve- +wtv-expire-all: wtv-favorite:/favorite` + + +data = ` + + +Add a folder + + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + +
      +
      + +
      + +Add a folder + + + + +
      +
      + + + + + + +
      + +
      +
      +Type the name of the new folder you want
      +to add, and then choose Add.
      +
      + +
      +
      + +Folder name + + + + + + + + +
      +
      +
      +
      +Or choose Samples to select one or
      +more sample folders.
      +
      +
      +
      + + + + + +
      +
      +
      +
      + + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js new file mode 100644 index 00000000..5e7640a9 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-arrange-favorites.js @@ -0,0 +1,234 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + +Listing favorites + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Folders +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      + Add folder +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Help +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Listing favorites in this folder: + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + +
      +
      + + + + + + + + + + +
      + + + +
      +
      +
      + +

      Choose With pictures +to display the favorite's +pictures. +

      If With pictures is +unchecked, the +favorites will be listed +by name only. +

      + +
      + + + +
      + + + + +With pictures +
      +
      +
      +
      + +
      + + +
      + +
      + + +
      + +
      + + + + + +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js new file mode 100644 index 00000000..d1fac7f3 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-browser.js @@ -0,0 +1,237 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve- +wtv-expire-all: wtv-favorite:/favorite +` + + +data = ` + +Favorites + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Folders +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Help +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Favorites for ${session_data.getSessionData("subscriber_username") || "You"} + +
      +
      +
      + +
      +` +if (folderid !== 0) +{ + data += ` +
      + +
      + +
      +
      +` +} else { + data += ` +
      + +
      + +
      +
      +` +} +data += ` +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      +` +if (folderid !== numoffolders - 1) +{ + data += `
      +
      + + +
      +
      + +
        +
      +
      +
      +
      +
      +
      + +
      +
      ` +} else { + data += `
      +
      + + +
      +
      +
      + +
      +
      ` +} data += ` + + +
      +
      +
      +`; + +// favorite loop +Object.keys(favarray).forEach(function (k) { + var url = decodeURIComponent(favarray[k].url); + data += ` + +
      `; + if (favarray[k].imagetype == "url") + data += `
      `; + else + data += `
      `; + data += ` +
      +${favarray[k].title} +
      +
      +
      +
      `; + if ((parseInt(k) + 1) % 3 == 0) { + // every 3 objects + data += `
      + +
      +`; + } +}); + +data += ``; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js new file mode 100644 index 00000000..a4353081 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-choose-shortcut-favorites.js @@ -0,0 +1,404 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var favid = request_headers.query.favoriteid; + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + +var favoritedata = session_data.favstore.getFavorite(foldername, favid); + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Choose shortcut label + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Favorites +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Choose shortcut label +
      +
      +
      + +
      +
      + +Choose a shortcut label for ${favoritedata.title}, then choose Done below. +
      +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + +
      + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F1 + +
      +
      +
      + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F2 + +
      +
      + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F3 + +
      +
      + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F4 + +
      +
      + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F5 + +
      +
      + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F6 + +
      +
      + + + + +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +
      + +
      +
      +
      + + +Not assigned
      +
      +
      +
      + + +  F7 + +
      +
      + + + + + +
      +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + + + +
      +
      + + + + + +
      + +
      ` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js new file mode 100644 index 00000000..c05f5dac --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-favorites.js @@ -0,0 +1,228 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + +Discard favorites + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Discard favorites in this folder: + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + + + +
      +
      ` +if (favoritenum == 0) +{ + data += "   There are no favorites to discard in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
      +` +if (favarray[i].imagetype == "url") + data += `
      ` +else + data += `
      ` +data += ` +
      + +${favarray[i].title}
      + +
      + + + + + +
      + +
      +
      +
      + +
      +
      + +
      +
      +
      +

      ` +} +} +data += ` + + +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + + + +
      +
      + + + +` +if (favoritenum != 0) +{ + data += ` +` +} +data += ` + + + + + + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js new file mode 100644 index 00000000..523db003 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-discard-folders.js @@ -0,0 +1,202 @@ +var minisrv_service_file = true; + +var folder_array = session_data.favstore.getFolders(); +var totalfavorites = folder_array.length; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + +data = ` + + +Remove folders + + + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Favorites +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + +
      + +Remove folders + +
      +
      +
      +
      + + +
      + +
      + +
      + +
      + + + + + +
      +
      + +
      +
      +
      ` +for (let i = 1; i < totalfavorites; i++) { +data += `
      + +
      + +
      + + + + + +
      +
      + +
      +
      +
      ` +} +if (totalfavorites == 1) + data += `
      +
      +
      +
      +
      +
      +` +else + data += `
      + +
      +
      +
      + +
      +
      + +
      +
      + +
      + + + + +
      +
      ` +for (let i = 1; i < totalfavorites; i++) { +data += ` +
      + +
      +
      + +
      + + + + +
      +
      ` +} +data += ` +
      +
      + + +
      ` +if (totalfavorites == 1) + data += "   You cannot delete your last folder." +data += ` +
      +
      + + +
      +
      + + + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js new file mode 100644 index 00000000..fc3cc4ea --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-move-favorites.js @@ -0,0 +1,240 @@ +var minisrv_service_file = true; + +var favoritenum = 0; +var foldernum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; +foldernum = folder_array.length; + +var folderlist = `" + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + +Move favorites + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Move favorites in this folder: + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + + + +
      +
      ` +if (favoritenum == 0) +{ + data += "   There are no favorites to move in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
      +` +if (favarray[i].imagetype == "url") + data += `
      ` +else + data += `
      ` +data += ` +
      + +${favarray[i].title}
      + +
      + + +` +data += ` + + +
      + +
      +
      +
      + +
      +
      + +
      +
      +
      +

      ` +} +} +data += ` + +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + + +
      +
      + + + + + + + + + + + +
      +
      + + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js new file mode 100644 index 00000000..1595dd3f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-organize-favorites.js @@ -0,0 +1,221 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + +Organize favorites + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Folders +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      + Add folder +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Help +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Organize favorites in this folder: + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + +
      +
      + + +
      +
      + + + + + + +
      + +Discard
      +Remove unwanted favorites from this folder
      +
      + +Move to folder
      +Move favorites from this folder to another
      + +
      + + +Rename
      +Rename favorites in this folder
      + + +
      + +
      + + +
      + +
      + + +
      + +
      + + +
      + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js new file mode 100644 index 00000000..e33c02c2 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-rename-favorites.js @@ -0,0 +1,219 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + +Rename favorites + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Rename favorites in this folder: + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + + + +
      +
      ` +if (favoritenum == 0) +{ + data += "   There are no favorites to rename in this folder."; +} else { +for (let i = 0; i < favoritenum; i++) { +data += ` +
      +` +if (favarray[i].imagetype == "url") + data += `
      ` +else + data += `
      ` +data += ` +
      + + + + + + + + +
      + +
      +
      +
      + +
      +
      + +
      +
      +
      +

      ` +} +} +data += ` + + +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + + + +
      +
      + + + + + + + + + + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js new file mode 100644 index 00000000..ba26d7f5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-samples-page.js @@ -0,0 +1,272 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + + +Add sample folders + + + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Favorites +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      + +
      +
      +
      + +
      + +Add sample folders + +
      +
      +
      + +
      +
      + + +Mark the sample folders you want
      +to add, and then choose Add.
      +
      +You can remove an existing sample folder
      +by going to the folder and choosing Organize.
      +
      + +
      +
      + +
      + +
      + + +
      + + + + +
      +
      ` +if (session_data.favstore.folderExists("Fun") == true) +{ + data += ` + + + +
      + + + + Fun + +
      ` +} else { + data += ` +
      + +  Fun +` +} +if (session_data.favstore.folderExists("Money") == true) +{ + data += ` + + + +
      + + + + Money + +
      ` +} else { + data += ` +
      + +  Money +` +} data += ` + +
      ` +if (session_data.favstore.folderExists("Movies") == true) +{ + data += ` + + + +
      + + + + Movies + +
      ` +} else { + data += ` +
      + +  Movies +` +} +if (session_data.favstore.folderExists("News") == true) +{ + data += ` + + + +
      + + + + News + +
      ` +} else { + data += ` +
      + +  News +` +} +data += ` + +
      ` +if (session_data.favstore.folderExists("Recommended") == true) +{ + data += ` + + + +
      + + + + Recommended + +
      ` +} else { + data += ` +
      + +  Recommended +` +} +if (session_data.favstore.folderExists("Reference") == true) +{ + data += ` + + + +
      + + + + Reference + +
      ` +} else { + data += ` +
      + +  Reference +` +} +data += ` +
      +
      +
      +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      +
      + + + + + + +
      + +
      +
      + + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js new file mode 100644 index 00000000..6ea44797 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/serve-shortcuts-favorites.js @@ -0,0 +1,205 @@ +var minisrv_service_file = true; + +var favoritenum = 0; + +var foldername = request_headers.query.favorite_folder_name; + +var favarray = session_data.favstore.listFavorites(foldername); + +var folder_array = session_data.favstore.getFolders(); + +var folderid = folder_array.indexOf(foldername); + +var numoffolders = folder_array.length; + +favoritenum = Object.keys(favarray).length; + + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-favorite:/serve-` + + +data = ` + + + + +Assign shortcut to favorite + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + +
      +Assign shortcut to favorite + +
      +
      +
      + +
      + +
      + +
      + + + + + +
      +
      +
      + +
        +
      +
      +
      +
      +
      + + +
      +
      + +` +if (favoritenum == 0) +{ + data += "   There are no favorites to move in this folder."; +} else { + data += `To assign a keyboard shortcut to a favorite,
      +choose the button to the right of the favorite.
      +
      +
      +
      ` +for (let i = 0; i < favoritenum; i++) { + data += ` + +
      +
      +
      + +
      +
      + +
      +
      +
      + +
      + + +
      +` +if (favarray[i].imagetype == "url") + data += `
      ` +else + data += `
      ` +data += ` +
      + + +${favarray[i].title}
      +
      +
      +
      +
      + +
      + +
      + + +
      +
      +
      +
      +
      +
      +
      ` +} +} +data += ` +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + + +
      +
      + + + + + +
      +
      +
      +
      +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html new file mode 100644 index 00000000..9a7a3366 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-favorite/sony.html @@ -0,0 +1,247 @@ + + +Favorites + + + + + + + + + +
      + + +
      + + + +
      +
      + + + +
      + +
      +
      +
      + +
      +
      +
      + +
      + +
      + +
      + Folders +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + +
      + +
      + Organize +
      +
      +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + +
      + Help +
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + +
      +
      + + + +
      +Favorites for ${session_data.getSessionData("subscriber_username") || "You"} + +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      + + +
      +
      +
      + +
      +
      + + + +
      +
      +
      + + + +
      +
      + +
      +Columbia TriStar Television +
      +
      +
      +
      +
      + +
      +
      + +
      +JumpCity +
      +
      +
      +
      +
      + +
      +
      + +
      +SoapCity +
      +
      +
      +
      +
      + +
      + + + +
      +
      + +
      +Sony Electronics +
      +
      +
      +
      +
      + +
      +
      + +
      +Sony Pictures Movie Site +
      +
      +
      +
      +
      + +
      +
      + +
      +Sony Studio Store +
      +
      +
      +
      +
      + +
      + + + +
      +
      + +
      +WebSite for TV +
      +
      +
      +
      +
      + + + + +
      \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/content/content-serve.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/content/content-serve.js index 51e8d521..e0dbb27a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/content/content-serve.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/content/content-serve.js @@ -1,24 +1,22 @@ var minisrv_service_file = true; - -const WTVFlashrom = require("./WTVFlashrom.js"); request_is_async = true; var bf0app_update = false; var request_path = request_headers.request_url.replace(service_name + ":/", ""); -var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); -var bootver = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") +var romtype = session_data.get("wtv-client-rom-type"); +var bootver = session_data.get("wtv-client-bootrom-version") if ((romtype == "bf0app" || !romtype) && (bootver == "105" || !bootver)) { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode bf0app_update = true; - ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + session_data.set("bf0app_update", bf0app_update); } -if (!ssid_sessions[socket.ssid].data_store.WTVFlashrom) { - ssid_sessions[socket.ssid].data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); +if (!session_data.data_store.WTVFlashrom) { + session_data.data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); } -ssid_sessions[socket.ssid].data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { +session_data.data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { sendToClient(socket, headers, data); }); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js index dfef8bf7..af6f82d8 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js @@ -1,6 +1,6 @@ var minisrv_service_file = true; -const WTVFlashrom = require("./WTVFlashrom.js"); +const WTVFlashrom = require(classPath + "/WTVFlashrom.js"); request_is_async = true; // this build can be local or on zefie's server @@ -16,17 +16,17 @@ var bf0app_update = true; if (request_headers.query.path) request_path = request_headers.query.path; else request_path = default_build_to_send; -if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app" && ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") == "105") { +if (session_data.get("wtv-client-rom-type") == "bf0app" && session_data.get("wtv-client-bootrom-version") == "105") { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode bf0app_update = true; - ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + session_data.set("bf0app_update", bf0app_update); } -if (!ssid_sessions[socket.ssid].data_store.WTVFlashrom) { - ssid_sessions[socket.ssid].data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); +if (!session_data.data_store.WTVFlashrom) { + session_data.data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); } -ssid_sessions[socket.ssid].data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { +session_data.data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { sendToClient(socket, headers, data); }); \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js index 5063b1c7..4f480948 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js @@ -1,26 +1,26 @@ var minisrv_service_file = true; -const WTVFlashrom = require("./WTVFlashrom.js"); +const WTVFlashrom = require(classPath + "/WTVFlashrom.js"); request_is_async = true; var bf0app_update = false; var request_path = request_headers.query.path; -var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); -var bootver = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") +var romtype = session_data.get("wtv-client-rom-type"); +var bootver = session_data.get("wtv-client-bootrom-version") if ((romtype == "bf0app" || !romtype) && (bootver == "105" || !bootver)) { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode bf0app_update = true; - ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + session_data.set("bf0app_update", bf0app_update); } if (request_headers.query.raw || bf0app_update) { - if (!ssid_sessions[socket.ssid].data_store.WTVFlashrom) { - ssid_sessions[socket.ssid].data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); + if (!session_data.data_store.WTVFlashrom) { + session_data.data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); } - ssid_sessions[socket.ssid].data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { + session_data.data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { sendToClient(socket, headers, data); }); } else { diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js index 03168b7a..f4ab9230 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js @@ -1,6 +1,6 @@ var minisrv_service_file = true; -const WTVFlashrom = require("./WTVFlashrom.js"); +const WTVFlashrom = require(classPath + "/WTVFlashrom.js"); var wtvflashrom; request_is_async = true; @@ -80,9 +80,9 @@ Updating now -Your WebTV Unit is being
      updated automatically. +Your ${session_data.getBoxName()} is being
      updated automatically.

      -This will take a while, and
      then you can use your WebTV again. +This will take a while, and
      then you can use your ${session_data.getBoxName()} again. `; if (flashrom_info.is_bootrom && flashrom_info.part_number == (flashrom_info.part_count - 1)) { data += `

      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js index 65a2d25b..a757e999 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js @@ -2,7 +2,7 @@ var minisrv_service_file = true; if (request_headers.query.path) { var url = service_name + ":/get-lc2-page?path=" + request_headers.query.path; -var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); +var romtype = session_data.get("wtv-client-rom-type"); if (romtype == "bf0app") { url = "client:updateflash?ipaddr=" + minisrv_config.services[service_name].host + "&port=" + minisrv_config.services[service_name].port + "&path=" + escape(service_name + ":/" + request_headers.query.path); if (request_headers.query.numparts) url += escape("?numparts=" + request_headers.query.numparts); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js index c213f1a2..fbf033c8 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js @@ -1,8 +1,6 @@ var minisrv_service_file = true; headers = `200 OK -Connection: Close -wtv-connection-close: true Content-type: text/html` data = ` @@ -64,7 +62,7 @@ Updating complete The update is complete.

      Choose Connect Now if you
      want to connect to ${minisrv_config.config.service_name}. -

      Press the power button to switch
      off your unit. +

      Press the power button to switch
      off your ${session_data.getBoxName()}.
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js index 703b8717..8159c2a4 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js @@ -93,7 +93,7 @@ data = ` We ran into a technical problem while updating your unit. (Error: ${error}) Choose Try Again to try again now. -

      Press the power button to switch off your unit. +

      Press the power button to switch off your ${session_data.getBoxName()}. diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js index 489d9a21..d3ba940f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js @@ -1,6 +1,6 @@ var minisrv_service_file = true; -const WTVFlashrom = require("./WTVFlashrom.js"); +const WTVFlashrom = require(classPath + "/WTVFlashrom.js"); request_is_async = true; // this build can be local or on zefie's server @@ -16,17 +16,17 @@ var bf0app_update = true; if (request_headers.query.path) request_path = request_headers.query.path; else request_path = default_build_to_send; -if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app" && ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") == "105") { +if (session_data.get("wtv-client-rom-type") == "bf0app" && session_data.get("wtv-client-bootrom-version") == "105") { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode bf0app_update = true; - ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + session_data.set("bf0app_update", bf0app_update); } -if (!ssid_sessions[socket.ssid].data_store.WTVFlashrom) { - ssid_sessions[socket.ssid].data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, 0, minisrv_config.services[service_name].use_zefie_server, bf0app_update, minisrv_config.services[service_name].debug); +if (!session_data.data_store.WTVFlashrom) { + session_data.data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, 0, minisrv_config.services[service_name].use_zefie_server, bf0app_update, minisrv_config.services[service_name].debug); } -ssid_sessions[socket.ssid].data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { +session_data.data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { sendToClient(socket, headers, data); }); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/willie.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/willie.js index b3a2fcee..3fce8e98 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/willie.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/willie.js @@ -20,7 +20,7 @@ if (!minisrv_config.services[service_name].use_zefie_server) { var options = { host: "wtv.zefie.com", - path: "/willie.php?minisrv=true&service_name="+escape(service_name)+"&pflash=" + ssid_sessions[socket.ssid].get("wtv-client-rom-type") + proxy_query, + path: "/willie.php?minisrv=true&service_name="+escape(service_name)+"&pflash=" + session_data.get("wtv-client-rom-type") + proxy_query, timeout: 5000, method: 'GET' } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/AboutWebTVBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/AboutWebTVBanner.gif new file mode 100644 index 00000000..b9c5dcf7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/AboutWebTVBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Back.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Back.gif new file mode 100644 index 00000000..6b901ad9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Back.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/BigAlpha.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/BigAlpha.gif new file mode 100644 index 00000000..83c98e29 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/BigAlpha.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/BulletArrow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/BulletArrow.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/BulletArrow.gif rename to zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/BulletArrow.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CenterButton.gif new file mode 100644 index 00000000..dbc82709 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CodeSet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CodeSet.gif new file mode 100644 index 00000000..4faf5e28 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/CodeSet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/ContinueButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/ContinueButton.gif new file mode 100644 index 00000000..98e0bdfd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/ContinueButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Cursor.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Cursor.gif new file mode 100644 index 00000000..85911bb1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Cursor.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/DoneButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/DoneButton.gif new file mode 100644 index 00000000..77723ee3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/DoneButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtons.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtons.gif new file mode 100644 index 00000000..7207262f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtons.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtonsCenter.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtonsCenter.gif new file mode 100644 index 00000000..6651447b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowButtonsCenter.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowsGlow.gif new file mode 100644 index 00000000..3d2e1b8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/BackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/BackGlow.gif new file mode 100644 index 00000000..de8f8928 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/BackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/CenterButton.gif new file mode 100644 index 00000000..51899d27 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/DownArrowButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/DownArrowButton.gif new file mode 100644 index 00000000..a7df0ae1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/DownArrowButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/EchoStarRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/EchoStarRemote.gif new file mode 100644 index 00000000..76659169 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/EchoStarRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/HomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/HomeGlow.gif new file mode 100644 index 00000000..8362159d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/HomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/InfoGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/InfoGlow.gif new file mode 100644 index 00000000..cf80780d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/InfoGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ListingsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ListingsGlow.gif new file mode 100644 index 00000000..8b5166e2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ListingsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/MuteGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/MuteGlow.gif new file mode 100644 index 00000000..7e99bffd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/MuteGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/NumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/NumbersGlow.gif new file mode 100644 index 00000000..d5d09926 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/NumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/OptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/OptionsGlow.gif new file mode 100644 index 00000000..d354f215 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/OptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PipGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PipGlow.gif new file mode 100644 index 00000000..2b5ccd30 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PipGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PowerGlow.gif new file mode 100644 index 00000000..cee0d8df Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/PowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecallGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecallGlow.gif new file mode 100644 index 00000000..4fdc4d48 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecallGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecentGlow.gif new file mode 100644 index 00000000..2b6bbfe7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/RecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ScrollGlow.gif new file mode 100644 index 00000000..53a34daa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/TVVIDSwitch.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/TVVIDSwitch.gif new file mode 100644 index 00000000..02ac5946 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/TVVIDSwitch.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ViewGlow.gif new file mode 100644 index 00000000..35ac5b4a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/ViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/VolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/VolChGlow.gif new file mode 100644 index 00000000..fbd98592 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EchoStar/VolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EmptyMailbox.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EmptyMailbox.gif new file mode 100644 index 00000000..b98d4e50 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/EmptyMailbox.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Favorites.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Favorites.gif new file mode 100644 index 00000000..67372558 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Favorites.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/GuideBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/GuideBanner.gif new file mode 100644 index 00000000..7afb4658 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/GuideBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpDoneButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpDoneButton.gif new file mode 100644 index 00000000..650c66b0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpDoneButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpEmailButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpEmailButton.gif new file mode 100644 index 00000000..ac53de34 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/HelpEmailButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Home.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Home.gif new file mode 100644 index 00000000..d8102777 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Home.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/LittleRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/LittleRemote.gif new file mode 100644 index 00000000..565b3248 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/LittleRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Mitsubishi/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Mitsubishi/CenterButton.gif new file mode 100644 index 00000000..1e548bf3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Mitsubishi/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiArrowsGlow.gif new file mode 100644 index 00000000..b41fedd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiBackGlow.gif new file mode 100644 index 00000000..155a7170 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiHomeGlow.gif new file mode 100644 index 00000000..decf37b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiNumbersGlow.gif new file mode 100644 index 00000000..14c65a32 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiOptionsGlow.gif new file mode 100644 index 00000000..b22ffaea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiPowerGlow.gif new file mode 100644 index 00000000..af1a20e9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRecentGlow.gif new file mode 100644 index 00000000..a5f4ded9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRemote.gif new file mode 100644 index 00000000..1d9c83a1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiScrollGlow.gif new file mode 100644 index 00000000..e5bd899b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiViewGlow.gif new file mode 100644 index 00000000..192d6dc8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiVolChGlow.gif new file mode 100644 index 00000000..d1977b7b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/MitsubishiVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Nothing.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Nothing.gif new file mode 100644 index 00000000..8b5aecd9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Nothing.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Numbers.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Numbers.gif new file mode 100644 index 00000000..d63057e7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Numbers.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Options.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Options.gif new file mode 100644 index 00000000..25c4face Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Options.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/OptionsButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/OptionsButton.gif new file mode 100644 index 00000000..17b39ae4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/OptionsButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ArrowsGlow.gif new file mode 100644 index 00000000..c806856b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/BackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/BackGlow.gif new file mode 100644 index 00000000..38c4a0d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/BackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/CenterGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/CenterGlow.gif new file mode 100644 index 00000000..5072a5fe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/CenterGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ChannelGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ChannelGlow.gif new file mode 100644 index 00000000..4f79a337 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ChannelGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ExploreGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ExploreGlow.gif new file mode 100644 index 00000000..eaef2f2f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ExploreGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/FavoritesGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/FavoritesGlow.gif new file mode 100644 index 00000000..2be8952e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/FavoritesGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/HomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/HomeGlow.gif new file mode 100644 index 00000000..a75fa3df Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/HomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MailGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MailGlow.gif new file mode 100644 index 00000000..53a6156b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MailGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MuteGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MuteGlow.gif new file mode 100644 index 00000000..67c1cd66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/MuteGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/NumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/NumbersGlow.gif new file mode 100644 index 00000000..a544565b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/NumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/OptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/OptionsGlow.gif new file mode 100644 index 00000000..1954d34f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/OptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PhilipsPlusRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PhilipsPlusRemote.gif new file mode 100644 index 00000000..02cd5353 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PhilipsPlusRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PowerGlow.gif new file mode 100644 index 00000000..702f4fc1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/PowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/RecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/RecentGlow.gif new file mode 100644 index 00000000..397e3471 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/RecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ReloadGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ReloadGlow.gif new file mode 100644 index 00000000..99c40d31 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ReloadGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ScrollGlow.gif new file mode 100644 index 00000000..5b2f3727 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVGlow.gif new file mode 100644 index 00000000..7d41f77d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVVideoGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVVideoGlow.gif new file mode 100644 index 00000000..7a229c36 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/TVVideoGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ViewGlow.gif new file mode 100644 index 00000000..afa117d0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/ViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/VolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/VolChGlow.gif new file mode 100644 index 00000000..463ffd53 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus-Remote/VolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus/CenterButton.gif new file mode 100644 index 00000000..311f6022 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips-Plus/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips/CenterButton.gif new file mode 100644 index 00000000..b53df9cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Philips/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsArrowsGlow.gif new file mode 100644 index 00000000..2c1c107b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsBackGlow.gif new file mode 100644 index 00000000..bd644dfe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsCenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsCenterButton.gif new file mode 100644 index 00000000..b53df9cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsCenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsFavoritesGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsFavoritesGlow.gif new file mode 100644 index 00000000..8cab864b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsFavoritesGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsHomeGlow.gif new file mode 100644 index 00000000..ea387091 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsOptionsGlow.gif new file mode 100644 index 00000000..f6544562 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsPowerGlow.gif new file mode 100644 index 00000000..d030daae Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRecentGlow.gif new file mode 100644 index 00000000..f4c79e68 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRemote.gif new file mode 100644 index 00000000..5cc22918 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsScrollGlow.gif new file mode 100644 index 00000000..084d1ad7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsSearchGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsSearchGlow.gif new file mode 100644 index 00000000..0d273b1c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsSearchGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsTVWebGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsTVWebGlow.gif new file mode 100644 index 00000000..1d88a188 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/PhilipsTVWebGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Recent.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Recent.gif new file mode 100644 index 00000000..5493e95b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Recent.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Rule.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Rule.gif new file mode 100644 index 00000000..ff0191d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Rule.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/RuleLeftEnd.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/RuleLeftEnd.gif new file mode 100644 index 00000000..86696005 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/RuleLeftEnd.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SampleGreeting.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SampleGreeting.gif new file mode 100644 index 00000000..c58d06b1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SampleGreeting.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Samsung/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Samsung/CenterButton.gif new file mode 100644 index 00000000..1e548bf3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Samsung/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungArrowsGlow.gif new file mode 100644 index 00000000..b41fedd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungBackGlow.gif new file mode 100644 index 00000000..155a7170 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungHomeGlow.gif new file mode 100644 index 00000000..decf37b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungNumbersGlow.gif new file mode 100644 index 00000000..14c65a32 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungOptionsGlow.gif new file mode 100644 index 00000000..b22ffaea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungPowerGlow.gif new file mode 100644 index 00000000..af1a20e9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRecentGlow.gif new file mode 100644 index 00000000..a5f4ded9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRemote.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRemote.jpg new file mode 100644 index 00000000..9efbefc2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungRemote.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungScrollGlow.gif new file mode 100644 index 00000000..e5bd899b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungViewGlow.gif new file mode 100644 index 00000000..192d6dc8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungVolChGlow.gif new file mode 100644 index 00000000..d1977b7b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SamsungVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Scroll.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Scroll.gif new file mode 100644 index 00000000..4b726f01 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Scroll.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Searching.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Searching.gif new file mode 100644 index 00000000..fda7cfa6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Searching.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Signature.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Signature.gif new file mode 100644 index 00000000..66e508ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Signature.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SmallAlpha.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SmallAlpha.gif new file mode 100644 index 00000000..717d863a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SmallAlpha.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusRemote.gif new file mode 100644 index 00000000..70596a3a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusViewGlow.gif new file mode 100644 index 00000000..50b4525c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony-Plus/SonyPlusViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony/CenterButton.gif new file mode 100644 index 00000000..d6863624 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Sony/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyArrowsGlow.gif new file mode 100644 index 00000000..7b97f06e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyBackGlow.gif new file mode 100644 index 00000000..b7e06dab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyCodeSetGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyCodeSetGlow.gif new file mode 100644 index 00000000..c9036618 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyCodeSetGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyHomeGlow.gif new file mode 100644 index 00000000..7a8d86cd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyNumbersGlow.gif new file mode 100644 index 00000000..0ae6221e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyOptionsGlow.gif new file mode 100644 index 00000000..b7959dff Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyPowerGlow.gif new file mode 100644 index 00000000..f9c7d415 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRecentGlow.gif new file mode 100644 index 00000000..2193853a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRemote.gif new file mode 100644 index 00000000..8133bcf8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyScrollGlow.gif new file mode 100644 index 00000000..4015f93c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyViewGlow.gif new file mode 100644 index 00000000..c5976e8d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyVolChGlow.gif new file mode 100644 index 00000000..d3dc5603 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/SonyVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Spacer.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Spacer.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/Spacer.gif rename to zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Spacer.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Steps.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Steps.gif new file mode 100644 index 00000000..38aeb811 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Steps.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/UsingWebTVBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/UsingWebTVBanner.gif new file mode 100644 index 00000000..52dc1e69 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/UsingWebTVBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/VolCh.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/VolCh.gif new file mode 100644 index 00000000..7caa0d07 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/VolCh.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet1.gif new file mode 100644 index 00000000..bfc8b0a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet1.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet2.gif new file mode 100644 index 00000000..3ec0fc8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/Wallet2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/WebTV/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/WebTV/CenterButton.gif new file mode 100644 index 00000000..d6863624 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/WebTV/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/YellowPixel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/YellowPixel.gif new file mode 100644 index 00000000..198d7695 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/YellowPixel.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/AccountBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/YourAccountBanner.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-setup/ROMCache/AccountBanner.gif rename to zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/YourAccountBanner.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/btn.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/btn.gif new file mode 100644 index 00000000..461e31e2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/btn.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cbot.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cbot.gif new file mode 100644 index 00000000..e842b55b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cbot.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cfront.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cfront.gif new file mode 100644 index 00000000..2651edd7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/cfront.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/contro.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/contro.gif new file mode 100644 index 00000000..d840e61e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/contro.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/account.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/account.jpg new file mode 100644 index 00000000..9a94097b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/account.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-account.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-account.jpg new file mode 100644 index 00000000..f1fff5c7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-account.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-settings.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-settings.jpg new file mode 100644 index 00000000..3064019a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-settings.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-center.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-center.jpg new file mode 100644 index 00000000..e14667a2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-center.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-links.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-links.jpg new file mode 100644 index 00000000..c118040d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome-links.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome.jpg new file mode 100644 index 00000000..ff206246 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/classic-webhome.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/grungeTourBg.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/grungeTourBg.swf new file mode 100644 index 00000000..ec2142b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/grungeTourBg.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/help.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/help.jpg new file mode 100644 index 00000000..b3162db0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/help.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/news.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/news.jpg new file mode 100644 index 00000000..04afd886 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/news.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/page-builder.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/page-builder.jpg new file mode 100644 index 00000000..a96a9ed1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/page-builder.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-text.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-text.jpg new file mode 100644 index 00000000..1e59d68c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-text.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-things.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-things.jpg new file mode 100644 index 00000000..8284840a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search-things.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search.jpg new file mode 100644 index 00000000..aaebb140 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/search.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/settings.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/settings.jpg new file mode 100644 index 00000000..5ef14949 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/settings.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/shopping.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/shopping.jpg new file mode 100644 index 00000000..2873ea1e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/shopping.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/test.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/test.gif new file mode 100644 index 00000000..2eadfe39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/test.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-center.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-center.jpg new file mode 100644 index 00000000..f0bce1de Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-center.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-links.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-links.jpg new file mode 100644 index 00000000..37d32485 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome-links.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome.jpg new file mode 100644 index 00000000..83db222b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/grungeIntro/webhome.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-metered.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-metered.jpg new file mode 100644 index 00000000..0bffb0f9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-metered.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-msn.jpg new file mode 100644 index 00000000..6bf8ad2a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main.gif new file mode 100644 index 00000000..36956a26 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/account-main.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period-msn.jpg new file mode 100644 index 00000000..a887885e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period.jpg new file mode 100644 index 00000000..e3dd05c8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-detailed-period.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main-msn.jpg new file mode 100644 index 00000000..ab38b671 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main.jpg new file mode 100644 index 00000000..63b3e51e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-main.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user-msn.jpg new file mode 100644 index 00000000..28ec8f38 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user.jpg new file mode 100644 index 00000000..2948f5cc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/metered-user.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/user-info.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/user-info.gif new file mode 100644 index 00000000..d5fad3f5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/user-info.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/webtv-users.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/webtv-users.gif new file mode 100644 index 00000000..33294a2d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/account/webtv-users.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDL.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDL.gif new file mode 100644 index 00000000..f0b23131 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDL.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDR.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDR.gif new file mode 100644 index 00000000..54f403be Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowDR.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUL.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUL.gif new file mode 100644 index 00000000..d216974c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUL.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUR.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUR.gif new file mode 100644 index 00000000..db06cf85 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/arrowUR.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video.gif new file mode 100644 index 00000000..1d475dc7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video2.gif new file mode 100644 index 00000000..65893860 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/audio-video2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/coaxial.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/coaxial.gif new file mode 100644 index 00000000..50ccbff2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/coaxial.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpBannerImage.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpBannerImage.gif new file mode 100644 index 00000000..bc833e80 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpBannerImage.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMasthead.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMasthead.swf new file mode 100644 index 00000000..a29fa44a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMasthead.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMastheadBlank.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMastheadBlank.swf new file mode 100644 index 00000000..3bb8bbca Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/helpMastheadBlank.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less.gif new file mode 100644 index 00000000..79f5f015 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less_dim.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less_dim.gif new file mode 100644 index 00000000..402c00c3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/less_dim.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/microphone.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/microphone.gif new file mode 100644 index 00000000..08144548 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/microphone.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more.gif new file mode 100644 index 00000000..911d9218 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more_dim.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more_dim.gif new file mode 100644 index 00000000..806f423d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/help/common/more_dim.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/helpMasthead.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/helpMasthead.swf new file mode 100644 index 00000000..a29fa44a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/helpMasthead.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_delete.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_delete.gif new file mode 100644 index 00000000..110fdf82 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_delete.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_forward.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_forward.gif new file mode 100644 index 00000000..008d238e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_forward.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_reply.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_reply.gif new file mode 100644 index 00000000..2c82d599 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_reply.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_save.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_save.gif new file mode 100644 index 00000000..3c0109c3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_save.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_send.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_send.gif new file mode 100644 index 00000000..5e88014e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/mail_send.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/marketplace.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/marketplace.gif new file mode 100644 index 00000000..c2fe24cc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/marketplace.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/network.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/network.gif new file mode 100644 index 00000000..7ce3a4c4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/network.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/power-highlight.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/power-highlight.gif new file mode 100644 index 00000000..83702783 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/power-highlight.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/ComingA_logo.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/ComingA_logo.jpg new file mode 100644 index 00000000..301d43f3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/ComingA_logo.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_Banner.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_Banner.swf new file mode 100644 index 00000000..e136bb95 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_Banner.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_mRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_mRemote.gif new file mode 100644 index 00000000..52898a11 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/QH_mRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TVCrossover.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TVCrossover.gif new file mode 100644 index 00000000..0a2899a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TVCrossover.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow.gif new file mode 100644 index 00000000..919d1e4e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow2.gif new file mode 100644 index 00000000..e5308175 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/TopicArrow2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet1.gif new file mode 100644 index 00000000..501bc3d7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet1.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet2.gif new file mode 100644 index 00000000..0ab61a9c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/bullet2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/tocBullet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/tocBullet.gif new file mode 100644 index 00000000..b9f3f3f2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/tocBullet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleBlk.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleBlk.gif new file mode 100644 index 00000000..4d738d00 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleBlk.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleWht.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleWht.gif new file mode 100644 index 00000000..0ab61a9c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/quickhelp/triangleWht.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-bottom-half.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-bottom-half.jpg new file mode 100644 index 00000000..20a1a1b3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-bottom-half.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-top-half.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-top-half.jpg new file mode 100644 index 00000000..0b57af77 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote-top-half.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote_sec.1b.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote_sec.1b.jpg new file mode 100644 index 00000000..21789cf4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/remote_sec.1b.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/topbanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/topbanner.gif new file mode 100644 index 00000000..ebdd4535 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/ROMCache/topbanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/help.js b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/help.js new file mode 100644 index 00000000..ed368876 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/help.js @@ -0,0 +1,14 @@ +var minisrv_service_file = true; + +data = wtvguide.generatePage(request_headers.query.topic || "Index", request_headers.query.subtopic || "Main", request_headers.query.page || null) + +if (data) { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` +} else { + err = wtvshared.doErrorPage(500); + console.log(" * wtv-guide error: no implementation for selected for topic/subtopic, or an error occured during generation") + headers = err[0]; + data = err[1]; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/AboutWebTVBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/AboutWebTVBanner.gif new file mode 100644 index 00000000..b9c5dcf7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/AboutWebTVBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Back.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Back.gif new file mode 100644 index 00000000..6b901ad9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Back.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BigAlpha.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BigAlpha.gif new file mode 100644 index 00000000..83c98e29 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BigAlpha.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BulletArrow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BulletArrow.gif new file mode 100644 index 00000000..ae5eab66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/BulletArrow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CenterButton.gif new file mode 100644 index 00000000..dbc82709 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CodeSet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CodeSet.gif new file mode 100644 index 00000000..4faf5e28 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/CodeSet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/ContinueButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/ContinueButton.gif new file mode 100644 index 00000000..98e0bdfd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/ContinueButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Cursor.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Cursor.gif new file mode 100644 index 00000000..85911bb1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Cursor.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/DoneButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/DoneButton.gif new file mode 100644 index 00000000..77723ee3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/DoneButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtons.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtons.gif new file mode 100644 index 00000000..7207262f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtons.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtonsCenter.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtonsCenter.gif new file mode 100644 index 00000000..6651447b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowButtonsCenter.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowsGlow.gif new file mode 100644 index 00000000..3d2e1b8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/BackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/BackGlow.gif new file mode 100644 index 00000000..de8f8928 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/BackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/CenterButton.gif new file mode 100644 index 00000000..51899d27 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/DownArrowButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/DownArrowButton.gif new file mode 100644 index 00000000..a7df0ae1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/DownArrowButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/EchoStarRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/EchoStarRemote.gif new file mode 100644 index 00000000..76659169 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/EchoStarRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/HomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/HomeGlow.gif new file mode 100644 index 00000000..8362159d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/HomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/InfoGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/InfoGlow.gif new file mode 100644 index 00000000..cf80780d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/InfoGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ListingsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ListingsGlow.gif new file mode 100644 index 00000000..8b5166e2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ListingsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/MuteGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/MuteGlow.gif new file mode 100644 index 00000000..7e99bffd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/MuteGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/NumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/NumbersGlow.gif new file mode 100644 index 00000000..d5d09926 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/NumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/OptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/OptionsGlow.gif new file mode 100644 index 00000000..d354f215 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/OptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PipGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PipGlow.gif new file mode 100644 index 00000000..2b5ccd30 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PipGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PowerGlow.gif new file mode 100644 index 00000000..cee0d8df Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/PowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecallGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecallGlow.gif new file mode 100644 index 00000000..4fdc4d48 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecallGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecentGlow.gif new file mode 100644 index 00000000..2b6bbfe7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/RecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ScrollGlow.gif new file mode 100644 index 00000000..53a34daa Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/TVVIDSwitch.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/TVVIDSwitch.gif new file mode 100644 index 00000000..02ac5946 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/TVVIDSwitch.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ViewGlow.gif new file mode 100644 index 00000000..35ac5b4a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/ViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/VolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/VolChGlow.gif new file mode 100644 index 00000000..fbd98592 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EchoStar/VolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EmptyMailbox.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EmptyMailbox.gif new file mode 100644 index 00000000..b98d4e50 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/EmptyMailbox.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Favorites.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Favorites.gif new file mode 100644 index 00000000..67372558 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Favorites.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/GuideBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/GuideBanner.gif new file mode 100644 index 00000000..7afb4658 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/GuideBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpDoneButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpDoneButton.gif new file mode 100644 index 00000000..650c66b0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpDoneButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpEmailButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpEmailButton.gif new file mode 100644 index 00000000..ac53de34 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/HelpEmailButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Home.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Home.gif new file mode 100644 index 00000000..d8102777 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Home.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/LittleRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/LittleRemote.gif new file mode 100644 index 00000000..565b3248 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/LittleRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Mitsubishi/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Mitsubishi/CenterButton.gif new file mode 100644 index 00000000..1e548bf3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Mitsubishi/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiArrowsGlow.gif new file mode 100644 index 00000000..b41fedd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiBackGlow.gif new file mode 100644 index 00000000..155a7170 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiHomeGlow.gif new file mode 100644 index 00000000..decf37b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiNumbersGlow.gif new file mode 100644 index 00000000..14c65a32 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiOptionsGlow.gif new file mode 100644 index 00000000..b22ffaea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiPowerGlow.gif new file mode 100644 index 00000000..af1a20e9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRecentGlow.gif new file mode 100644 index 00000000..a5f4ded9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRemote.gif new file mode 100644 index 00000000..1d9c83a1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiScrollGlow.gif new file mode 100644 index 00000000..e5bd899b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiViewGlow.gif new file mode 100644 index 00000000..192d6dc8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiVolChGlow.gif new file mode 100644 index 00000000..d1977b7b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/MitsubishiVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Nothing.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Nothing.gif new file mode 100644 index 00000000..8b5aecd9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Nothing.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Numbers.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Numbers.gif new file mode 100644 index 00000000..d63057e7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Numbers.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Options.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Options.gif new file mode 100644 index 00000000..25c4face Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Options.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/OptionsButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/OptionsButton.gif new file mode 100644 index 00000000..17b39ae4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/OptionsButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ArrowsGlow.gif new file mode 100644 index 00000000..c806856b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/BackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/BackGlow.gif new file mode 100644 index 00000000..38c4a0d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/BackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/CenterGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/CenterGlow.gif new file mode 100644 index 00000000..5072a5fe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/CenterGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ChannelGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ChannelGlow.gif new file mode 100644 index 00000000..4f79a337 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ChannelGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ExploreGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ExploreGlow.gif new file mode 100644 index 00000000..eaef2f2f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ExploreGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/FavoritesGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/FavoritesGlow.gif new file mode 100644 index 00000000..2be8952e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/FavoritesGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/HomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/HomeGlow.gif new file mode 100644 index 00000000..a75fa3df Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/HomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MailGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MailGlow.gif new file mode 100644 index 00000000..53a6156b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MailGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MuteGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MuteGlow.gif new file mode 100644 index 00000000..67c1cd66 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/MuteGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/NumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/NumbersGlow.gif new file mode 100644 index 00000000..a544565b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/NumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/OptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/OptionsGlow.gif new file mode 100644 index 00000000..1954d34f Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/OptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PhilipsPlusRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PhilipsPlusRemote.gif new file mode 100644 index 00000000..02cd5353 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PhilipsPlusRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PowerGlow.gif new file mode 100644 index 00000000..702f4fc1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/PowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/RecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/RecentGlow.gif new file mode 100644 index 00000000..397e3471 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/RecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ReloadGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ReloadGlow.gif new file mode 100644 index 00000000..99c40d31 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ReloadGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ScrollGlow.gif new file mode 100644 index 00000000..5b2f3727 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVGlow.gif new file mode 100644 index 00000000..7d41f77d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVVideoGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVVideoGlow.gif new file mode 100644 index 00000000..7a229c36 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/TVVideoGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ViewGlow.gif new file mode 100644 index 00000000..afa117d0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/ViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/VolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/VolChGlow.gif new file mode 100644 index 00000000..463ffd53 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus-Remote/VolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus/CenterButton.gif new file mode 100644 index 00000000..311f6022 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips-Plus/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips/CenterButton.gif new file mode 100644 index 00000000..b53df9cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Philips/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsArrowsGlow.gif new file mode 100644 index 00000000..2c1c107b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsBackGlow.gif new file mode 100644 index 00000000..bd644dfe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsCenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsCenterButton.gif new file mode 100644 index 00000000..b53df9cf Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsCenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsFavoritesGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsFavoritesGlow.gif new file mode 100644 index 00000000..8cab864b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsFavoritesGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsHomeGlow.gif new file mode 100644 index 00000000..ea387091 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsOptionsGlow.gif new file mode 100644 index 00000000..f6544562 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsPowerGlow.gif new file mode 100644 index 00000000..d030daae Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRecentGlow.gif new file mode 100644 index 00000000..f4c79e68 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRemote.gif new file mode 100644 index 00000000..5cc22918 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsScrollGlow.gif new file mode 100644 index 00000000..084d1ad7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsSearchGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsSearchGlow.gif new file mode 100644 index 00000000..0d273b1c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsSearchGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsTVWebGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsTVWebGlow.gif new file mode 100644 index 00000000..1d88a188 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/PhilipsTVWebGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Recent.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Recent.gif new file mode 100644 index 00000000..5493e95b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Recent.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Rule.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Rule.gif new file mode 100644 index 00000000..ff0191d4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Rule.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/RuleLeftEnd.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/RuleLeftEnd.gif new file mode 100644 index 00000000..86696005 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/RuleLeftEnd.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SampleGreeting.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SampleGreeting.gif new file mode 100644 index 00000000..c58d06b1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SampleGreeting.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Samsung/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Samsung/CenterButton.gif new file mode 100644 index 00000000..1e548bf3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Samsung/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungArrowsGlow.gif new file mode 100644 index 00000000..b41fedd3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungBackGlow.gif new file mode 100644 index 00000000..155a7170 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungHomeGlow.gif new file mode 100644 index 00000000..decf37b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungNumbersGlow.gif new file mode 100644 index 00000000..14c65a32 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungOptionsGlow.gif new file mode 100644 index 00000000..b22ffaea Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungPowerGlow.gif new file mode 100644 index 00000000..af1a20e9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRecentGlow.gif new file mode 100644 index 00000000..a5f4ded9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRemote.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRemote.jpg new file mode 100644 index 00000000..9efbefc2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungRemote.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungScrollGlow.gif new file mode 100644 index 00000000..e5bd899b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungViewGlow.gif new file mode 100644 index 00000000..192d6dc8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungVolChGlow.gif new file mode 100644 index 00000000..d1977b7b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SamsungVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Scroll.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Scroll.gif new file mode 100644 index 00000000..4b726f01 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Scroll.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Searching.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Searching.gif new file mode 100644 index 00000000..fda7cfa6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Searching.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Signature.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Signature.gif new file mode 100644 index 00000000..66e508ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Signature.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SmallAlpha.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SmallAlpha.gif new file mode 100644 index 00000000..717d863a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SmallAlpha.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusRemote.gif new file mode 100644 index 00000000..70596a3a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusViewGlow.gif new file mode 100644 index 00000000..50b4525c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony-Plus/SonyPlusViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony/CenterButton.gif new file mode 100644 index 00000000..d6863624 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Sony/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyArrowsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyArrowsGlow.gif new file mode 100644 index 00000000..7b97f06e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyArrowsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyBackGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyBackGlow.gif new file mode 100644 index 00000000..b7e06dab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyBackGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyCodeSetGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyCodeSetGlow.gif new file mode 100644 index 00000000..c9036618 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyCodeSetGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyHomeGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyHomeGlow.gif new file mode 100644 index 00000000..7a8d86cd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyHomeGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyNumbersGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyNumbersGlow.gif new file mode 100644 index 00000000..0ae6221e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyNumbersGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyOptionsGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyOptionsGlow.gif new file mode 100644 index 00000000..b7959dff Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyOptionsGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyPowerGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyPowerGlow.gif new file mode 100644 index 00000000..f9c7d415 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyPowerGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRecentGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRecentGlow.gif new file mode 100644 index 00000000..2193853a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRecentGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRemote.gif new file mode 100644 index 00000000..8133bcf8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyScrollGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyScrollGlow.gif new file mode 100644 index 00000000..4015f93c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyScrollGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyViewGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyViewGlow.gif new file mode 100644 index 00000000..c5976e8d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyViewGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyVolChGlow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyVolChGlow.gif new file mode 100644 index 00000000..d3dc5603 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/SonyVolChGlow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/Spacer.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Spacer.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/Spacer.gif rename to zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Spacer.gif diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Steps.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Steps.gif new file mode 100644 index 00000000..38aeb811 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Steps.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/UsingWebTVBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/UsingWebTVBanner.gif new file mode 100644 index 00000000..52dc1e69 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/UsingWebTVBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/VolCh.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/VolCh.gif new file mode 100644 index 00000000..7caa0d07 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/VolCh.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet1.gif new file mode 100644 index 00000000..bfc8b0a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet1.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet2.gif new file mode 100644 index 00000000..3ec0fc8e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/Wallet2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/WebTV/CenterButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/WebTV/CenterButton.gif new file mode 100644 index 00000000..d6863624 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/WebTV/CenterButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YellowPixel.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YellowPixel.gif new file mode 100644 index 00000000..198d7695 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YellowPixel.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourAccountBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourAccountBanner.gif new file mode 100644 index 00000000..8eb45ba3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourAccountBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourScreenshotHere.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourScreenshotHere.gif new file mode 100644 index 00000000..ee277dff Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/YourScreenshotHere.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/btn.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/btn.gif new file mode 100644 index 00000000..461e31e2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/btn.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cbot.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cbot.gif new file mode 100644 index 00000000..e842b55b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cbot.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cfront.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cfront.gif new file mode 100644 index 00000000..2651edd7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/cfront.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/contro.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/contro.gif new file mode 100644 index 00000000..d840e61e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/contro.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/account.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/account.jpg new file mode 100644 index 00000000..9a94097b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/account.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-account.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-account.jpg new file mode 100644 index 00000000..f1fff5c7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-account.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-settings.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-settings.jpg new file mode 100644 index 00000000..3064019a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-settings.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-center.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-center.jpg new file mode 100644 index 00000000..e14667a2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-center.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-links.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-links.jpg new file mode 100644 index 00000000..c118040d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome-links.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome.jpg new file mode 100644 index 00000000..ff206246 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/classic-webhome.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/grungeTourBg.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/grungeTourBg.swf new file mode 100644 index 00000000..ec2142b2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/grungeTourBg.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/help.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/help.jpg new file mode 100644 index 00000000..b3162db0 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/help.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/news.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/news.jpg new file mode 100644 index 00000000..04afd886 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/news.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/page-builder.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/page-builder.jpg new file mode 100644 index 00000000..a96a9ed1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/page-builder.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-text.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-text.jpg new file mode 100644 index 00000000..1e59d68c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-text.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-things.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-things.jpg new file mode 100644 index 00000000..8284840a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search-things.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search.jpg new file mode 100644 index 00000000..aaebb140 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/search.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/settings.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/settings.jpg new file mode 100644 index 00000000..5ef14949 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/settings.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/shopping.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/shopping.jpg new file mode 100644 index 00000000..2873ea1e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/shopping.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/test.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/test.gif new file mode 100644 index 00000000..2eadfe39 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/test.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-center.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-center.jpg new file mode 100644 index 00000000..f0bce1de Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-center.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-links.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-links.jpg new file mode 100644 index 00000000..37d32485 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome-links.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome.jpg new file mode 100644 index 00000000..83db222b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/grungeIntro/webhome.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-metered.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-metered.jpg new file mode 100644 index 00000000..0bffb0f9 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-metered.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-msn.jpg new file mode 100644 index 00000000..6bf8ad2a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main.gif new file mode 100644 index 00000000..36956a26 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/account-main.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period-msn.jpg new file mode 100644 index 00000000..a887885e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period.jpg new file mode 100644 index 00000000..e3dd05c8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-detailed-period.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main-msn.jpg new file mode 100644 index 00000000..ab38b671 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main.jpg new file mode 100644 index 00000000..63b3e51e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-main.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user-msn.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user-msn.jpg new file mode 100644 index 00000000..28ec8f38 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user-msn.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user.jpg new file mode 100644 index 00000000..2948f5cc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/metered-user.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/user-info.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/user-info.gif new file mode 100644 index 00000000..d5fad3f5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/user-info.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/webtv-users.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/webtv-users.gif new file mode 100644 index 00000000..33294a2d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/account/webtv-users.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDL.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDL.gif new file mode 100644 index 00000000..f0b23131 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDL.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDR.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDR.gif new file mode 100644 index 00000000..54f403be Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowDR.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUL.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUL.gif new file mode 100644 index 00000000..d216974c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUL.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUR.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUR.gif new file mode 100644 index 00000000..db06cf85 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/arrowUR.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video.gif new file mode 100644 index 00000000..1d475dc7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video2.gif new file mode 100644 index 00000000..65893860 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/audio-video2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/coaxial.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/coaxial.gif new file mode 100644 index 00000000..50ccbff2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/coaxial.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpBannerImage.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpBannerImage.gif new file mode 100644 index 00000000..bc833e80 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpBannerImage.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMasthead.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMasthead.swf new file mode 100644 index 00000000..a29fa44a Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMasthead.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMastheadBlank.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMastheadBlank.swf new file mode 100644 index 00000000..3bb8bbca Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/helpMastheadBlank.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less.gif new file mode 100644 index 00000000..79f5f015 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less_dim.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less_dim.gif new file mode 100644 index 00000000..402c00c3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/less_dim.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/microphone.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/microphone.gif new file mode 100644 index 00000000..08144548 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/microphone.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more.gif new file mode 100644 index 00000000..911d9218 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more_dim.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more_dim.gif new file mode 100644 index 00000000..806f423d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/common/more_dim.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/maillist.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/maillist.jpg new file mode 100644 index 00000000..6248aa6b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/maillist.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-classic.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-classic.jpg new file mode 100644 index 00000000..7e2d2222 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-classic.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-plus.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-plus.jpg new file mode 100644 index 00000000..270f5152 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/help/mail/sendmail-plus.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-classic.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-classic.jpg new file mode 100644 index 00000000..751bfbc1 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-classic.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.jpg new file mode 100644 index 00000000..be565d82 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.old b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.old new file mode 100644 index 00000000..9bd12dad Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/home-plus.old differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_delete.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_delete.gif new file mode 100644 index 00000000..110fdf82 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_delete.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_forward.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_forward.gif new file mode 100644 index 00000000..008d238e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_forward.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_reply.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_reply.gif new file mode 100644 index 00000000..2c82d599 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_reply.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_save.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_save.gif new file mode 100644 index 00000000..3c0109c3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_save.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_send.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_send.gif new file mode 100644 index 00000000..5e88014e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/mail_send.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/marketplace.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/marketplace.gif new file mode 100644 index 00000000..c2fe24cc Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/marketplace.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/network.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/network.gif new file mode 100644 index 00000000..7ce3a4c4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/network.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/power-highlight.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/power-highlight.gif new file mode 100644 index 00000000..83702783 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/power-highlight.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/ComingA_logo.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/ComingA_logo.jpg new file mode 100644 index 00000000..301d43f3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/ComingA_logo.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_Banner.swf b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_Banner.swf new file mode 100644 index 00000000..e136bb95 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_Banner.swf differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_mRemote.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_mRemote.gif new file mode 100644 index 00000000..52898a11 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/QH_mRemote.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TVCrossover.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TVCrossover.gif new file mode 100644 index 00000000..0a2899a6 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TVCrossover.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow.gif new file mode 100644 index 00000000..919d1e4e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow2.gif new file mode 100644 index 00000000..e5308175 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/TopicArrow2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet1.gif new file mode 100644 index 00000000..501bc3d7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet1.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet2.gif new file mode 100644 index 00000000..0ab61a9c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/bullet2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/tocBullet.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/tocBullet.gif new file mode 100644 index 00000000..b9f3f3f2 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/tocBullet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleBlk.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleBlk.gif new file mode 100644 index 00000000..4d738d00 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleBlk.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleWht.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleWht.gif new file mode 100644 index 00000000..0ab61a9c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/quickhelp/triangleWht.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-bottom-half.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-bottom-half.jpg new file mode 100644 index 00000000..20a1a1b3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-bottom-half.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-top-half.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-top-half.jpg new file mode 100644 index 00000000..0b57af77 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote-top-half.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote_sec.1b.jpg b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote_sec.1b.jpg new file mode 100644 index 00000000..21789cf4 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/remote_sec.1b.jpg differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/topbanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/topbanner.gif new file mode 100644 index 00000000..ebdd4535 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-guide/images/topbanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/ValidateLogin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/ValidateLogin.js new file mode 100644 index 00000000..7a321b17 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/ValidateLogin.js @@ -0,0 +1,97 @@ +var minisrv_service_file = true; + +var challenge_response, challenge_header = ''; +var gourl; +var wtvsec_login = null; + +if (request_headers.query.hangup) { + headers = `300 OK +Location: client:gototvhome +wtv-visit: client:hangupphone` +} else { + + var user_id = (request_headers.query.user_id) ? request_headers.query.user_id : session_data.user_id; + + if (socket.ssid !== null && user_id !== null) session_data.switchUserID(user_id); + + if (socket.ssid !== null && !session_data.get("wtvsec_login")) { + wtvsec_login = new WTVSec(minisrv_config); + wtvsec_login.IssueChallenge(); + wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); + session_data.set("wtvsec_login", wtvsec_login); + } else { + wtvsec_login = session_data.get("wtvsec_login"); + } + + if (socket.ssid !== null) { + if (wtvsec_login.ticket_b64 == null) { + challenge_response = wtvsec_login.challenge_response; + var client_challenge_response = request_headers["wtv-challenge-response"] || null; + if (challenge_response && client_challenge_response) { + if (challenge_response.toString(CryptoJS.enc.Base64) == client_challenge_response) { + console.log(" * wtv-challenge-response success for " + wtvshared.filterSSID(socket.ssid)); + wtvsec_login.PrepareTicket(); + gourl = "wtv-head-waiter:/login-stage-two?"; + } else { + console.log(" * wtv-challenge-response FAILED for " + wtvshared.filterSSID(socket.ssid)); + if (minisrv_config.config.debug_flags.debug) console.log("Response Expected:", challenge_response.toString(CryptoJS.enc.Base64)); + if (minisrv_config.config.debug_flags.debug) console.log("Response Received:", client_challenge_response) + gourl = "wtv-head-waiter:/login?reissue_challenge=true"; + } + } else { + gourl = "wtv-head-waiter:/login?no_response=true"; + } + } else { + gourl = "wtv-head-waiter:/login-stage-two?"; + } + } + + if (request_headers.query.guest_login) { + if (request_headers.query.relogin || request_headers.query.reconnect) gourl += "&"; + gourl += "guest_login=true"; + if (request_headers.query.skip_splash) gourl += "&skip_splash=true"; + } + + if (user_id != null && !request_headers.query.initial_login && !request_headers.query.user_login) { + if (request_headers.query.password == "") { + headers = `403 Please enter your password and try again +minisrv-no-mail-count: true +`; + } else if (session_data.validateUserPassword(request_headers.query.password)) { + session_data.setUserLoggedIn(true); + headers = `200 OK +minisrv-no-mail-count: true +Content-Type: text/html +wtv-visit: ${gourl} +`; + } else { + headers = `403 The password you entered was incorrect. Please retype it and try again. +minisrv-no-mail-count: true +`; + } + } else { + if (session_data.baddisk === true) { + gourl = "wtv-head-waiter:/bad-disk?" + } + else if (session_data.getNumberOfUserAccounts() > 1 && user_id === 0 && request_headers.query.initial_login) { + gourl = "wtv-head-waiter:/choose-user?" + } else { + var limitedLogin = (!session_data.lockdown && (!session_data.get('password_valid') && session_data.getUserPasswordEnabled())); + var limitedLoginRegistered = (limitedLogin && session_data.isRegistered()); + } + headers = `200 OK +wtv-connection-close: true +Connection: close +minisrv-no-mail-count: true +Content-Type: text/html`; + if (client_challenge_response) { + headers += ` +wtv-encrypted: true`; + if (wtvsec_login) session_data.data_store.wtvsec_login.update_ticket = true; + } + if (limitedLoginRegistered) gourl = "wtv-head-waiter:/password?"; + headers += ` +wtv-visit: ${gourl}`; + + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js new file mode 100644 index 00000000..b9ccba48 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js @@ -0,0 +1,69 @@ +var minisrv_service_file = true; + +// remove restrictions once this page is shown, since the user will be 'trapped' anyway +session_data.disableLockdown(); +session_data.delete("wtv-my-disk-sucks-sucks-sucks"); +session_data.baddisk = false; + +headers = `200 OK +Content-type: text/html`; + +data = ` + + Please Call + + + + + + + +
      + + + + + + + +
      +Please Call +
      +
      +
      +
      + +
      + + + + + + + + + + + +
      + + + +Your Internet terminal needs to be repaired +or replaced before you can connect to WebTV. + +
      +
      +
      +
      +
      + +
      +
      +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js new file mode 100644 index 00000000..f6bd3f3d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/choose-user.js @@ -0,0 +1,147 @@ +var minisrv_service_file = true; + +if (socket.ssid !== null) session_data.switchUserID(0); + +headers = `200 OK +minisrv-no-mail-count: true +wtv-expire-all: wtv-head-waiter:/ValidateLogin +wtv-noback-all: wtv- +Content-Type: text/html` + +data = ` + + + +Choose your name + + + + + + + + + +
      +
      + + +
      + +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + +
      + + + + + + +
      + + +Choose your name + +
      + + +
      + +
      + + +
      + +`; + +var accounts = session_data.listPrimaryAccountUsers(); +var accounts_listed = 0; +for (const [key, value] of Object.entries(accounts)) { + data += " + + + +`; + accounts_listed++; +}; + +while (accounts_listed < minisrv_config.config.user_accounts.max_users_per_account) { + data += ` + + + + + +
      +
      +
      "; + if (key == "subscriber") var user_id = 0 + else var user_id = key.replace("user", ''); + data += ``; + if (key == "subscriber") data += `${value['subscriber_username']}`; + else data += `${value['subscriber_username']}` + data += " "; + var userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + + var mailcount = 0; + if (userSession.mailstore.mailstoreExists()) { + if (userSession.mailstore.mailboxExists(0)) { + mailcount = userSession.mailstore.countUnreadMessages(0); + } + } + + var mcnumber = (mailcount >= 100) ? "99+" : mailcount; + data += `${mcnumber} ${(mcnumber > 0) ? '' : ''}`; + data += ` +
      + + +
      + +
      + + +
      +
      + + +
      + +
      + +`; + accounts_listed++; +} + +data += ` +
      +
      + + + + + +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameBanner.gif new file mode 100644 index 00000000..4e41e41b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameStrip.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameStrip.gif new file mode 100644 index 00000000..8a6930bb Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/NameStrip.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/PasswordBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/PasswordBanner.gif new file mode 100644 index 00000000..6e7512ee Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/PasswordBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_mail_error.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_mail_error.gif new file mode 100644 index 00000000..6607f171 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_mail_error.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_new_mail.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_new_mail.gif new file mode 100644 index 00000000..f5727f74 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_new_mail.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_no_mail.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_no_mail.gif new file mode 100644 index 00000000..b940393b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/images/signin_no_mail.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js index a0ff818f..e74c4768 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js @@ -1,47 +1,15 @@ var minisrv_service_file = true; +var gourl = null; -var challenge_response, challenge_header = ''; -var gourl; - -if (socket.ssid != null && !ssid_sessions[socket.ssid].get("wtvsec_login")) { - var wtvsec_login = new WTVSec(minisrv_config); - wtvsec_login.IssueChallenge(); - wtvsec_login.set_incarnation(request_headers["wtv-incarnation"]); - ssid_sessions[socket.ssid].set("wtvsec_login", wtvsec_login); -} else { - var wtvsec_login = ssid_sessions[socket.ssid].get("wtvsec_login"); -} - -if (socket.ssid !== null) { - if (wtvsec_login.ticket_b64 == null) { - challenge_response = wtvsec_login.challenge_response; - var client_challenge_response = request_headers["wtv-challenge-response"] || null; - if (challenge_response && client_challenge_response) { - if (challenge_response.toString(CryptoJS.enc.Base64) == client_challenge_response) { - console.log(" * wtv-challenge-response success for " + wtvshared.filterSSID(socket.ssid)); - wtvsec_login.PrepareTicket(); - - } else { - console.log(" * wtv-challenge-response FAILED for " + wtvshared.filterSSID(socket.ssid)); - if (minisrv_config.config.debug_flags.debug) console.log("Response Expected:", challenge_response.toString(CryptoJS.enc.Base64)); - if (minisrv_config.config.debug_flags.debug) console.log("Response Received:", client_challenge_response) - gourl = "wtv-head-waiter:/login?reissue_challenge=true"; - } - } else { - gourl = "wtv-head-waiter:/login?no_response=true"; - } - } -} - -if (!ssid_sessions[socket.ssid].getSessionData("registered") && (!request_headers.query.guest_login || !minisrv_config.config.allow_guests)) gourl = "wtv-register:/splash?"; +if (!session_data.isRegistered() && (!request_headers.query.guest_login || !minisrv_config.config.allow_guests)) gourl = "wtv-register:/splash?"; +var home_url = "wtv-home:/home?"; if (gourl) { headers = `200 OK wtv-open-isp-disabled: false `; - if (!ssid_sessions[socket.ssid].getSessionData("registered") && (!request_headers.query.guest_login || !minisrv_config.config.allow_guests)) { + if (!session_data.isRegistered() && (!request_headers.query.guest_login || !minisrv_config.config.allow_guests)) { headers += `wtv-encrypted: true -wtv-ticket: ${wtvsec_login.ticket_b64} ${getServiceString('wtv-register')} ${getServiceString('wtv-head-waiter')} ${getServiceString('wtv-star')} @@ -53,104 +21,164 @@ Content-type: text/html`; data = ''; } else { - if (request_headers.query.guest_login && minisrv_config.config.allow_guests) { + if (session_data.lockdown) { + home_url = minisrv_config.config.unauthorized_url; + } + else if (request_headers.query.guest_login && minisrv_config.config.allow_guests) { var namerand = Math.floor(Math.random() * 100000); var nickname = (minisrv_config.config.service_name + '_' + namerand) var human_name = nickname; var userid = '1' + Math.floor(Math.random() * 1000000000000000000); var messenger_enabled = 0; var messenger_authorized = 0; - if (request_headers.query.skip_splash) var home_url = "wtv-home:/home?"; - else var home_url = "wtv-home:/splash?"; - } else if (!ssid_sessions[socket.ssid].getSessionData("registered")) { + if (request_headers.query.skip_splash) gourl = "wtv-home:/home?"; + else gourl = "wtv-home:/splash?"; + } else if (!session_data.getSessionData("registered")) { var errpage = wtvshared.doErrorPage(400); headers = errpage[0]; data = errpage[1]; } else { - var userid = ssid_sessions[socket.ssid].getSessionData("subscriber_userid") - var nickname = ssid_sessions[socket.ssid].getSessionData("subscriber_username"); - var human_name = ssid_sessions[socket.ssid].getSessionData("subscriber_name"); - var messenger_enabled = ssid_sessions[socket.ssid].getSessionData("messenger_enabled") || 0; - var messenger_authorized = ssid_sessions[socket.ssid].getSessionData("messenger_authorized") || 0; - var home_url = "wtv-home:/splash?"; + var userid = session_data.getSessionData("subscriber_userid") + var nickname = session_data.getSessionData("subscriber_username"); + var human_name = session_data.getSessionData("subscriber_name") || nickname; + var messenger_enabled = session_data.getSessionData("messenger_enabled") || 0; + var messenger_authorized = session_data.getSessionData("messenger_authorized") || 0; + var messenger_email = session_data.getSessionData("messenger_email"); + var gourl = "wtv-home:/splash?"; } - var offline_user_list = CryptoJS.enc.Latin1.parse("\n\t\n").toString(CryptoJS.enc.Base64); + var limitedLogin = session_data.lockdown; + var limitedLoginRegistered = (limitedLogin || (session_data.isRegistered() && !session_data.isUserLoggedIn())); + var offline_user_list = null; + if (session_data.isRegistered()) { + // check for SMTP Password + if (session_data.getSessionData("subscriber_smtp_password") === null) { + session_data.setUserSMTPPassword(session_data.generatePassword(16)); + } + if (session_data.user_id == 0) { + var accounts = session_data.listPrimaryAccountUsers(); + var num_accounts = session_data.getNumberOfUserAccounts(); + var offline_user_list_str = "\n"; + var i = 0; + Object.keys(accounts).forEach((k) => { + var account_display_name = (accounts[k].subscriber_name) ? accounts[k].subscriber_name : accounts[k].subscriber_username + offline_user_list_str += "\t" + '' + "\n"; + i++; + }); + offline_user_list_str += "\n"; + offline_user_list = CryptoJS.enc.Latin1.parse(offline_user_list_str).toString(CryptoJS.enc.Base64); + } + } + + if (limitedLoginRegistered) { + home_url = "wtv-head-waiter:/password?"; + gourl = home_url; + } + data = ''; + headers = `200 OK Connection: Keep-Alive -wtv-encrypted: true -wtv-client-time-zone: GMT -0000 +wtv-expire-all: wtv-head-waiter: +`; + + if (!limitedLogin && !limitedLoginRegistered) { + headers += `wtv-client-time-zone: GMT -0000 wtv-client-time-dst-rule: GMT wtv-client-date: `+ strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + ` GMT wtv-country: US wtv-language-header: en-US,en +wtv-noback-all: wtv- wtv-visit: client:closeallpanels wtv-expire-all: client:closeallpanels wtv-transition-override: off -wtv-force-lightweight-targets: webtv.net:/ wtv-smartcard-inserted-message: Contacting service -wtv-bypass-proxy: false -wtv-offline-user-list: ${offline_user_list} -wtv-messenger-authorized: ${messenger_authorized} -wtv-messenger-enable: ${messenger_enabled} -wtv-noback-all: wtv- -wtv-service: reset -`+ getServiceString('all', { "exceptions": ["wtv-register"] }) + ` -user-id: ${userid} -wtv-human-name: ${human_name} -${ssid_sessions[socket.ssid].setIRCNick(nickname)} -wtv-domain: wtv.zefie.com -wtv-input-timeout: 14400 -wtv-ticket: ${wtvsec_login.ticket_b64} -wtv-messagewatch-checktimeoffset: off -wtv-input-timeout: 14400 -wtv-connection-timeout: 90 -wtv-fader-timeout: 900 -wtv-smartcard-inserted-message: Contacting service -user-id: ${userid} -wtv-transition-override: off -wtv-allow-dsc: true -wtv-messenger-enable: 0 -wtv-noback-all: wtv- -wtv-service: reset -`+ getServiceString('all') + ` -wtv-boot-url: wtv-1800:/preregister?relogin=true -wtv-human-name: ${nickname} -${ssid_sessions[socket.ssid].setIRCNick(nickname)} -wtv-home-url: wtv-home:/home?` - if (ssid_sessions[socket.ssid].get('wtv-need-upgrade') != 'true' && !request_headers.query.reconnect) { - headers += "\nwtv-settings-url: wtv-setup:/get-settings"; - } -headers += ` -wtv-domain: wtv.zefie.com -wtv-inactive-timeout: 0 -wtv-connection-timeout: 90 -wtv-show-time-enabled: true -wtv-fader-timeout: 900 -wtv-tourist-enabled: true` - headers += "\nwtv-relogin-url: wtv-head-waiter:/relogin?relogin=true"; - if (request_headers.query.guest_login) headers += "&guest_login=true"; - headers += "\nwtv-reconnect-url: wtv-head-waiter:/login-stage-two?reconnect=true"; - if (request_headers.query.guest_login) headers += "&guest_login=true"; - headers += "\nwtv-boot-url: wtv-head-waiter:/relogin?relogin=true"; - if (request_headers.query.guest_login) headers += "&guest_login=true"; - headers += "\nwtv-allow-dsc: true"; - headers += "\nwtv-home-url: wtv-home:/home?"; - - if (ssid_sessions[socket.ssid].get('wtv-need-upgrade') != 'true' && !request_headers.query.reconnect) { - headers += "\nwtv-settings-url: wtv-setup:/get"; - } - headers += ` -wtv-log-url: wtv-log:/log -wtv-ssl-log-url: wtv-log:/log wtv-ssl-timeout: 240 wtv-login-timeout: 7200 +`; + if (!limitedLogin && !limitedLoginRegistered) { + session_data.assignMailStore(); + headers += getServiceString('all', { "exceptions": ["wtv-register"] }); + if (offline_user_list) headers += "wtv-offline-user-list: " + offline_user_list + "\n"; + headers += `wtv-messenger-authorized: ${messenger_authorized} +wtv-messenger-enable: ${messenger_enabled} +wtv-messagewatch-checktimeoffset: off +wtv-messenger-server: msnmsgr.escargot.chat +wtv-user-name: ${session_data.getSessionData("messenger_email")} +wtv-messenger-login-url: wtv-passport:/messengerlogin +`; + } else { + /* + headers += getServiceString('wtv-1800') + "\n"; + headers += getServiceString('wtv-head-waiter') + "\n"; + headers += getServiceString('wtv-log') + "\n"; + headers += getServiceString('wtv-star') + "\n"; + headers += getServiceString('wtv-flashrom') + "\n"; + */ + headers += `wtv-messenger-authorized: 0 +wtv-messenger-enable: 0 +`; + } + + headers += `wtv-log-url: wtv-log:/log +wtv-ssl-log-url: wtv-log:/log +`; + + if (!limitedLogin && !limitedLoginRegistered) { + headers += `wtv-bypass-proxy: false +user-id: ${userid} +wtv-human-name: ${human_name} +${session_data.setIRCNick(nickname)} +wtv-domain: ${session_data.getSessionData("messenger_domain")} +passport-domain: ${session_data.getSessionData("messenger_domain")} +wtv-mail-url: wtv-mail:/listmail +wtv-favorite-url: wtv-favorite:/favorite +wtv-favorites-folders-url: wtv-favorite:/list-folders +wtv-input-timeout: 14400 +wtv-connection-timeout: 1440 +wtv-fader-timeout: 1440 +wtv-inactive-timeout: 1440 +`; + } + /* + else { + headers += `wtv-bypass-proxy: true + user-id: 0 + wtv-human-name: Unauthorized User + wtv-domain: ${minisrv_config.config.domain_name} + wtv-input-timeout: 30 + wtv-connection-timeout: 60 + wtv-fader-timeout: 60 + wtv-inactive-timeout: 60`; + } + */ + + if (!limitedLogin && !limitedLoginRegistered) { + headers += "\nwtv-relogin-url: wtv-head-waiter:/relogin?relogin=true"; + if (request_headers.query.guest_login) headers += "&guest_login=true"; + + headers += "\nwtv-reconnect-url: wtv-head-waiter:/login-stage-two?reconnect=true"; + if (request_headers.query.guest_login) headers += "&guest_login=true"; + + headers += "\nwtv-boot-url: wtv-head-waiter:/relogin?relogin=true"; + if (request_headers.query.guest_login) headers += "&guest_login=true"; + headers += "\nwtv-home-url: " + home_url; + } + + if (session_data.get('wtv-need-upgrade') != 'true' && !request_headers.query.reconnect && !limitedLogin && !limitedLoginRegistered) + headers += "\nwtv-settings-url: wtv-setup:/get\n"; + + if (!limitedLogin && !limitedLoginRegistered) { + headers += `wtv-force-lightweight-targets: webtv.net:/ +wtv-show-time-enabled: true +wtv-allow-dsc: true +wtv-tourist-enabled: true wtv-open-isp-disabled: false wtv-offline-mail-enable: false wtv-demo-mode: 0 wtv-wink-deferrer-retries: 3 wtv-name-server: 8.8.8.8`; - - if (!request_headers.query.reconnect) headers += "\nwtv-visit: " + home_url; + } + } + if (!request_headers.query.reconnect) headers += "\nwtv-visit: " + gourl; headers += "\nContent-Type: text/html"; } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login.js index 77a2a638..4351a0a4 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login.js @@ -1,8 +1,10 @@ var minisrv_service_file = true; +session_data.setUserLoggedIn(false); var challenge_response, challenge_header = ""; +if (socket.ssid !== null) session_data.switchUserID(0); -var gourl = "wtv-head-waiter:/login-stage-two?"; +var gourl = "wtv-head-waiter:/ValidateLogin?initial_login=true&"; if (request_headers.query.relogin) gourl += "relogin=true"; else if (request_headers.query.reconnect) gourl += "reconnect=true"; @@ -15,29 +17,29 @@ if (request_headers.query.guest_login) { var send_to_relogin = true; if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { + if (session_data) { if (request_headers["wtv-ticket"]) { - if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 == null) { + if (session_data.data_store.wtvsec_login.ticket_b64 == null) { if (request_headers["wtv-ticket"].length > 8) { - ssid_sessions[socket.ssid].data_store.wtvsec_login.DecodeTicket(request_headers["wtv-ticket"]); - ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = request_headers["wtv-ticket"]; + session_data.data_store.wtvsec_login.DecodeTicket(request_headers["wtv-ticket"]); + session_data.data_store.wtvsec_login.ticket_b64 = request_headers["wtv-ticket"]; send_to_relogin = false; } } } else { - if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { + if (session_data.data_store.wtvsec_login) { var client_challenge_response = request_headers["wtv-challenge-response"] || null; if (challenge_response && client_challenge_response) { if (challenge_response.toString(CryptoJS.enc.Base64).substring(0, 85) == client_challenge_response.substring(0, 85)) { console.log(" * wtv-challenge-response success for " + socket.ssid); - ssid_sessions[socket.ssid].data_store.wtvsec_login.PrepareTicket(); + session_data.data_store.wtvsec_login.PrepareTicket(); send_to_relogin = false; } else { - challenge_header = "wtv-challenge: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.IssueChallenge(); + challenge_header = "wtv-challenge: " + session_data.data_store.wtvsec_login.IssueChallenge(); send_to_relogin = false; } } else { - challenge_header = "wtv-challenge: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.IssueChallenge(); + challenge_header = "wtv-challenge: " + session_data.data_store.wtvsec_login.IssueChallenge(); send_to_relogin = false; } } @@ -55,6 +57,8 @@ wtv-expire-all: wtv-head-waiter: wtv-log-url: wtv-log:/log`; if (challenge_header != "") headers += "\n" + challenge_header; headers += ` +wtv-country: US +wtv-language-header: en-US,en wtv-relogin-url: wtv-head-waiter:/relogin?relogin=true wtv-reconnect-url: wtv-head-waiter:/relogin?reconnect=true wtv-visit: ${gourl} diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/password.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/password.js new file mode 100644 index 00000000..b409ebeb --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/password.js @@ -0,0 +1,58 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-visit: client:closeallpanels +wtv-expire-all: client:closeallpanels`; + +data = `Password + + +

      + +
      + +
      +
      +
      +
      +
      +
      + + + + + + +
      + + Type your password +
      +
      + +
      +
      + +Password + +
      + +
      +
      + +
      +
      +
      + + + +
      +
      + + +`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/relogin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/relogin.js index 23bfa01d..aa2f54e4 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/relogin.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/relogin.js @@ -1,4 +1,5 @@ var minisrv_service_file = true; +session_data.setUserLoggedIn(false); var gourl = "wtv-1800:/preregister?"; if (request_headers.query.relogin) gourl += "relogin=true"; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Legal.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Legal.js new file mode 100644 index 00000000..3844aba4 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Legal.js @@ -0,0 +1,108 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` +data = ` + + + +${minisrv_config.config.service_name} Terms of Service + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + + +
      + + + +
      ${minisrv_config.config.service_name} Terms of Service
      +(Release date January 21, 2022)
      +
      +
      + +

      General
      +

      This is a Work-in-Progress remaster of the WebTV service, originally hosted by WebTV Networks, Inc. +This server has no affiliation with WebTV Networks, and many original assets and pages belong to them.

      +

      Rules
      +

      You must follow these rules, or your privilege to access this service may be revoked.

      +
        +
      • Do not harass other users
      • +
      • Do not impersonate others on the network
      • +
      • Do not send spam e-mail
      • +
      • Do not attempt to access unauthorized areas of the network
      • +
      • Do not attempt to disrupt or otherwise negatively impact the service for others
      • +
      • All users must be over 13 years of age, or be accompanied by a parent or guardian at all times
      • +
      +

      Failure to abide by one or more of these rules may require your access to be terminated.

      +

      Service Termination
      +

      If you break one or more of the rules listed above, your access to the service may be revoked. Disclosure of your termination reason will be decided on a case-by-case basis. Any attempt for a banned user to regain access to the server will be dealt with immediately. If you know of a banned user who is still on the network, please report it to us by contacting ${minisrv_config.config.service_owner_contact} via ${minisrv_config.config.service_owner_contact_method}. All decisions are final, and will not be reverted.

      + +

      These terms can change at any time, without warning. Your continued usage of the service is an agreement to these Terms of Service. If you do not agree to these terms, please disconnect immediately and contact ${minisrv_config.config.service_owner_contact} via ${minisrv_config.config.service_owner_contact_method} to terminate your account.

      +
      +
      +
      + + +
      +
      + + +
      +
      + + + +
      +
      + + +
      +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js new file mode 100644 index 00000000..50216782 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/Credits-Privacy.js @@ -0,0 +1,120 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` +data = ` + + + +${minisrv_config.config.service_name} Service Privacy Statement + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + + +
      + + + +
      ${minisrv_config.config.service_name} Service Privacy Statement
      +(Release date Febuary 8, 2022)
      +
      +
      + +

      The purpose of this WebTV server is to allow hobbyists and enthusiasts to have a way to use their WebTV units in modern times. There will be inaccuracies in some areas, and many features are still unimplemented.

      +

      With Whom Personal Information Is Shared and What Is Collected
      +

      When you register with a WebTV account on this server, you are sharing the following:

      +
        +
      • Your WebTV SSID (Silicon Serial ID)
      • +
      • Your name
      • +
      • Your ZIP Code
      • +
      • Pages you access
      • +
      +

      This information is shared with the server operators.

      +

      Your Silicon Serial ID
      +

      Your Silicon Serial ID (SSID) is used to identify you on the network. Anyone with your SSID can impersonate you on the network, so don't share it. This ID is stored on our servers when you sign up, however it will not be shared with anyone except the server operators.

      +

      Your Name
      +

      The name that you enter while signing up will be stored on our servers, however it will not be shared with anyone except the server operators.

      +

      Your ZIP Code
      +

      The ZIP Code you enter to set weather info will be stored on our servers, and will only be sent to The Weather Channel to get current data. You are not required to enter a ZIP code, however it is required to fully utilize weather forecasting.

      +

      Pages you access
      +

      All pages you visit and images you download will be temporarily logged for security reasons. This includes WebTV Network pages and Internet Web sites. This information can not be traced back to you, and will only be viewable to server operators for a short time. IRC Chat messages will not be logged, however server operators can see what servers you are connecting to.

      +

      How We Help Protect Children's Privacy
      +

      We do not knowingly collect information from children under the age of 13 to comply with COPPA. If it becomes known that an account was created by someone under 13, the main user and all secondary accounts will be terminated immediately. All secondary users under 13 must be accompanied by a parent or guardian while using this service.

      `; +/* + * //todo: decide if we should add a coppa config var to deal with this + * +*/ + +data += `

      This Privacy Statement can change at any time, and without warning. If you do not agree with this Privacy Statement, please disconnect and contact ${minisrv_config.config.service_owner_contact} via ${minisrv_config.config.service_owner_contact_method} to terminate your account.

      +
      +
      +
      + + +
      +
      + + +
      +
      + + + +
      +
      + + +
      +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js index 813deb3e..56cf5f78 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js @@ -1,82 +1,392 @@ var minisrv_service_file = true; -headers =`200 OK + +if (request_headers.query.url) { + headers = `300 OK +Location: ${request_headers.query.url}`; +} else { + headers = `200 OK Connection: Keep-Alive wtv-expire-all: wtv-home:/splash wtv-expire-all: wtv-flashrom: Content-type: text/html` + var cryptstatus = (wtv_encrypted ? "Encrypted" : "Not Encrypted") -if (request_headers.query.url) headers += "\nwtv-visit: " + request_headers.query.url; -var cryptstatus = ((socket_sessions[socket.id].secure === true) ? "Encrypted" : "Not Encrypted") + var comp_type = wtvmime.shouldWeCompress(session_data, 'text/html'); + var compstatus = "uncompressed"; + switch (comp_type) { + case 1: + compstatus = "wtv-lzpf"; + break; + case 2: + compstatus = "gzip (level 9)"; + break; + } -var comp_type = wtvmime.shouldWeCompress(ssid_sessions[socket.ssid],'text/html'); -var compstatus = "uncompressed"; -switch (comp_type) { - case 1: - compstatus = "wtv-lzpf"; - break; - case 2: - compstatus = "gzip (level 9)"; - break; -} + var unread_mailcount = session_data.mailstore.countUnreadMessages(0) + var mailbox_gif_num = 0; // no messages + if (unread_mailcount > 0) { + if (unread_mailcount == 1) mailbox_gif_num = 1; + else mailbox_gif_num = 2; + } -data = ` - -Home for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "minisrv"} - - - - -Welcome to ${minisrv_config.config.service_name}`; -if (ssid_sessions[socket.ssid].getSessionData("registered")) data += ", " + ssid_sessions[socket.ssid].getSessionData("subscriber_username") + "!"; -data += `
      -
      - -minisrv v${minisrv_config.version}${(minisrv_config.config.git_commit) ? ' git-'+minisrv_config.config.git_commit : ''}, hosted by ${minisrv_config.config.service_owner}

      -
      -Status: ${cryptstatus} (${compstatus})
      -Connection Speed: &rate; -
      -
      -
        -
      • client:relog (direct)
      • -
      • Ultra Willies ~ Tricks
      • -
      • Setup (Including BG Music)
      • + data = ` + + + Home for ${session_data.getSessionData("subscriber_username") || "minisrv"} + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        + + + + +
        + +
        +
        + +
        + + + +
        + + + +
        +
        + + + +
        + + +
        + Login +
        +
        +
        +
        + + +
        + + + + +
        + +
        +
        + +
        + + + +
        + + + +
        +
        + + + + + +
        + + +
        + Setup +
        +
        +
        +
        + + +
        + + + + +
        + +
        +
        + +
        + + + + +
        + + + +
        +
        + + + + +
        + + +
        + Tricks +
        +
        + +
        +
        + + + + + +
        + + + + +
        + +
        +
        + +
        + + `; -if (ssid_sessions[socket.ssid].hasCap("client-can-do-chat")) { - data += "
      • IRC Chat Test
      • \n" -} -if (ssid_sessions[socket.ssid].hasCap("client-has-disk")) { - // only show disk stuff if client has disk - data += "
      • DiskHax ~ VFatHax
      • \n"; - if (ssid_sessions[socket.ssid].hasCap("client-can-do-macromedia-flash2")) { - // only show demo if client can do flash2 - data += "
      • Old DealerDemo: Download ~ Access
      • \n"; + data += ` + +
        + + + +
        +
        + + + + +
        + + +
        + Help (WIP) +
        +
        + +
        +
        + + +
        + + + + + +
        + +
        +
        + +
        + + + +
        + +
        + + +
        + +
        +
        + + + + + + + + + + + + +
        + +
        + + + +
        + + + + + + + +
        +
        + +
        +
        + + +
        + Mail +
        +
        + + +
        + + + + + + +
        +
        + +
        +
        + + +
        + Favorites +
        +
        + + +
        + + + + + + +
        +
        + +
        +
        + + +
        + Flashroms +
        +
        + + +
        + + + + + + +
        +
        + +
        +
        + + +
        + Search +
        +
        +
        +
        + +
        + + + + + + + +
        +Welcome to ${minisrv_config.config.service_name}`; + if (session_data.getSessionData("registered")) data += ", " + session_data.getSessionData("subscriber_username") + "!"; + data += ` +
        +
        +Status: ${cryptstatus} (${compstatus}) +
        +
        +
        +

          Main Menu

        +
          +
        • wtv-admin new!
        • +`; + if (session_data.hasCap("client-can-do-chat")) { + data += "
        • IRC Chat Test
        • \n" } -} - -data += `
        • DuckDuckGo Lite
        • ` - -if (ssid_sessions[socket.ssid].hasCap("client-can-do-javascript")) { - // URL access form requires javascript, hide if client does not support - data += `
        • DiskHax ~ VFatHax
        • \n"; + if (session_data.hasCap("client-can-do-macromedia-flash2")) { + // only show demo if client can do flash2 + data += "
        • Old DealerDemo: Download ~ Access
        • \n"; + } } + data += `
        `; + // for development + if (fs.existsSync(service_vaults[0] + "/" + service_name + "/home.zefie.html")) { + data += fs.readFileSync(service_vaults[0] + "/" + service_name + "/home.zefie.html", { 'encoding': 'utf8' }); + } + data += `
        +
        +
        +
        +Connection Speed: &rate; +
        +
        +minisrv v${minisrv_config.version}${(minisrv_config.config.git_commit) ? ' git-' + minisrv_config.config.git_commit : ''}, hosted by ${minisrv_config.config.service_owner}  
        +
        - data += `width=250 height=10 bgcolor=#444444 text=#ffdd33 cursor=#cc9933> - -`; -} - -data += "\n"; - -if (fs.existsSync(service_vaults[0] + "/" + service_name + "/home.zefie.html")) { - data += fs.readFileSync(service_vaults[0] + "/" + service_name + "/home.zefie.html", { 'encoding': 'utf8' }); +
        +
      + +` } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundCorner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundCorner.gif new file mode 100644 index 00000000..96d4f5b5 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundCorner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradient.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradient.gif new file mode 100644 index 00000000..8f5ab29e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradient.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradientEdge.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradientEdge.gif new file mode 100644 index 00000000..92a39f40 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/BackgroundGradientEdge.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/HomeBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/HomeBanner.gif new file mode 100644 index 00000000..1c739455 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/HomeBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/TermsBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/TermsBanner.gif new file mode 100644 index 00000000..92498e4d Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/TermsBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/rom.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/rom.gif new file mode 100644 index 00000000..06b05c6b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-home/images/rom.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/splash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/splash.js index 93014d6d..179e0a34 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/splash.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/splash.js @@ -20,16 +20,17 @@ data = `



      -


      - -
      -Mini service +


      `; +if (minisrv_config.config.show_detailed_splash) { + data += `
      -zefie minisrv v${minisrv_config.version}`; -if (minisrv_config.config.git_commit) data += " (git " + minisrv_config.config.git_commit + ")"; +${minisrv_config.config.service_name} Mini Service hosted by ${minisrv_config.config.service_owner} +
      +minisrv v${minisrv_config.version} ${(minisrv_config.config.git_commit) ? '(git ' + minisrv_config.config.git_commit + ')' : ''} +
      Connected: &rate; +
      `; +} data += ` -

      &rate; -
      `; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js new file mode 100644 index 00000000..a7050a83 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js @@ -0,0 +1,93 @@ +var minisrv_service_file = true; + +headers = `200 OK +Content-type: text/html`; + +data = ` + + + +Welcome to Mail + + + + + + + + +
      + + + +
      +
      + + + + +
      +
      + +Welcome to Mail  + +
      +  +
      +
      + + + +
      + +
      + + + + + +
      +
      + +In Mail, you can exchange typed messages—called +m-mail—with anyone who is on ${minisrv_config.config.service_name}, as well as anyone using other compatible MiniSrvs around the world. This is your m-mail address: +
      +${session_data.getSessionData("subscriber_username")}@${minisrv_config.config.service_name} +
      +Choose Begin to start using Mail. +
        +  +  +
      +
      +
      +
      + + + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/addressbook.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/addressbook.js new file mode 100644 index 00000000..90131838 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/addressbook.js @@ -0,0 +1,211 @@ +var minisrv_service_file = true; + +if (request_headers.query.action == "editfromheader") { + + function parseAddress() { + var nickname = request_headers.query.nickname + ":" + var address = request_headers.query.address; + return { + nickname: address + }; + } + var addresstoadd = parseAddress() + + if (session_data.getSessionData("address_book")) { + session_data.setSessionData("address_book", session_data.getSessionData("address_book") + addresstoadd); + session_data.saveSessionData(); + } else { + session_data.setSessionData("address_book", addresstoadd); + session_data.saveSessionData(); + } + + + headers = `200 OK +Content-type: text/html +wtv-expire: wtv-mail:/addresslist`; +} else { + var camefrom = request_headers.query.camefrom; + + var CommonBLIMScripts = wtvshared.unpackCompressedB64('eNrFVttuGjEQfQaJfxjtS3ZbKFCpfQhJJIiEmiptI5V8gFkPYOG1kS9QVOXf6/Ui4l1uq0hRH9eeOXPOmVnbNzpVbGWAEzG3ZI630XeyJsVidNdqzqxIDZMC5mi+2YyInyTDGDPC+JBShVonrebfhkJjlYARZ9knF/l8NHDQeAkA9SnANgjc5KsHyPoE8mtGucQPt4dijupB/1qSbRwCxgUk00PO1hgnkAxazTCZ6bFiKOh5sUw/iEemTRyNH6M2lPVWAUdcpkusjTi6jDjkXG7qIw5PIHa7sJKcpdtrYDMwCwSrUQGhVAOBmfehDRsEYo3MiGEp4XwLJK8ORFCwYppr80h5+gqVdgSJ8V/atQYMyzDgPsUCdrJg+slHH4rw7B2JiTxj8ZoowD+YWoPeDbiFyBMLkK8i+FhKdJ/RVTKIyvnPhYocYSeoJoYbzImTJ62JQypt6H/o93q95GjIrlobPu+Dyq2gEoQ0UHDaLFA4mztTS+mWiXmnAxlZOm+t2tvNNOSmexe4cyywm9a1W2Em1zhWMntHz8/49eXALief5BocNS4JjZM87OvesNeJqjSsnr6jv0RQParA3kuFp7WFHT/DzYNcHPfRBWpHjen3D6sfDnM9by4RqPa8vjdvUVEdsP+t4Qy3ev0dXjrfKdNvE/2uQ+1OqFSKNQp3nqR4DdoQZdw14ReV9s0MRPzOt++DvRMa5ApFKazMJRnAPiy/191bRT8RgTz2tBpVVlPlDkmwK38BOaDgNQCrPC+kuJCb/e4OtMTrSMFW86ZbPJPu/gEVxhrd'); + + headers = `200 OK` + + switch (camefrom) { + case "messenger": + data = `${CommonBLIMScripts} + + +Addresses + + + + + + +
      + +
      + + +
      + + +
      +
      + +
      +
      +
      +
      + + +
      + + +
      +
      Mail List +
      +
      +
      + +
      +
      +
      +
      + + + +
      + + +
      +
      Add +
      +
      +
      + +
      +
      +
      +
      + + +
      + + +
      +
      Help +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      + + + + + +
      +
      Buddies for ${session_data.getSessionData("subscriber_username") || "You"} +
      + +
      Your address is ${session_data.getSessionData("messenger_email") || "unlinked"}@${session_data.getSessionData("messenger_domain") || "escargot.chat"} + +
      +
      + + +
      +
      +
      +
      Name + Options + +
      +
      +
      +
      +
      + +
      + + +
      + + + +` + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/CornerTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/CornerTop.gif new file mode 100644 index 00000000..b81e3e02 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/CornerTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/Mail.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/Mail.gif new file mode 100644 index 00000000..07414b9c Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/Mail.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxDiscard.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxDiscard.gif new file mode 100644 index 00000000..1c92a943 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxDiscard.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxSent.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxSent.gif new file mode 100644 index 00000000..01c48612 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxSent.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxStorage.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxStorage.gif new file mode 100644 index 00000000..2a1db804 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/MailboxStorage.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox0.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox0.gif new file mode 100644 index 00000000..2bbbf969 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox0.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox1.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox1.gif new file mode 100644 index 00000000..5ab83b83 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox1.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox2.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox2.gif new file mode 100644 index 00000000..c4e7f39e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox3.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox3.gif new file mode 100644 index 00000000..423efff7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox3.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox4.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox4.gif new file mode 100644 index 00000000..569aeec7 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox4.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox5.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox5.gif new file mode 100644 index 00000000..f2f7522b Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/OpenMailbox5.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/RemoveButton.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/RemoveButton.gif new file mode 100644 index 00000000..7b5d8640 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/RemoveButton.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/dot.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/dot.gif new file mode 100644 index 00000000..9b2f8235 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/dot.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sendmail_panel_dots.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sendmail_panel_dots.gif new file mode 100644 index 00000000..be321dfe Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sendmail_panel_dots.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sidebardot.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sidebardot.gif new file mode 100644 index 00000000..9b2f8235 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sidebardot.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/widget.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/widget.gif new file mode 100644 index 00000000..3cf94cab Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/widget.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-attachment.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-attachment.js new file mode 100644 index 00000000..5703dea0 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-attachment.js @@ -0,0 +1,21 @@ +var minisrv_service_file = true; + +var errpage = null; + +var messageid = request_headers.query.message_id; +var attachment_id = request_headers.query.attachment_id; +if (!attachment_id && attachment_id != 0) errpage = wtvshared.doErrorPage(400, "Attachment ID required."); +else { + var message = session_data.mailstore.getMessageByID(messageid); + if (!message) errpage = wtvshared.doErrorPage(400, "Invalid Message ID"); + else { + if (!message.attachments) message.attachments = []; // backwards compat + if (attachment_id > message.attachments.length) errpage = wtvshared.doErrorPage(400, "Invalid Attachment ID"); + } +} + +if (!errpage) { + headers = `200 OK +Content-Type: ${message.attachments[attachment_id]['Content-Type']}`; + data = new Buffer.from(message.attachments[attachment_id]['data'], 'base64'); +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-signature.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-signature.js new file mode 100644 index 00000000..f18d5cdf --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/get-signature.js @@ -0,0 +1,19 @@ +var minisrv_service_file = true; + +var errpage = null; + +var messageid = request_headers.query.message_id || null; +if (!messageid) { + // get user signature + data = session_data.getSessionData("subscriber_signature"); +} else { + // get message signature + var message = session_data.mailstore.getMessageByID(messageid); + if (!message) errpage = wtvshared.doErrorPage(400, "Invalid Message ID"); + data = message.signature +} +if (!errpage) { + headers = `200 OK +wtv-trusted: false +Content-Type: text/html` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js new file mode 100644 index 00000000..0a46007b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js @@ -0,0 +1,341 @@ +var minisrv_service_file = true; + +var mailstore_exists = false; + +function mail_end_error(msg) { + var errpage = doErrorPage("400", msg); + headers = errpage[0]; + data = errpage[1]; +} + +var intro_seen = session_data.mailstore.checkMailIntroSeen(); +if (!intro_seen && !request_headers.query.intro_seen) { + // user is trying to bypass the intro screen + headers = "300 OK\nLocation: wtv-mail:/DiplomaMail"; +} else { + if (!intro_seen && request_headers.query.intro_seen) { + // User has come from intro + session_data.mailstore.setMailIntroSeen(true); + } + // check if mailstore exists (returns null if guest) + mailstore_exists = session_data.mailstore.mailstoreExists(); + + // create mailstore if it doesnt exist (also returns null if guest) + if (!mailstore_exists) mailstore_exists = session_data.mailstore.createMailstore(); + + if (mailstore_exists) { + // mailstore exists and user is not guest + + var default_limit = (minisrv_config.services[service_name].messages_per_page) ? minisrv_config.services[service_name].messages_per_page : 25; // user config or 25 + var mailbox = (request_headers.query.mailbox) ? parseInt(request_headers.query.mailbox) : 0; + var limit = (request_headers.query.limit) ? parseInt(request_headers.query.limit) : default_limit; + var reverse_sort = (request_headers.query.reverse_sort) ? true : false; + var page = (request_headers.query.page) ? parseInt(request_headers.query.page) : 0; + + // get mailbox name + var mailbox_name = session_data.mailstore.getMailboxById(parseInt(mailbox)); + + // if false or null, then mailbox is invalid + if (!mailbox_name) { + mail_end_error("Invalid Mailbox ID"); + } else { + // mailboxid is ok + if (!session_data.mailstore.mailboxExists(mailbox)) { + // mailbox does not yet exist, create it + var mailbox_exists = session_data.mailstore.createMailbox(mailbox); + if (!mailbox_exists) { + // failed to create mailbox for some reason + mail_end_error(); + } else { + if (mailbox === 0) { + // Just created Inbox for the first time, so create the welcome message + session_data.mailstore.createWelcomeMessage(); + } + } + } + var message_list = session_data.mailstore.listMessages(mailbox, limit, reverse_sort, (page * limit)) + var total_message_count = session_data.mailstore.countMessages(mailbox); + var total_unread_message_count = session_data.mailstore.countUnreadMessages(mailbox); + + var message_list_string = null; + if (total_message_count == 0) { + message_list_string = "No new mail messages for "; + } else { + if (total_unread_message_count > 0) { + message_list_string = total_unread_message_count + " new mail message" + ((total_message_count != 1) ? 's' : ''); + if (total_message_count - total_unread_message_count > 0) message_list_string += ", " + (total_message_count - total_unread_message_count) + " mail message" + (((total_message_count - total_unread_message_count) != 1) ? 's' : '') + " for "; + } else { + message_list_string = total_message_count + " mail message" + ((total_message_count != 1) ? 's' : '') + " for "; + } + } + + var username = session_data.getSessionData("subscriber_username"); + var notImplementedAlert = new clientShowAlert({ + 'image': minisrv_config.config.service_logo, + 'message': "This feature is not available.", + 'buttonlabel1': "Okay", + 'buttonaction1': "client:donothing", + 'noback': true, + }).getURL(); + + headers = `200 OK +Content-type: text/html`; + + data = ` + + + +${(mailbox_name === "Inbox") ? ' Mail list for ' + username : mailbox_name} + + + + + + +
      + + + +
      + +
      + + + + + +
      + + + + + + + + + + + +
      +
      + + + + +
      +
      Write +
      +
      +
      +
      + + + + +
      +
      Storage +
      +
      +
      +
      + + + + +
      +
      Addresses +
      +
      +
      +
      + + + + +
      +
      Clean up +
      +
      +
      +
      + + +

       

      +
      +

      +
      +
      +Quick Tip: + + +
      + +indicates messages from known senders
      + +
      +
      +
      +
      + + + + + +
      + +
      + +
      + + +
      + + + +`; + var icon_image = null; + switch (mailbox_name) { + case "Inbox": + icon_image = session_data.mailstore.getMailboxIcon(); + break; + case "Sent": + icon_image = "MailboxSent.gif"; + break; + case "Trash": + icon_image = "MailboxDiscard.gif"; + break; + default: + icon_image = "MailboxStorage.gif"; + break; + } + + data += ` + + +
      +
      + + +
      + + +
      + + + ${(mailbox_name === "Inbox") ? ' Mail list for ' + username : mailbox_name} + + + + +
      +Settings +
      + + +
      +
      +
      + + +
      + + +
      `; + if (message_list) { + + data += ` + ${message_list_string} + + +
      +${username}@${minisrv_config.config.service_name} +
      +

      + +
      + + + +
      +From +Subject +Date +
      + +
      +`; + Object.keys(message_list).forEach(function (k) { + var message = message_list[k]; + if (typeof message.subject == "object" && message.subject) message.subject = wtvshared.decodeBufferText(message.subject); + var message_font_open = ""; + var message_font_close = ""; + if (message.unread) { + message_font_open = ``; + message_font_close = "" + } + data += ` + + + +
      + + +
      ${(message.known_sender) ? '' : ''} + +${message_font_open} +${(message.from_name) ? message.from_name : message.from_addr} +${message_font_close} + + +${message_font_open} +${(message.subject) ? message.subject : "(No Subject)"} +${message_font_close} + + +${message_font_open} +`; + var message_date = new Date(message.date * 1000); + data += (message_date.getMonth() + 1) + "/" + message_date.getDate() + "\n"; + data += ` +${message_font_close} +
      +
      `; + }); + } else { + data += ` + No ${(mailbox_name == "Inbox") ? `new e-mail messages for + +
      +${username}@${minisrv_config.config.service_name} +
      ` : 'e-mail messages in mailbox ' + mailbox_name} +

      +`; + } + data += ` + +
      + + +`; + + + } + } else { + mail_end_error("Access Denied"); + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js new file mode 100644 index 00000000..afcd6b1f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js @@ -0,0 +1,319 @@ +var minisrv_service_file = true; + +var mailstore_exists = false; + +function mail_end_error(msg) { + var errpage = doErrorPage("400", msg); + headers = errpage[0]; + data = errpage[1]; +} + +var intro_seen = session_data.mailstore.checkMailIntroSeen(); +if (!intro_seen && !request_headers.query.intro_seen) { + // user is trying to bypass the intro screen + headers = "300 OK\nLocation: wtv-mail:/DiplomaMail"; +} else { + if (!request_headers.query.message_id) { + mail_end_error("Message ID Required"); + } else { + var messageid = request_headers.query.message_id; + var message = session_data.mailstore.getMessageByID(messageid); + if (!message) { + mail_end_error("Invalid Message ID"); + } else { + session_data.mailstore.setMessageReadStatus(messageid); + var notImplementedAlert = new clientShowAlert({ + 'image': minisrv_config.config.service_logo, + 'message': "This feature is not available.", + 'buttonlabel1': "Okay", + 'buttonaction1': "client:donothing", + 'noback': true, + }).getURL(); + + if (request_headers.query.message_delete) { + session_data.mailstore.deleteMessage(messageid); + headers = `300 OK +wtv-expire: wtv-mail:/listmail +Location: wtv-mail:/listmail`; + } else { + + headers = `200 OK +Content-type: text/html`; + var message_colors = session_data.mailstore.getSignatureColors(message.signature); + + if (typeof message.subject == "object" && message.subject) message.subject = wtvshared.decodeBufferText(message.subject); + data = ` + + + + + +${(message.subject) ? wtvshared.htmlEntitize(message.subject) : '(No subject)'} + + + + + + +
      + + + +
      + +
      + + + + + +
      + + + + + + + + + + + + + + + + + +
      +
      + + + + +
      +
      Mail list +
      +
      +
      +
      + + + + +
      +
      Previous +
      +
      +
      +
      + + + + +
      +
      Next +
      +
      +
      +
      + + + + +
      +
      Discard +
      +
      +
      +
      + + + + +
      +
      Save +
      +
      +
      +
      + + + + +
      +
      Reply +
      +
      +
      +
      + + + + +
      +
      Forward +
      +
      +
      +
      +
      +
      +
      + + + + + +
      + +
      + +
      + + +
      + + +
      +
      + + +
      + + +
      + + + +E-mail message + + + + + +
      +
      +
      + + + +
      + + + +
      + + + + + + +
      +From: + +`; + if (message.from_name != message.from_addr) { + data += `${wtvshared.htmlEntitize(message.from_addr)} (${wtvshared.htmlEntitize(message.from_name)})`; + } else { + data += `${wtvshared.htmlEntitize(message.from_addr)}`; + } + + data += `
      +Date: + + +${strftime("%a, %b %e, %Y, %I:%M %P", new Date(message.date * 1000))} (UTC) +
      +To: + + +${wtvshared.htmlEntitize(message.to_addr)} ${(message.to_name) ? '(' + wtvshared.htmlEntitize(message.to_name) + ')' : ''} +
      +Subject: +`; + + data += ` +${(message.subject) ? wtvshared.htmlEntitize(message.subject) : '(No subject)'} +
      + +
      + + + +
      +

      `; + if (typeof message.body === "object" && message.body) { + message.body = wtvshared.decodeBufferText(message.body); + } + data += ` +${wtvshared.htmlEntitize(message.body, true)} +
      +
      `; + if (message.signature) { + data += wtvshared.sanitizeSignature(message.signature); + } + data += `

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

      `; + break; + case "audio/wav": + data += ` +
      +  Recording + +


      +`; + break; + } + } + }); + } + if (message.url) { + data += `Included Page: ${wtvshared.htmlEntitize(message.url_title).replace(/'/gi, "'")}`; + } + data += `

      +

      +

      +
      + + +`; + } + } + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js new file mode 100644 index 00000000..a0937710 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js @@ -0,0 +1,694 @@ +var minisrv_service_file = true; +var message_snapshot_data = null; +var message_voicemail_data = null; + +var intro_seen = session_data.mailstore.checkMailIntroSeen(); +if (!intro_seen && !request_headers.query.intro_seen) { + // user is trying to bypass the intro screen + headers = "300 OK\nLocation: wtv-mail:/DiplomaMail"; +} else { + var doClientError = function (msg) { + var clientErrorMsg = new clientShowAlert({ + 'image': minisrv_config.config.service_logo, + 'message': msg, + 'buttonlabel1': "Okay", + 'buttonaction1': "client:donothing", + 'noback': true, + }).getURL(); + + return "200 OK\nwtv-visit: " + clientErrorMsg; + } + + if (request_headers.query.clear == "true") { + session_data.deleteSessionData("mail_draft"); + session_data.deleteSessionData("mail_draft_attachments"); + headers = `300 OK +wtv-expire: wtv-mail:/listmail +wtv-expire: wtv-mail:/sendmail +Location: wtv-mail:/sendmail`; + } + + var newsgroup = null; + if (wtvshared.parseBool(request_headers.query.discuss)) { + newsgroup = request_headers.query.group || request_headers.query.message_to || null; + } + + if (newsgroup !== null) { + var to_addr = newsgroup; + var pageTitle = "Post to " + newsgroup; + } else { + var to_addr = request_headers.query.message_to || null; + var pageTitle = "Write an e-mail message" + } + + var msg_subject = request_headers.query.message_subject || null; + var msg_body = request_headers.query.message_body || null; + var to_name = request_headers.query.whatever_webtv_sends_this_as || null; + var msg_url = request_headers.query.message_url || null; + var msg_url_title = request_headers.query.message_title || null; + var no_signature = false; + + var mail_draft_data = session_data.getSessionData("mail_draft"); + var mail_draft_attachments = session_data.getSessionData("mail_draft_attachments") || {}; + if (mail_draft_data) { + session_data.deleteSessionData("mail_draft"); + if (mail_draft_data.to_addr) to_addr = mail_draft_data.to_addr; + if (mail_draft_data.msg_subject) msg_subject = mail_draft_data.msg_subject; + if (mail_draft_data.msg_body) msg_body = mail_draft_data.msg_body; + if (mail_draft_data.no_signature) no_signature = mail_draft_data.no_signature; + if (mail_draft_data.msg_url) msg_url = mail_draft_data.msg_url; + if (mail_draft_data.msg_url_title) msg_url_title = mail_draft_data.msg_url_title; + if (mail_draft.data.newsgroup) newsgroup = mail_draft_data.newsgroup; + } + + if (request_headers.query.togglesign == "true") no_signature = false; + if (request_headers.query.togglesign == "false") no_signature = true; + + if (mail_draft_attachments) { + if (mail_draft_attachments.message_snapshot_data) message_snapshot_data = mail_draft_attachments.message_snapshot_data; + else if (request_headers.query.message_snapshot_data) message_snapshot_data = request_headers.query.message_snapshot_data; + if (mail_draft_attachments.message_voicemail_data) message_voicemail_data = mail_draft_attachments.message_voicemail_data; + else if (request_headers.query.message_voicemail_data) message_voicemail_data = request_headers.query.message_voicemail_data; + } + + if (message_snapshot_data && request_headers.query.get_snap) { + headers = `200 OK +Content-Type: image/jpeg`; + data = message_snapshot_data; + } else if (message_voicemail_data && request_headers.query.get_gab) { + headers = `200 OK +Content-Type: audio/wav`; + data = message_voicemail_data; + } else { + + var username = session_data.getSessionData("subscriber_username"); + var userdisplayname = wtvshared.htmlEntitize(session_data.getSessionData("subscriber_name")); + var address = username + "@" + minisrv_config.config.domain_name + var notImplementedAlert = new clientShowAlert({ + 'image': minisrv_config.config.service_logo, + 'message': "This feature is not available.", + 'buttonlabel1': "Okay", + 'buttonaction1': "client:donothing", + 'noback': true, + }).getURL(); + + 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 = session_data.getSessionData("subscriber_signature") || null; + if (typeof request_headers.query.sendoff !== 'undefined' && request_headers.query.sendoff != false) { + var attachments = []; + + + if (message_snapshot_data) { + if (typeof message_snapshot_data == "object") { + attachments.push({ 'Content-Type': 'image/jpeg', data: new Buffer.from(message_snapshot_data).toString('base64') }); + } else { + attachments.push({ 'Content-Type': 'image/jpeg', data: message_snapshot_data }); + } + } + + if (message_voicemail_data) { + if (typeof message_voicemail_data == "object") { + attachments.push({ 'Content-Type': 'audio/wav', data: new Buffer.from(message_voicemail_data).toString('base64') }); + } else { + attachments.push({ 'Content-Type': 'audio/wav', data: new message_voicemail_data }); + } + } + if (newsgroup !== null) { + var request_is_async = true; + if (msg_body === null) { + headers = doClientError("Please type a message to send to the group."); + sendToClient(socket, headers, ''); + } else { + const Client = require('newsie').default + const client = new Client({ + host: minisrv_config.services[request_headers.query['discuss-prefix'] || "wtv-news"].upstream_address, + port: minisrv_config.services[request_headers.query['discuss-prefix'] || "wtv-news"].upstream_port + }) + + client.connect() + .then(response => { + return client.post() + }) + .then(response => { + if (response.code == 340) { + var articleData = {}; + articleData.headers = { + 'Relay-Version': "version zefie_wtvp_minisrv " + minisrv_config.version + "; site " + minisrv_config.config.domain_name, + 'Posting-Version': "version zefie_wtvp_minisrv " + minisrv_config.version + "; site " + minisrv_config.config.domain_name, + 'Path': "@" + minisrv_config.config.domain_name, + 'From': from_addr, + 'Newsgroups': newsgroup, + 'Subject': msg_subject || "(No subject)", + 'Message-ID': "<"+session_data.generatePassword(16) + "@" + minisrv_config.config.domain_name+">", + 'Date': strftime('%A, %d-%b-%y %k:%M:%S %z', new Date()) + } + if (msg_body) { + articleData.body = msg_body.split("\n"); + } else { + articleData.body = []; + } + return response.send(articleData); + } else { + headers = doClientError("Could not send post. Server returned error " + response.code); + sendToClient(socket, headers, ''); + return client.quit(); + } + }) + .then(response => { + if (response.code !== 240) { + headers = doClientError("Could not send post. Server returned error " + response.code); + sendToClient(socket, headers, ''); + } else { + headers = `300 OK +wtv-expire: wtv-news:/news?group=${newsgroup} +wtv-expire: wtv-mail:/sendmail +Location: wtv-news:/news?group=${newsgroup}`; + sendToClient(socket, headers, ''); + return client.quit() + } + }).catch(e => { + console.log('usenet upstream uncaught error', e); + headers = doClientError("Could not send post. Server returned unknown error"); + + sendToClient(socket, headers, ''); + }); + } + } else { + var messagereturn = session_data.mailstore.sendMessageToAddr(from_addr, to_addr, msg_body, msg_subject, userdisplayname, to_name, signature, attachments, msg_url, msg_url_title); + if (messagereturn !== true) { + var errpage = wtvshared.doErrorPage(400, messagereturn); + headers = errpage[0]; + data = errpage[1]; + } else { + session_data.deleteSessionData("mail_draft"); + session_data.deleteSessionData("mail_draft_attachments"); + headers = `300 OK +wtv-expire: wtv-mail:/listmail +wtv-expire: wtv-mail:/sendmail +Location: wtv-mail:/listmail`; + } + } + + } else if (request_headers.query.saveoff) { + var mail_draft_data = { + to_addr: to_addr, + msg_subject: msg_subject, + msg_body: msg_body, + no_signature: no_signature, + msg_url: msg_url, + msg_url_title: msg_url_title, + newsgroup: newsgroup + } + session_data.setSessionData("mail_draft", mail_draft_data); + headers = `200 OK +Content-type: text/html +wtv-expire: wtv-mail:/sendmail`; + } + } else { + + headers = `200 OK +Content-type: text/html`; + var mail_draft_data = session_data.getSessionData("mail_draft_attachments") || {}; + if (request_headers.query.snapping == "false") { + headers += "\nwtv-expire: cache:snapshot.jpg"; + if (mail_draft_data.message_snapshot_data) mail_draft_data.message_snapshot_data = null; + session_data.setSessionData("mail_draft_attachments", mail_draft_data); + } + + if (request_headers.query.gabbing == "false") { + headers += "\nwtv-expire: cache:voicemail.wav"; + if (mail_draft_data.message_voicemail_data) mail_draft_data.message_voicemail_data = null; + session_data.setSessionData("mail_draft_attachments", mail_draft_data); + } + + if (request_headers.query.message_snapshot_data) { + mail_draft_data.message_snapshot_data = request_headers.query.message_snapshot_data + session_data.setSessionData("mail_draft_attachments", mail_draft_data); + } + + if (request_headers.query.message_voicemail_data) { + mail_draft_data.message_voicemail_data = request_headers.query.message_voicemail_data + session_data.setSessionData("mail_draft_attachments", mail_draft_data); + } + var message_colors = null; + if (no_signature) message_colors = session_data.mailstore.getSignatureColors(null, true); + else message_colors = session_data.mailstore.getSignatureColors(session_data.getSessionData("subscriber_signature"), true); + + data = ` + + + + + + +${pageTitle} + + + +
      + + + + + + + +
      + + + +
      + +
      + + + + + +
      + + + + + + + + +
      +
      + + + + +
      +
      Mail list +
      `; + if (!newsgroup) { + data += ` +
      +
      +
      + + + + +
      +
      Address +
      `; + } +data += ` +
      +
      +
      + + + + +
      +
      Photo +
      +
      +
      +
      + + + + + +
      +
      Recording +
      +
      +
      +
      + + + + +
      +
      Erase +
      +
      +
      +
      + +
      +
      +
      +
      + + + + + +
      + +
      + +
      + + +
      + + + + + +
      +
      + + +
      + + +
      + + + +${pageTitle} + + + + +
      +
      +
      + + + + +
      + + +
      + + + + + + +
      +
      + + +
      + + + + + + + + + +
      +From:  + + + +
      +${address} +
      +(${userdisplayname}) +
      + +
      `; + if (!request_headers.query.discuss) { + data += 'To:'; + } else { + data += 'To:'; + } + data += `  + + +
      + +
      +Subject:  + + +
      + +
      + +
      +`; + if (session_data.getSessionData("subscriber_signature") && session_data.getSessionData("subscriber_signature") != "" && !no_signature) { + data += wtvshared.sanitizeSignature(session_data.getSessionData("subscriber_signature")); + } + if (msg_url) { + data += ` + +Included Page: ${wtvshared.htmlEntitize(msg_url_title).replace(/'/gi, "'")}`; + } + data += ` +
      + +
      + + +
      +
      +
      + +
      + + +
      `; + if (!session_data.getSessionData("subscriber_signature") || session_data.getSessionData("subscriber_signature") == "") { + data += ` `; + } else if (no_signature) { + data += ` + Add signature  +
      `; + } else { + data += ` + Remove signature  +
      `; + } + data += ` +
      + + +
      + +`; + + if ((request_headers.query.snapping && request_headers.query.snapping !== 'false') || mail_draft_attachments.message_snapshot_data) { + data += `
      + +
      + + + + + + + + +
      + + + +
      + + + + + + + + + + + + + + +
      `; + if (!mail_draft_attachments.message_snapshot_data) { + data += ` +`; + } + + data += ` +
      + +
      +
      + +
      + + + Detach  +
      +
      + +
      + + + +`; + } + + if ((request_headers.query.gabbing && request_headers.query.gabbing !== 'false') || mail_draft_attachments.message_voicemail_data) { + data += ` +
      + + + +
      + +
      + +
      + + + + + + +
      + + + +
      + + + + + + + + + + + + + + +
      + +${(!mail_draft_attachments.message_voicemail_data) ? '' : ''} +
      + +
      +  Recording + + + Detach  +
      + +
      + + + +`; + } + data += ` + + +
      + + + +
      + +
      + + +`; + } + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/verify-address.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/verify-address.js new file mode 100644 index 00000000..2329ef6a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/verify-address.js @@ -0,0 +1,22 @@ +var minisrv_service_file = true; + + +headers = `200 OK +Content-type: text/plain +minisrv-no-mail-count: true` + +var fail = '0'; +var ok = '1'; + +// TODO: logic to check if account exists +// All this does is some sanity checks for now +// but does not verify the account exists + +if (request_headers.query.address) { + var address_split = request_headers.query.address.split("@"); + var domain = address_split[1]; + if (domain != "escargot.chat" && domain != "escargot.live") data = fail + else data = ok; +} else { + data = fail; +} diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-news/images/BannerDiscuss.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-news/images/BannerDiscuss.gif new file mode 100644 index 00000000..ecfbfbdd Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-news/images/BannerDiscuss.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-news/lobby.js b/zefie_wtvp_minisrv/ServiceVault/wtv-news/lobby.js new file mode 100644 index 00000000..488f5788 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-news/lobby.js @@ -0,0 +1,157 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + +data = ` + + +Featured discussion groups + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + +
      +
      +All groups
      +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + +
      +
      +Help
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      + + + +
      + +Featured discussions +
      +
      +
      + +WebTV
      +A moderated discussion with WebTV customers
      +
      +Hacking
      +Not grandma friendly
      +
      +4x4s
      +The on and off-road four wheel drive vehicle
      +
      +
      + +WebTV Plus
      +bf0 is for bitches and BPS is boring
      +
      +MIDIs
      +The best music format
      +
      +HTML
      +Every timeline starts with HTML
      +
      +
      + + + + +
      + + + +
      +
      + +
      + + + +
      + +
      +Type a discussion topic
      + +
      + +  + + + +
      +
      + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-news/news.js b/zefie_wtvp_minisrv/ServiceVault/wtv-news/news.js new file mode 100644 index 00000000..562dffdf --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-news/news.js @@ -0,0 +1,553 @@ +var minisrv_service_file = true; + +console.log('f') + +async function throwError(e) { + var errpage = wtvshared.doErrorPage(400, null, e.toString()); + sendToClient(socket, errpage[0], errpage[1]); +} + + +async function WebTVListGroup(group) { + wtvnews.connectUsenet().then(() => { + wtvnews.selectGroup(group).then(() => { + wtvnews.listGroup(group).then((response) => { + if (response.code == 211) { + NGCount = response.group.number; + NGArticles = response.group.articleNumbers; + + wtvnews.getHeaderObj(NGArticles).then((messages) => { + wtvnews.quitUsenet(); + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire: wtv-news:/news?group=${request_headers.query.group}` + data = ` + + +${request_headers.query.group} + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + +
      +
      +Post
      +
      +
      +
      + +
      +
      + +
      + + + +
      + + + + +
      +
      +Help
      +
      +
      +
      + +
      +
      + +
      +
      +
      +
      + + + + + +
      + + +
      + + + +Group: ${request_headers.query.group} + + + +
      + +
      + + +
      + + + +` + if (NGCount == 0) { + data += `This group has no postings`; + } else { + data += NGCount + " posting"; + if (NGCount != 1) + data += "s" + } + data += ` + +
      + + + + + + +
      + + + +
      +
      + +
      +
      ` + if (NGCount > 0) { + + Object.keys(messages).forEach(function (k) { + var message = messages[k] + var message_date = message.headers.DATE; + data += ` + + +
      + + + + +
      +${(message.headers.SUBJECT) ? message.headers.SUBJECT : "(No Subject)"} +
      + +${message.headers.FROM}, ${message.headers.DATE} + +
      +
      +
      `; + }); + } + data += ` +
      + + + + + +
      + + + +
      +
      + +
      +
      + + + @@ -86,11 +85,13 @@ for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"} Mail

      `; -// password -if (!minisrv_config.config.hide_incomplete_features) { - data += ` -Password
      + +if (minisrv_config.config.passwords) { + if (minisrv_config.config.passwords.enabled) { + data += ` +Password

      `; + } } data += ` @@ -114,29 +115,28 @@ data += ` Keyboard

      `; -// extra users -if (!minisrv_config.config.hide_incomplete_features) { + +if (session_data.user_id == 0) { data += ` -Extra users
      +Extra Users

      `; } data += ` - -Dialing
      +Messenger
      +
      + +Dialing
      + + + +`; + + sendToClient(socket, headers, data); + }).catch((e) => { throwError(e) });; + } + }).catch((e) => { throwError(e) });; + }).catch((e) => { throwError(e) });; + }).catch((e) => { throwError(e) }); +} + +async function WebTVShowMessage(client, group, article) { + var connected = await clientConnect(client) + if (connected) { + response = await selectGroup(client, group); + if (response) { + response = await getArticle(client, article); + console.log(response); + if (response.code == 220) { + headers = `200 OK +Content-type: text/html`; + + var message_colors = session_data.mailstore.defaultColors; + + data = ` + + +${(response.article.headers.SUBJECT) ? wtvshared.htmlEntitize(response.article.headers.SUBJECT) : '(No subject)'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + + +
      +
      +
      + +
      + +
      + +
      + + + +
      + + + + +
      +
      Group +
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + +
      Previous
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + +
      Next
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + + + + +
      +
      Next New +
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + + + + +
      +
      Mail to +
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + + + + +
      +
      Respond +
      +
      +
      +
      + +
      + +
      + +
      + + + +
      + + + + +
      +
      Help +
      +
      +
      +
      + +
      + +
      + +
      +
      +
      +
      + + + + + + + + +
      + +   + + +
      + +Post +
      +Group: + +${wtvshared.htmlEntitize(response.article.headers.NEWSGROUPS)} +
      +Date: +${console.log(Date.parse(response.article.headers.DATE))} +${strftime("%a, %b %e, %Y, %I:%M%P", new Date(Date.parse(response.article.headers.DATE) / 1000))} + +
      +From: +`; + // if (message.from_name != message.from_addr) { + // data += `${wtvshared.htmlEntitize(message.from_addr)} `; + // } else { + data += `${wtvshared.htmlEntitize(response.article.headers.FROM)}`; + // } + + data += `
      + +
      + + + +
      +


      +${(response.article.headers.SUBJECT) ? wtvshared.htmlEntitize(response.article.headers.SUBJECT) : '(No subject)'}

      +
      +
      +
      +`; + var message_body = response.article.body.join("\n"); + data += ` +${wtvshared.htmlEntitize(message_body, true)} +
      +
      `; + data += `

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

      `; + break; + case "audio/wav": + data += ` +
        recording.wav (wav attachment) + +


      +`; + break; + } + } + }); + } + if (message.url) { + data += `Included Page: ${wtvshared.htmlEntitize(message.url_title).replace(/'/gi, "'")}`; + } + */ + data += ` +

      + + +`; + sendToClient(socket, headers, data); + } else { + var errpage = wtvshared.doErrorPage(400, null, "No such article in group "+group+""); + sendToClient(socket, errpage[0], errpage[1]); + } + } else { + var errpage = wtvshared.doErrorPage(400, null, "No such group: "+group+""); + sendToClient(socket, errpage[0], errpage[1]); + } + } +} + +if (!minisrv_config.services[service_name].upstream_address || !minisrv_config.services[service_name].upstream_port) { + var errpage = doErrorPage(); + headers = errpage[0]; + data = errpage[1]; +} else { + var request_is_async = true; + if (request_headers.query.group) { + if (request_headers.query.article) { + WebTVShowMessage(request_headers.query.group, request_headers.query.article); + } else { + WebTVListGroup(request_headers.query.group); + } + } +} + \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-passport/messengerlogin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-passport/messengerlogin.js new file mode 100644 index 00000000..6f4f4afe --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-passport/messengerlogin.js @@ -0,0 +1,55 @@ +headers = `200 OK +Connection: Keep-Alive +wtv-encrypted: true +Expires: Wed, 09 Oct 1991 22:00:00 GMT +Content-Type: text/plain` + + +var email = session_data.getSessionData("messenger_email") + "%40" + session_data.getSessionData("messenger_domain"); +var password = session_data.decryptPassword(session_data.getSessionData("messenger_password")); +var challenge = request_headers.request.split('?')[1]; + +if (request_headers.request.split('?')[1].substring(0, 3) != "ct=") { + console.log(" *** Logging into Messenger via MSNP3") + data = crypto.createHash('md5').update(request_headers.request.split('?')[1] + password).digest("hex"); +} else { + console.log(" *** Logging into Messenger via MSNP8") + request_is_async = true; // Make us async + const request = https.get('https://msnmsgr.escargot.chat/rdr/pprdr.asp', (response) => { + let req_data = ''; + response.on('data', (chunk) => { + req_data += chunk.toString(); + }); + + response.on('end', () => { + var passporturls = response.headers['passporturls'].split("DALogin=")[1]; + request.end(); + var options = { + method: 'GET', + headers: { "Authorization": "Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" + email + ",pwd=" + encodeURIComponent(password) + "," + challenge } + } + const request2 = https.get(passporturls, options, (response) => { + let req_data = ''; + response.on('data', (chunk) => { + req_data += chunk.toString(); + }); + + response.on('end', () => { + var pp = response.headers['authentication-info']; + pp = pp.split("from-PP='")[1]; + pp = pp.split("'")[0]; + data = pp; + sendToClient(socket, headers, data); + }); + }); + request2.on('error', (error) => { + console.log(' *** Error (Stage 1)', error); + }); + + }); + }); + + request.on('error', (error) => { + console.log(' *** Error (Stage 1)', error); + }); +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/BeMyGuest.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/BeMyGuest.js index 75885f08..b95c5900 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/BeMyGuest.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/BeMyGuest.js @@ -6,10 +6,10 @@ Connection: Close wtv-noback-all: wtv-register: wtv-expire-all: wtv-`; if (socket.ssid) { - if (ssid_sessions[socket.ssid]) { - if (ssid_sessions[socket.ssid].data_store) { - if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { - headers += "\nwtv-ticket: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64; + if (session_data) { + if (session_data.data_store) { + if (session_data.data_store.wtvsec_login) { + headers += "\nwtv-ticket: " + session_data.data_store.wtvsec_login.ticket_b64; } } } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/FinishRegistration.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/FinishRegistration.js index 16db0283..34d684cd 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/FinishRegistration.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/FinishRegistration.js @@ -4,7 +4,7 @@ headers = `300 Moved Connection: Close wtv-noback-all: wtv-register: wtv-expire-all: wtv- -wtv-ticket: ${ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64} +wtv-ticket: ${session_data.data_store.wtvsec_login.ticket_b64} wtv-service: reset ${getServiceString('wtv-1800')} ${getServiceString('wtv-head-waiter')} diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAccountInfo.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAccountInfo.js index 26dff84d..ce5ce4b6 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAccountInfo.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAccountInfo.js @@ -5,16 +5,16 @@ if (!request_headers.query.registering) { headers = errpage[0]; data = errpage[1]; } else { - const WTVRegister = require("./WTVRegister.js") + const WTVRegister = require(classPath + "/WTVRegister.js") var wtvr = new WTVRegister(minisrv_config, SessionStore); var errpage = null; if (!request_headers.query.registering) errpage = wtvshared.doErrorPage(400); else if (!request_headers.query.subscriber_name) errpage = wtvshared.doErrorPage(400, "Please enter your name. This can be your real name, or your well-known online alias."); else if (!request_headers.query.subscriber_username) errpage = wtvshared.doErrorPage(400, "Please enter a username."); - else if (request_headers.query.subscriber_username.length < 5) errpage = wtvshared.doErrorPage(400, "Please choose a username with 5 or more characters."); - else if (request_headers.query.subscriber_username.length > 16) errpage = wtvshared.doErrorPage(400, "Please choose a username with 16 or less characters."); + else if (request_headers.query.subscriber_username.length < minisrv_config.config.user_accounts.min_username_length) errpage = wtvshared.doErrorPage(400, "Please choose a username with " + minisrv_config.config.user_accounts.min_username_length + " or more characters."); + else if (request_headers.query.subscriber_username.length > minisrv_config.config.user_accounts.max_username_length) errpage = wtvshared.doErrorPage(400, "Please choose a username with " + minisrv_config.config.user_accounts.max_username_length + " or less characters."); else if (!wtvr.checkUsernameSanity(request_headers.query.subscriber_username)) errpage = wtvshared.doErrorPage(400, "The username you have chosen contains invalid characters. Please choose a username with only letters, numbers, _ or -. Also, please be sure your username begins with a letter."); - else if (!wtvr.checkUsernameAvailable(request_headers.query.subscriber_username, ssid_sessions)) errpage = wtvshared.doErrorPage(400, "The username you have selected is already in use. Please select another username."); + else if (!wtvr.checkUsernameAvailable(request_headers.query.subscriber_username)) errpage = wtvshared.doErrorPage(400, "The username you have selected is already in use. Please select another username."); else if (!request_headers.query.subscriber_contact) errpage = wtvshared.doErrorPage(400, "Please enter your contact information."); else if (request_headers.query.subscriber_contact_method == "") errpage = wtvshared.doErrorPage(400, "Please select the type of contact information you provided."); @@ -28,7 +28,7 @@ if (!request_headers.query.registering) { wtv-noback-all: wtv-register: Content-Type: text/html`; var title = "Account Review"; - var isOldBuild = wtvshared.isOldBuild(ssid_sessions[socket.ssid]); + var isOldBuild = wtvshared.isOldBuild(session_data); var main_data = ''; if (!isOldBuild) main_data += ` +font=proportional>${session_data.getSessionData("subscriber_signature") || ""}
      `; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAgreement.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAgreement.js index f7498504..23f5934b 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAgreement.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateAgreement.js @@ -5,7 +5,7 @@ if (!request_headers.query.registering) { headers = errpage[0]; data = errpage[1]; } else { - const WTVRegister = require("./WTVRegister.js") + const WTVRegister = require(classPath + "/WTVRegister.js") var wtvr = new WTVRegister(minisrv_config); headers = `200 OK Content-Type: text/html`; @@ -52,5 +52,5 @@ AutoCaps selected> `; - data = wtvr.getHTMLTemplate(minisrv_config.config.service_name + " Account Setup", main_data, form_data, wtvshared.isOldBuild(ssid_sessions[socket.ssid])); + data = wtvr.getHTMLTemplate(minisrv_config.config.service_name + " Account Setup", main_data, form_data, wtvshared.isOldBuild(session_data)); } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateReviewAccountInfo.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateReviewAccountInfo.js index 4e3f904b..bbb94b33 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateReviewAccountInfo.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/ValidateReviewAccountInfo.js @@ -5,21 +5,34 @@ if (!request_headers.query.registering || !request_headers.query.subscriber_username || !request_headers.query.subscriber_contact || !request_headers.query.subscriber_contact_method || - !ssid_sessions[socket.ssid].session_store || - !ssid_sessions[socket.ssid] || + !session_data.session_store || + !session_data || !socket.ssid ) { var errpage = wtvshared.doErrorPage(400); headers = errpage[0]; data = errpage[1]; } else { - ssid_sessions[socket.ssid].setSessionData("subscriber_name", request_headers.query.subscriber_name); - ssid_sessions[socket.ssid].setSessionData("subscriber_username", request_headers.query.subscriber_username); - ssid_sessions[socket.ssid].setSessionData("subscriber_contact", request_headers.query.subscriber_contact); - ssid_sessions[socket.ssid].setSessionData("subscriber_contact_method", request_headers.query.subscriber_contact_method); - ssid_sessions[socket.ssid].setSessionData("subscriber_userid", '1' + Math.floor(Math.random() * 1000000000000000000)); - ssid_sessions[socket.ssid].setSessionData("registered", true); - if (!ssid_sessions[socket.ssid].storeSessionData(true)) { + session_data.setSessionData("subscriber_name", request_headers.query.subscriber_name); + session_data.setSessionData("subscriber_username", request_headers.query.subscriber_username); + session_data.setSessionData("subscriber_contact", request_headers.query.subscriber_contact); + session_data.setSessionData("subscriber_contact_method", request_headers.query.subscriber_contact_method); + session_data.setSessionData("subscriber_userid", 0); + session_data.setSessionData("registered", true); + var mailstore_exists = session_data.mailstore.mailstoreExists(); + var mailbox_exists = false; + if (!mailstore_exists) mailstore_exists = session_data.mailstore.createMailstore(); + if (mailstore_exists) { + if (!session_data.mailstore.mailboxExists(0)) { + // mailbox does not yet exist, create it + mailbox_exists = session_data.mailstore.createMailbox(0); + } + if (mailbox_exists) { + // Just created Inbox for the first time, so create the welcome message + session_data.mailstore.createWelcomeMessage(); + } + } + if (!session_data.saveSessionData(true, true)) { var errpage = wtvshared.doErrorPage(400); headers = errpage[0]; data = errpage[1]; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-register/register.js b/zefie_wtvp_minisrv/ServiceVault/wtv-register/register.js index 2de623ce..619a52ce 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-register/register.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-register/register.js @@ -3,12 +3,12 @@ var minisrv_service_file = true; headers = `200 OK Content-Type: text/html`; -var WTVRegister = require("./WTVRegister.js"); +var WTVRegister = require(classPath + "/WTVRegister.js"); var wtvr = new WTVRegister(minisrv_config); var namerand = Math.floor(Math.random() * 100000); var nickname = (minisrv_config.config.service_name + '_' + namerand) var human_name = nickname; -var isOldBuild = wtvshared.isOldBuild(ssid_sessions[socket.ssid]); +var isOldBuild = wtvshared.isOldBuild(session_data); var form_data = ``; if (minisrv_config.config.allow_guests) form_data += ``; var main_data = `
      + + + +Users setup + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + +
      + + + +
      + +${minisrv_config.config.service_name} users +
      +
      +
      + + +Subscriber: +

      `; + var accounts = session_data.listPrimaryAccountUsers(); + + var num_accounts = session_data.getNumberOfUserAccounts(); + if (num_accounts > 1) data += "Additional users:"; + + data += "

      "; + + data += ` + +${accounts.subscriber.subscriber_username} + +

      `; + + if (num_accounts > 1) { + delete accounts.subscriber; + for (const [key, value] of Object.entries(accounts)) { + data += ` +${value.subscriber_username} +
      + +`; + + }; + } + data += ` +

      + +
      + + +
      + +
      + + +
      + +
      + + + 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> + + + + +
      + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-name.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-name.js new file mode 100644 index 00000000..fc1acdce --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-name.js @@ -0,0 +1,137 @@ +var minisrv_service_file = true; +var errpage; + + +if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); +else if (session_data.getNumberOfUserAccounts() > minisrv_config.config.user_accounts.max_users_per_account) errpage = wtvshared.doErrorPage(400, "You are not authorized to add more than " + minisrv_config.config.user_accounts.max_users_per_account + ` account${minisrv_config.config.user_accounts.max_users_per_account > 1 ? 's' : ''}.`); + + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + data = ` + + + +Adding a User + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +User's Internet name + +
      + +
      + + + + + +
      + + +
      +Type an Internet
      +name`; + if (request_headers.query.display_name) { + data += ` for ${request_headers.query.display_name}.` + } else { + data += "." + } data += ` +

      Internet names can
      +contain letters and
      +numbers, but no
      +spaces. + +

      +
      + + + + + +
      +Internet name
      + +
      +
      + +
      +
      +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-password.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-password.js new file mode 100644 index 00000000..c61e257c --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user-password.js @@ -0,0 +1,150 @@ +var minisrv_service_file = true; +var errpage = null; + +const WTVRegister = require(classPath + "/WTVRegister.js") +const wtvr = new WTVRegister(minisrv_config, SessionStore); + +if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); +else if (!request_headers.query.user_name) errpage = doErrorPage(400, "Please enter a username."); +else if (request_headers.query.user_name.length < minisrv_config.config.user_accounts.min_username_length) errpage = wtvshared.doErrorPage(400, "Please choose a username with " + minisrv_config.config.user_accounts.min_username_length + " or more characters."); +else if (request_headers.query.user_name.length > minisrv_config.config.user_accounts.max_username_length) errpage = wtvshared.doErrorPage(400, "Please choose a username with " + minisrv_config.config.user_accounts.max_username_length + " or less characters."); +else if (!wtvr.checkUsernameSanity(request_headers.query.user_name)) errpage = wtvshared.doErrorPage(400, "The username you have chosen contains invalid characters. Please choose a username with only letters, numbers, _ or -. Also, please be sure your username begins with a letter."); +else if (!wtvr.checkUsernameAvailable(request_headers.query.user_name)) errpage = wtvshared.doErrorPage(400, "The username you have selected is already in use. Please select another username."); +else if (session_data.getNumberOfUserAccounts() > minisrv_config.config.user_accounts.max_users_per_account) errpage = wtvshared.doErrorPage(400, "You are not authorized to add more than " + minisrv_config.config.user_accounts.max_users_per_account + ` account${minisrv_config.config.user_accounts.max_users_per_account > 1 ? 's' : ''}.`); + + + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + data = ` + + + +Adding a User + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +Optional password + +
      + +
      + + + + + + +
      + + +
      +Type an optional
      +password from ${minisrv_config.config.passwords.min_length} to +
      ${minisrv_config.config.passwords.max_length} characters long. +

      You'll need to type
      +the password
      +Whenever you switch to ${request_headers.query.user_name}.
      +

      Leave the spaces
      +blank if you don't
      +want a password. + +

      +
      + + + + + +
      +Password
      + +
      +
      +
      Type again to confirm
      + +
      +
      +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user.js new file mode 100644 index 00000000..bda36f7b --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/add-user.js @@ -0,0 +1,135 @@ +var minisrv_service_file = true; +var errpage; + +if (Object.keys(session_data.listPrimaryAccountUsers()).length >= minisrv_config.config.user_accounts.max_users_per_account) { + errpage = wtvshared.doErrorPage(400, "You are not authorized to add more than " + minisrv_config.config.user_accounts.max_users_per_account + ` account${minisrv_config.config.user_accounts.max_users_per_account > 1 ? 's' : ''}.`); +} +else if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); + + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + data = ` + + + +Adding person's name + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +User's name + +
      + +
      +

      + + + + +
      + + +
      +Type the person's
      +display name
      +here. They are
      +included when the
      +user sends mail. +

      Leave the space
      +blank if you don't
      +want to type this
      +person's name. + +

      +
      + + + +
      +Display name
      + + +
      +
      +

      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/choose-bg-songs.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/choose-bg-songs.js index e5f714b4..8be43e7e 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/choose-bg-songs.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/choose-bg-songs.js @@ -1,7 +1,6 @@ var minisrv_service_file = true; -var WTVBGMusic = require("./WTVBGMusic.js"); -var wtvbgm = new WTVBGMusic(minisrv_config, ssid_sessions[socket.ssid]) +const wtvbgm = new WTVBGMusic(minisrv_config, session_data); var catsListed = 0; var categories = wtvbgm.getCategoryList(); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-password.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-password.js new file mode 100644 index 00000000..29d01e0a --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-password.js @@ -0,0 +1,166 @@ +var minisrv_service_file = true; + +session_data.loadSessionData(); + +var user_id = (request_headers.query.user_id) ? request_headers.query.user_id : session_data.user_id; + +// security +if (session_data.user_id != 0 && session_data.user_id != user_id) { + user_id = null; // force unset + var errpage = wtvshared.doErrorPage(400, "You are not authorized to change the selected user's password."); + headers = errpage[0]; + data = errpage[1]; +} + +if (user_id != null) { + var userSession = null; + if (session_data.user_id == request_headers.query.user_id) userSession = session_data; + else { + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + } + + if (!userSession.loadSessionData()) { + var errpage = wtvshared.doErrorPage(400, "Invalid user ID."); + headers = errpage[0]; + data = errpage[1]; + } + else { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html`; + + data = ` + + + +Change ${(user_id == session_data.user_id) ? 'your' : 'user'} password + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +Change ${(user_id == session_data.user_id) ? 'your' : 'user'} password + +
      + +
      +

      + + + + +
      + + +
      +Type a password
      +from ${minisrv_config.config.passwords.min_length} to ${minisrv_config.config.passwords.max_length}
      +characters long. +

      This password will be
      +required to access
      +this account. If you
      +don't want this
      +account to have a
      +password, leave
      +these spaces blank. + +

      +
      + + + + + +
      +Password
      +`; + if (request_headers.Referer) data += ` +`; + +data += ` +
      +
      +
      Type again to confirm
      + + +
      +
      +

      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; + } +} +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-begin.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-begin.js new file mode 100644 index 00000000..75155bdb --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-begin.js @@ -0,0 +1,163 @@ +var minisrv_service_file = true; +session_data.loadSessionData(); + +var user_id = null; +if (request_headers.query.user_id) { + user_id = request_headers.query.user_id; +} else { + user_id = session_data.user_id; +} + +// security +if (session_data.user_id != 0 && session_data.user_id != request_headers.query.user_id) { + user_id = null; // force unset + var errpage = doErrorPage(400, "You are not authorized to edit the selected user."); + headers = errpage[0]; + data = errpage[1]; +} + +if (user_id != null) { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + var userSession = null; + if (session_data.user_id == request_headers.query.user_id) userSession = session_data; + else { + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + } + + if (!userSession.loadSessionData()) { + var errpage = doErrorPage(400, "Invalid user ID."); + headers = errpage[0]; + data = errpage[1]; + } else { + + data = ` + + + +Changing ${(user_id == 0) ? 'subscriber' : 'user'} information + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +${(user_id == 0) ? 'Subscriber' : 'User'} information + +
      + +
      +

      + + + + +
      + + +
      +Choose any item to +change the +information. +

      Choose Done when +you're finished. + +

      +
      + + + + + + + +
      +Username:
      +${userSession.getSessionData("subscriber_username")} + +
      +
      +Display Name:
      + +${userSession.getSessionData("subscriber_name")} + +
      +
      +Password: +
      + +${(userSession.getUserPasswordEnabled()) ? "Change Password" : "Set Password"} + +
      +
      +

      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; + } +} +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-name.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-name.js new file mode 100644 index 00000000..8549067d --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/edit-user-name.js @@ -0,0 +1,151 @@ +var minisrv_service_file = true; + +session_data.loadSessionData(); + +var user_id = (request_headers.query.user_id) ? request_headers.query.user_id : session_data.user_id; + +// security +if (session_data.user_id != 0 && session_data.user_id != request_headers.query.user_id) { + user_id = null; // force unset + var errpage = wtvshared.doErrorPage(400, "You are not authorized to change the selected user's password."); + headers = errpage[0]; + data = errpage[1]; +} + +if (user_id != null) { + var userSession = null; + if (session_data.user_id == request_headers.query.user_id) userSession = session_data; + else { + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + } + + if (!userSession.loadSessionData()) { + var errpage = wtvshared.doErrorPage(400, "Invalid user ID."); + headers = errpage[0]; + data = errpage[1]; + } + else { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html`; + + data = ` + + + +Changing your name + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +Your name + +
      + +
      +

      + + + + +
      + + +
      +Change your display
      +name here. +

      Your name is
      +included on your
      +mail and news posts.
      +
      +Leave the field blank
      +to set your display name to
      +${userSession.getSessionData('subscriber_username')}. + +

      +
      + + + +
      +Display name
      + + +
      +
      +

      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + +`; + } +} +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js index 94b5544a..a754e438 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js @@ -1,5 +1,6 @@ -var WTVBGMusic = require("./WTVBGMusic.js"); -var wtvbgm = new WTVBGMusic(minisrv_config, ssid_sessions[socket.ssid]) +var minisrv_service_file = true; + +const wtvbgm = new WTVBGMusic(minisrv_config, session_data); var music_obj = wtvbgm.getMusicObj(); headers = ` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-settings.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-settings.js index b8c2fd1d..e131e711 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-settings.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-settings.js @@ -1,31 +1,41 @@ var minisrv_service_file = true; -var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup"); -if (settings_obj === null) settings_obj = {}; +if (session_data.lockdown) { + headers = `200 OK +wtv-printer-model: -1,-1 +wtv-printer-pen: 0,0,1,0 +wtv-printer-setup: 0,0,1,0 +wtv-language-header: en-US,en +Content-Type: text/html`; + data = ""; +} else { -settings_obj["from-server"] = 1; + var settings_obj = session_data.getSessionData("wtv-setup"); + if (settings_obj === null) settings_obj = {}; -// defaults -if (!settings_obj["setup-advanced-options"]) settings_obj["setup-advanced-options"] = 0; -if (!settings_obj["setup-play-bgm"]) settings_obj["setup-play-bgm"] = 0; -if (!settings_obj["setup-bgm-tempo"]) settings_obj["setup-bgm-tempo"] = -1; -if (!settings_obj["setup-bgm-volume"]) settings_obj["setup-bgm-volume"] = 100; -if (!settings_obj["setup-background-color"]) settings_obj["setup-background-color"] = "c6c6c6"; -if (!settings_obj["setup-font-sizes"]) settings_obj["setup-font-sizes"] = "medium"; -if (!settings_obj["setup-in-stereo"]) settings_obj["setup-in-stereo"] = 1; -if (!settings_obj["setup-keyboard"]) settings_obj["setup-keyboard"] = "alphabetical"; -if (!settings_obj["setup-link-color"]) settings_obj["setup-link-color"] = "2222bb"; -if (!settings_obj["setup-play-songs"]) settings_obj["setup-play-songs"] = 1; -if (!settings_obj["setup-play-sounds"]) settings_obj["setup-play-sounds"] = 1; -if (!settings_obj["setup-text-color"]) settings_obj["setup-text-color"] = 0; -if (!settings_obj["setup-visited-color"]) settings_obj["setup-visited-color"] = "8822bb"; -if (!settings_obj["setup-japan-keyboard"]) settings_obj["setup-japan-keyboard"] = "roman"; -if (!settings_obj["setup-japan-softkeyboard"]) settings_obj["setup-japan-softkeyboard"] = "roman" -if (!settings_obj["setup-chat-access-level"]) settings_obj["setup-chat-access-level"] = 0; -if (!settings_obj["setup-chat-on-nontrusted-pages"]) settings_obj["setup-chat-on-nontrusted-pages"] = 1; -if (!settings_obj["setup-tv-chat-level"]) settings_obj["setup-tv-chat-level"] = 2; + settings_obj["from-server"] = 1; -headers = `200 OK + // defaults + if (!settings_obj["setup-advanced-options"]) settings_obj["setup-advanced-options"] = 0; + if (!settings_obj["setup-play-bgm"]) settings_obj["setup-play-bgm"] = 0; + if (!settings_obj["setup-bgm-tempo"]) settings_obj["setup-bgm-tempo"] = -1; + if (!settings_obj["setup-bgm-volume"]) settings_obj["setup-bgm-volume"] = 100; + if (!settings_obj["setup-background-color"]) settings_obj["setup-background-color"] = "c6c6c6"; + if (!settings_obj["setup-font-sizes"]) settings_obj["setup-font-sizes"] = "medium"; + if (!settings_obj["setup-in-stereo"]) settings_obj["setup-in-stereo"] = 1; + if (!settings_obj["setup-keyboard"]) settings_obj["setup-keyboard"] = "alphabetical"; + if (!settings_obj["setup-link-color"]) settings_obj["setup-link-color"] = "2222bb"; + if (!settings_obj["setup-play-songs"]) settings_obj["setup-play-songs"] = 1; + if (!settings_obj["setup-play-sounds"]) settings_obj["setup-play-sounds"] = 1; + if (!settings_obj["setup-text-color"]) settings_obj["setup-text-color"] = 0; + if (!settings_obj["setup-visited-color"]) settings_obj["setup-visited-color"] = "8822bb"; + if (!settings_obj["setup-japan-keyboard"]) settings_obj["setup-japan-keyboard"] = "roman"; + if (!settings_obj["setup-japan-softkeyboard"]) settings_obj["setup-japan-softkeyboard"] = "roman" + if (!settings_obj["setup-chat-access-level"]) settings_obj["setup-chat-access-level"] = 0; + if (!settings_obj["setup-chat-on-nontrusted-pages"]) settings_obj["setup-chat-on-nontrusted-pages"] = 1; + if (!settings_obj["setup-tv-chat-level"]) settings_obj["setup-tv-chat-level"] = 2; + + headers = `200 OK wtv-backgroundmusic-load-playlist: wtv-setup:/get-playlist wtv-printer-model: -1,-1 wtv-printer-pen: 0,0,1,0 @@ -33,10 +43,11 @@ wtv-printer-setup: 0,0,1,0 wtv-language-header: en-US,en Content-Type: text/html`; -data = ""; + data = ""; -Object.keys(settings_obj).forEach(function (k, v) { - data += k + "=" + escape(settings_obj[k]) + "&"; -}); + Object.keys(settings_obj).forEach(function (k, v) { + data += k + "=" + escape(settings_obj[k]) + "&"; + }); -data = data.substring(0, (data.length - 1)); \ No newline at end of file + data = data.substring(0, (data.length - 1)); +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/images/AccountBanner.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/images/AccountBanner.gif new file mode 100644 index 00000000..8eb45ba3 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/images/AccountBanner.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js index 69e48563..81c7493a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js @@ -1,5 +1,6 @@ var minisrv_service_file = true; -var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup"); + +var settings_obj = session_data.getSessionData("wtv-setup"); if (settings_obj === null) settings_obj = {}; headers = `200 OK diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail-signature.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail-signature.js index e9f2e848..3f8af98a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail-signature.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail-signature.js @@ -84,7 +84,7 @@ cols=45 rows=5 autoactivate nosoftbreaks maxlength=4096 -font=proportional>${ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || ""}
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail.js index abda916f..0d06ae61 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/mail.js @@ -22,7 +22,7 @@ Mail settings
      - +
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-account.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-account.js new file mode 100644 index 00000000..21c75070 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-account.js @@ -0,0 +1,126 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + +data = ` + + + +Messenger account + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + +
      + + + +
      + +Messenger account +
      +
      +
      + + + +
      +Type your Messenger account details here. +

      The settings will take effect +the next time you connect to WebTV. +

      +
      + + + +
      +User Name
      + +

      + + +

      +Password + +

      +Type again to verify + +

      +
      + +
      + + +
      + +
      + + +
      + +
      + + + + + + +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-edit-list.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-edit-list.js new file mode 100644 index 00000000..dacfe7d1 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-edit-list.js @@ -0,0 +1,238 @@ +var minisrv_service_file = true; + +headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + +data = ` + + + + + Choose who can send messages + + + + + + + + +
      +
      + + + + + +
      +
      + + +
      + + + +
      + + + + Choose who can send messages + + + + +
      +Help +
      + +
      +
      + + + +
      + + +
      + + + +
      +
      + + + + + + + +
      + +
      +
      +
      + + + +
      + + + + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-enable.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-enable.js new file mode 100644 index 00000000..1767b8dd --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-enable.js @@ -0,0 +1,20 @@ +var minisrv_service_file = true; + +if (!session_data.getSessionData("messenger_enabled") == 1) { + session_data.setSessionData("messenger_enabled", 1); + session_data.saveSessionData; + var justenabled = "true" + var enablestatus = "1" +} else { + session_data.setSessionData("messenger_enabled", 0); + session_data.saveSessionData; + var justenabled = "false" + var enablestatus = "0" +} + +headers = `300 OK +Content-type: text/html +wtv-expire: wtv-setup:/messenger +Location: wtv-setup:/messenger?just_enabled=${justenabled} +wtv-messenger-enable: ${enablestatus} +`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-info.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-info.js new file mode 100644 index 00000000..52d99377 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/messenger-info.js @@ -0,0 +1,195 @@ +var minisrv_service_file = true; + + +headers = `200 OK` + + +data = ` + + + + +Messenger + + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + +
      + + + +
      + +Messenger +
      +
      +
      + + + +
      +Messenger is currently `; +if (session_data.getSessionData("messenger_enabled") == 1) { + data += "on" +} else { + data += "off" +} data += `. +
      +
      + + + +
      +Turn messenger `; +if (!session_data.getSessionData("messenger_enabled") == 1) { + data += "on" +} else { + data += "off" +} data += ` +

      +Change your account +

      +Advanced Info +

      + +
      + +
      + + +
      + +
      + + +
      + +
      + + +
      + + +
      +
      +
      + + +`; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/phone.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/phone.js index c8a02f1d..66d64754 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/phone.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/phone.js @@ -82,7 +82,7 @@ Dialing options Call waiting
      Call waiting can be turned off automatically

      -Use an ISP
      +Use an ISP
      Save money if you dial long distance to WebTV
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/remove-users.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/remove-users.js new file mode 100644 index 00000000..e3f25a49 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/remove-users.js @@ -0,0 +1,165 @@ +var minisrv_service_file = true; +var errpage; + +if (Object.keys(session_data.listPrimaryAccountUsers()).length == 1) { + errpage = wtvshared.doErrorPage(400, "There are no more users to remove."); +} +else if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + headers = `200 OK +Connection: Keep-Alive +wtv-expire-all: wtv-setup:/remove-users +wtv-expire-all: wtv-setup:/validate-remove-users +Content-Type: text/html` + + data = ` + + + +Remove users + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + + +
      + +
      + + + Remove users + +
      + + +
      + + Mark users to remove permanently from your account, + then choose Remove. + + +
      +
      +
      + + + + + + +`; + } + } + + data += ` +
      +
      +
      +
      + +Name + +New Messages +
      +
      +
      +
      + +

      +`; + + var accounts = session_data.listPrimaryAccountUsers(); + + var num_accounts = session_data.getNumberOfUserAccounts(); + if (num_accounts > 1) { + delete accounts.subscriber; + for (const [key, value] of Object.entries(accounts)) { + var userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = parseInt(key.replace("user", '')); + + var mailcount = 0; + if (userSession.mailstore.mailstoreExists()) { + if (userSession.mailstore.mailboxExists(0)) { + mailcount = userSession.mailstore.countUnreadMessages(0); + } + } + + data += ` + +
      +
      ${value.subscriber_username} +${mailcount} +
      +
      + +
      + + +
      + +
      + + +
      + +
      + + + + + + + +
      + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js index e1e81467..6603ca78 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js @@ -1,6 +1,8 @@ +var minisrv_service_file = true; + var music_obj = {}; -ssid_sessions[socket.ssid].setSessionData("wtv-bgmusic", music_obj); -ssid_sessions[socket.ssid].saveSessionData(); +session_data.setSessionData("wtv-bgmusic", music_obj); +session_data.saveSessionData(); headers = `300 OK Location: wtv-setup:/choose-bg-songs wtv-backgroundmusic-load-playlist: wtv-setup:/get-playlist`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/screen.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/screen.js index 6b4b60c0..3fdd3eaa 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/screen.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/screen.js @@ -75,7 +75,7 @@ Television Center WebTV on your screen
      `; // old classic apparently can do Screen Border -if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app") { +if (session_data.get("wtv-client-rom-type") == "bf0app") { data += `
      Border
      Change the color of the screen border
      `; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/serve-billing-overview.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/serve-billing-overview.js index 3b019b2a..5f117a24 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/serve-billing-overview.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/serve-billing-overview.js @@ -10,7 +10,7 @@ data = ` -Your WebTV account +Your ${minisrv_config.config.service_name} account @@ -51,36 +51,28 @@ Your WebTV account
      -Your WebTV account +Your ${minisrv_config.config.service_name} account
      -Subscriber info
      +Subscriber info

      -Change your address, phone number, and password
      +Change your display name and/or password

      -How you pay
      +Additional Users

      -Change the way you pay for WebTV service
      -
      -ISP options
      -
      -Save money if you dial long-distance to WebTV
      +Manage additional user accounts
      -Billing statement
      -
      -For your account
      -
      Terms of service

      Rules and regulations

      Privacy policy

      -Your personal information
      +How we use your personal information
      @@ -102,7 +94,7 @@ Your WebTV account
      -
      +
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set-bg.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set-bg.js index cdb29ba0..1bbf2430 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set-bg.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set-bg.js @@ -1,8 +1,7 @@ var minisrv_service_file = true; -var WTVBGMusic = require("./WTVBGMusic.js"); -var wtvbgm = new WTVBGMusic(minisrv_config, ssid_sessions[socket.ssid]); if (request_headers.query.category) { + const wtvbgm = new WTVBGMusic(minisrv_config, session_data); var musicList = wtvbgm.getCategorySongList(request_headers.query.category); var categoryName = wtvbgm.getCategoryName(request_headers.query.category); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js index 4ff62eba..bdd31820 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js @@ -1,14 +1,14 @@ var minisrv_service_file = true; -if (request_headers.query && ssid_sessions[socket.ssid]) { - var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup"); + +if (request_headers.query && session_data) { + var settings_obj = session_data.getSessionData("wtv-setup"); if (settings_obj === null) settings_obj = {}; Object.keys(request_headers.query).forEach(function (k) { settings_obj[k] = request_headers.query[k]; }); - console.log(settings_obj); - ssid_sessions[socket.ssid].setSessionData("wtv-setup", Object.assign({}, settings_obj)); - ssid_sessions[socket.ssid].saveSessionData(); + session_data.setSessionData("wtv-setup", Object.assign({}, settings_obj)); + session_data.saveSessionData(); headers = `200 OK Content-type: text/html`; } else { diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/setup.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/setup.js index ffef0692..ebee2778 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/setup.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/setup.js @@ -1,5 +1,4 @@ var minisrv_service_file = true; -var { WTVShared, clientShowAlert } = require("./WTVShared.js"); var notImplementedAlert = new clientShowAlert({ 'image': minisrv_config.config.service_logo, @@ -63,7 +62,7 @@ hspace=0 vspace=0
      Settings -for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"} +for ${session_data.getSessionData("subscriber_username") || "You"}

      Signature and more
      -
      `; -// password -if (!minisrv_config.config.hide_incomplete_features) { - data += `Change your password
      -
      `; -} -data += `Options for your TV
      +
      +Change your password
      +
      +Options for your TV

      Make text bigger or smaller

      @@ -147,14 +147,15 @@ if (!minisrv_config.config.hide_incomplete_features) { data += `Change how you print

      `; } -data += `Choose an on-screen keyboard
      -
      `; -// extra users -if (!minisrv_config.config.hide_incomplete_features) { - data += `Add, change, or remove users
      -
      `; +data += `Choose an on-screen keyboard
      `; +if (session_data.user_id == 0) { + data += `
      +Add, change, or remove users
      `; } - data += ` +data += `
      +Configure Messenger
      `; + +data += `
      Connecting to WebTV
      diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/sound.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/sound.js index 888867d8..6b2f0e43 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/sound.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/sound.js @@ -1,5 +1,5 @@ var minisrv_service_file = true; -var canDoMuzac = ssid_sessions[socket.ssid].hasCap('client-can-do-muzac'); +var canDoMuzac = session_data.hasCap('client-can-do-muzac'); headers = `200 OK Connection: Keep-Alive diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user-done.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user-done.js new file mode 100644 index 00000000..62bf5571 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user-done.js @@ -0,0 +1,67 @@ +var minisrv_service_file = true; +var userSession = null; +var errpage = null; + +if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); + +// seperate if statements as to not overwrite the first error if multiple occur + +if (!errpage) { + if (request_headers.query.user_password) { + if (request_headers.query.user_password.length < minisrv_config.config.passwords.min_length) errpage = wtvshared.doErrorPage(400, "Your password must contain at least " + minisrv_config.config.passwords.min_length + " characters."); + else if (request_headers.query.user_password.length > minisrv_config.config.passwords.max_length) errpage = wtvshared.doErrorPage(400, "Your password must contain no more than than " + minisrv_config.config.passwords.max_length + " characters."); + else if (request_headers.query.user_password !== request_headers.query.user_password2) errpage = wtvshared.doErrorPage(400, "The passwords you entered did not match. Please check them and try again."); + } + else if (!request_headers.query.user_name) errpage = wtvshared.doErrorPage(400, "Please enter a username."); +} + +if (!errpage) { + if (session_data.getNumberOfUserAccounts() > minisrv_config.config.user_accounts.max_users_per_account) errpage = wtvshared.doErrorPage(400, "You are not authorized to add more than " + minisrv_config.config.user_accounts.max_users_per_account + ` account${minisrv_config.config.user_accounts.max_users_per_account > 1 ? 's' : ''}.`); +} + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + if (!request_headers.query.display_name) request_headers.query.display_name = request_headers.query.username; + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + var freeUserId = session_data.findFreeUserSlot(session_data); + if (freeUserId) { + userSession.user_id = freeUserId; + userSession.setSessionData("subscriber_userid", freeUserId); + userSession.setSessionData("subscriber_name", request_headers.query.display_name); + userSession.setSessionData("subscriber_username", request_headers.query.user_name); + userSession.setSessionData("registered", true); + var mailstore_exists = userSession.mailstore.mailstoreExists(); + var mailbox_exists = false; + if (!mailstore_exists) mailstore_exists = userSession.mailstore.createMailstore(); + if (mailstore_exists) { + if (!userSession.mailstore.mailboxExists(0)) { + // mailbox does not yet exist, create it + mailbox_exists = userSession.mailstore.createMailbox(0); + } + if (mailbox_exists) { + // Just created Inbox for the first time, so create the welcome message + userSession.mailstore.createWelcomeMessage(); + } + } + if (!userSession.saveSessionData(true, true)) { + var errpage = wtvshared.doErrorPage(400); + headers = errpage[0]; + data = errpage[1]; + } else { + if (request_headers.query.user_password) { + userSession.setUserPassword(request_headers.query.user_password); + userSession.setUserLoggedIn(true); + } + + + headers = `300 OK +Content-type: text/html +wtv-expire: wtv-setup:/accounts +Location: wtv-setup:/accounts`; + } + } +} + +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js new file mode 100644 index 00000000..8f1b3328 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-add-user.js @@ -0,0 +1,178 @@ +var minisrv_service_file = true; +var errpage = null; + +if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to add users to this account."); + +// seperate if statements as to not overwrite the first error if multiple occur + +if (!errpage) { + if (session_data.getNumberOfUserAccounts() > minisrv_config.config.user_accounts.max_users_per_account) errpage = wtvshared.doErrorPage(400, "You are not authorized to add more than " + minisrv_config.config.user_accounts.max_users_per_account + ` account${minisrv_config.config.user_accounts.max_users_per_account > 1 ? 's' : ''}.`); +} + +if (!errpage) { + if (request_headers.query.user_password) { + if (request_headers.query.user_password.length < minisrv_config.config.passwords.min_length) errpage = wtvshared.doErrorPage(400, "Your password must contain at least " + minisrv_config.config.passwords.min_length + " characters."); + else if (request_headers.query.user_password.length > minisrv_config.config.passwords.max_length) errpage = wtvshared.doErrorPage(400, "Your password must contain no more than than " + minisrv_config.config.passwords.max_length + " characters."); + else if (request_headers.query.user_password !== request_headers.query.user_password2) errpage = wtvshared.doErrorPage(400, "The passwords you entered did not match. Please check them and try again."); + } + else if (!request_headers.query.user_name) errpage = wtvshared.doErrorPage(400, "Please enter a username."); +} + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + + data = ` + + + +Adding a user + + + + + + +
      + + +
      + + + +
      + +
      +
      +
      + +
      + +
      +
      + +
      +
      +
      + +
      +
      +
      + + + + + + + + + +
      + + +Adding a user + +
      + +
      +

      + + + + +
      + + + + + + + + + + +
      +You are adding + +${request_headers.query.user_name}
      +
      +to your account. +
      +
      +Display Name: + +${request_headers.query.display_name || request_headers.query.user_name} + +
      +
      +
      +
      + + + +
      +`; + if ((request_headers.query.user_password) == "") { + data += `No password`; + } else { + data += `Has password`; + } + data += ` + +
      +
      +

      +
      +
      + + +
      +
      + + +
      +
      + + +
      + + + + +
      + + + +`; +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-bg-song-category.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-bg-song-category.js index d5f47471..79c2f9e1 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-bg-song-category.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-bg-song-category.js @@ -1,9 +1,9 @@ -if (request_headers.query && ssid_sessions[socket.ssid]) { +var minisrv_service_file = true; + +if (request_headers.query && session_data) { if (request_headers.request_url.indexOf('?') >= 0) { var category = (request_headers.query.category) ? request_headers.query.category : null; - var WTVBGMusic = require("./WTVBGMusic.js"); - var wtvbgm = new WTVBGMusic(minisrv_config, ssid_sessions[socket.ssid]) var music_obj = wtvbgm.getMusicObj(); var old_music_obj = Object.assign({}, music_obj); @@ -40,8 +40,8 @@ if (request_headers.query && ssid_sessions[socket.ssid]) { music_obj = Object.assign({}, music_obj) if ((Object.keys(music_obj.enableCategories).length != Object.keys(old_music_obj.enableCategories).length) || (Object.keys(music_obj.enableSongs).length != Object.keys(old_music_obj.enableSongs).length)) { // something changed - ssid_sessions[socket.ssid].setSessionData("wtv-bgmusic", music_obj); - ssid_sessions[socket.ssid].saveSessionData(); + session_data.setSessionData("wtv-bgmusic", music_obj); + session_data.saveSessionData(); headers = `200 OK Content-type: text/html wtv-backgroundmusic-load-playlist: wtv-setup:/get-playlist`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-name.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-name.js new file mode 100644 index 00000000..501f850f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-name.js @@ -0,0 +1,39 @@ +var minisrv_service_file = true; + +session_data.loadSessionData(); + +var user_id = (request_headers.query.user_id) ? request_headers.query.user_id : session_data.user_id; + +// security +if (session_data.user_id != 0 && session_data.user_id != request_headers.query.user_id) { + user_id = null; // force unset + var errpage = wtvshared.doErrorPage(400, "You are not authorized to change the selected user's password."); + headers = errpage[0]; + data = errpage[1]; +} + +if (user_id != null) { + var userSession; + if (session_data.user_id == request_headers.query.user_id) userSession = session_data; + else { + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + } + + if (!userSession.loadSessionData()) { + var errpage = wtvshared.doErrorPage(400, "Invalid user ID."); + headers = errpage[0]; + data = errpage[1]; + } + else { + var user_name = userSession.getSessionData('subscriber_username'); + userSession.setSessionData('subscriber_name', (request_headers.query.display_name) ? request_headers.query.display_name : user_name); + userSession.saveSessionData(); + headers = `300 OK +Content-type: text/html +wtv-expire: wtv-setup:/edit-user-begin?user_id=${user_id} +wtv-expire: wtv-setup:/edit-user-name?user_id=${user_id} +Location: wtv-setup:/edit-user-begin?user_id=${user_id}`; + } +} +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-password.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-password.js new file mode 100644 index 00000000..0fefcad5 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-change-password.js @@ -0,0 +1,80 @@ +var minisrv_service_file = true; +var userSession = null; + +session_data.loadSessionData(); + +var user_id = null; +if (request_headers.query.user_id) { + user_id = request_headers.query.user_id; +} else { + var errpage = doErrorPage(400, "User was not specified."); + headers = errpage[0]; + data = errpage[1]; +} + +if (session_data.user_id != 0 && session_data.user_id != request_headers.query.user_id) { + user_id = null; // force unset + var errpage = doErrorPage(400, "You are not authorized to edit the selected user."); + headers = errpage[0]; + data = errpage[1]; +} + +if (user_id && !errpage) { + headers = `200 OK +Connection: Keep-Alive +Content-Type: text/html` + var userSession = null; + if (session_data.user_id == request_headers.query.user_id) userSession = session_data; + else { + userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.user_id = user_id; + } + + if (!userSession.loadSessionData()) { + var errpage = doErrorPage(400, "Invalid user ID."); + headers = errpage[0]; + data = errpage[1]; + } + else { + if (request_headers.query.password.length == 0 && request_headers.query.verify.length == 0) { + userSession.disableUserPassword(); + headers = `300 OK +Content-type: text/html +wtv-expire: wtv-setup:/setup +`; + if (request_headers.query.return_to) { + headers += `wtv-expire: ${request_headers.query.return_to} +Location: ${request_headers.query.return_to}`; + } + else headers += "Location: " + (session_data.user_id === user_id) ? 'wtv-setup:/setup' : 'wtv-setup:/accounts'; + } + else if (request_headers.query.password.length < minisrv_config.config.passwords.min_length) errpage = wtvshared.doErrorPage(400, "Your password must contain at least " + minisrv_config.config.passwords.min_length + " characters."); + else if (request_headers.query.password.length > minisrv_config.config.passwords.max_length) errpage = wtvshared.doErrorPage(400, "Your password must contain no more than than " + minisrv_config.config.passwords.max_length + " characters."); + else if (request_headers.query.password !== request_headers.query.verify) errpage = wtvshared.doErrorPage(400, "The passwords you entered did not match. Please check them and try again."); + else { + if (errpage) { + headers = errpage[0]; + data = errpage[1]; + } else { + userSession.setUserPassword(request_headers.query.password); + userSession.setUserLoggedIn(true); + headers = `300 OK +Content-type: text/html +wtv-expire: wtv-setup:/setup +`; + if (request_headers.query.return_to) { + headers += `wtv-expire: ${request_headers.query.return_to} +Location: ${request_headers.query.return_to}`; + } + else headers += "Location: "+ (session_data.user_id === user_id) ? 'wtv-setup:/setup' : 'wtv-setup:/accounts'; + } + } + } +} + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} + +if (userSession) userSession = null; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js index 2047017f..4536b2c5 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js @@ -1,6 +1,8 @@ -if (request_headers.query && ssid_sessions[socket.ssid]) { - ssid_sessions[socket.ssid].setSessionData("subscriber_signature", (request_headers.query.mail_signature) ? request_headers.query.mail_signature : ""); - ssid_sessions[socket.ssid].saveSessionData(); +var minisrv_service_file = true; + +if (request_headers.query && session_data) { + session_data.setSessionData("subscriber_signature", (request_headers.query.mail_signature) ? request_headers.query.mail_signature : ""); + session_data.saveSessionData(); headers = `200 OK Content-type: text/html` } else { diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-messenger-account.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-messenger-account.js new file mode 100644 index 00000000..6bca912f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-messenger-account.js @@ -0,0 +1,24 @@ +var minisrv_service_file = true; +var errpage; +if (request_headers.query.email.length < 2) errpage = wtvshared.doErrorPage(400, "Your User Name includes at least 2 characters."); +else if (request_headers.query.email.length > 16) errpage = wtvshared.doErrorPage(400, "Your User Name includes less than 17 characters."); +else if (request_headers.query.password.length < 8) errpage = wtvshared.doErrorPage(400, "Your password includes at least 8 characters."); +else if (request_headers.query.password.length > 20) errpage = wtvshared.doErrorPage(400, "Your password includes less than 21 characters."); +else if (request_headers.query.password !== request_headers.query.password_verify) errpage = wtvshared.doErrorPage(400, "The passwords you entered did not match. Please check them any try again."); + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + var encryptedpass = session_data.encryptPassword(request_headers.query.password); + + session_data.setSessionData("messenger_password", encryptedpass); + session_data.setSessionData("messenger_email", request_headers.query.email); + session_data.setSessionData("messenger_domain", request_headers.query.domain); + session_data.saveSessionData(); + + headers = `300 OK +wtv-expire-all: wtv-setup:/messenger-account +wtv-expire-all: wtv-setup:/validate-messenger-account +Location: wtv-setup:/messenger` +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-remove-users.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-remove-users.js new file mode 100644 index 00000000..d2c085be --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-remove-users.js @@ -0,0 +1,75 @@ +var minisrv_service_file = true; +var errpage; + +if (Object.keys(session_data.listPrimaryAccountUsers()).length == 1) { + errpage = wtvshared.doErrorPage(400, "There are no more users to remove."); +} +else if (session_data.user_id != 0) errpage = wtvshared.doErrorPage(400, "You are not authorized to remove users from this account."); + +var usersToRemove = []; +Object.keys(request_headers.query).forEach(function (k) { + if (k.substr(0, 4) === "user" && request_headers.query[k] === "on") { + usersToRemove.push(parseInt(k.replace("user", ""))); + } +}); + +if (usersToRemove.length === 0) errpage = wtvshared.doErrorPage(400, "No users were specified for removal."); + +if (errpage) { + headers = errpage[0]; + data = errpage[1]; +} else { + if (!request_headers.query.confirm_remove) { + var message = ''; + if (usersToRemove.length == 1) { + var userSession = new WTVClientSessionData(minisrv_config, socket.ssid); + userSession.switchUserID(usersToRemove[0]); + var userName = userSession.getSessionData("subscriber_username"); + message = `Removing ${userName} will permanently remove all of ${userName}'s e-mail and favorites as well. You will not be able to restore ${userName}.`; + } else { + message = "Removing the selected users will permanently remove their e-mail and favorites as well. You will not be able to restore the users."; + } + var removeurl = request_headers.request_url; + if (removeurl.indexOf('?') >= 0) { + removeurl = removeurl.substring(0, removeurl.indexOf('?')); + } + removeurl += "?"; + + Object.keys(usersToRemove).forEach(function (k) { + removeurl += "user" + usersToRemove[k] + "=on&"; + }); + removeurl += "confirm_remove=true"; + + var confirmAlert = new clientShowAlert({ + 'image': minisrv_config.config.service_logo, + 'message': message, + 'buttonlabel1': "Don't Remove", + 'buttonaction1': "client:donothing", + 'buttonlabel2': "Remove", + 'buttonaction2': removeurl, + 'noback': true, + }).getURL(); + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-setup:/remove-users +wtv-expire-all: wtv-setup:/accounts +wtv-visit: ${confirmAlert} +Location: ${confirmAlert}` + } else { + Object.keys(usersToRemove).forEach(function (k) { + session_data.removeUser(usersToRemove[k]); + }) + var num_accounts = session_data.getNumberOfUserAccounts(); + var gourl = "wtv-setup:/remove-users?"; + if (num_accounts == 1) gourl = "wtv-setup:/accounts?"; + + headers = `300 OK +Connection: Keep-Alive +Content-Type: text/html +wtv-expire-all: wtv-setup:/remove-users +wtv-expire-all: wtv-setup:/accounts +wtv-visit: ${gourl} +Location: ${gourl}` + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-screen-border.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-screen-border.js index 9f6dd938..c15c7b3c 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-screen-border.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-screen-border.js @@ -1,3 +1,5 @@ +var minisrv_service_file = true; + if (request_headers.query) { if (request_headers.query.shade) { headers = `300 OK 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/star.js b/zefie_wtvp_minisrv/ServiceVault/wtv-star/star.js new file mode 100644 index 00000000..22530c00 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-star/star.js @@ -0,0 +1,33 @@ +var minisrv_service_file = true; + +headers = `200 OK +Content-type: text/html +wtv-expire-all: wtv-` + +data = ` + + +${minisrv_config.config.service_name} Unavailable + + + + + + +
      +
      + + +
      + + + + + +
      + + +The ${minisrv_config.config.service_name} Network is temporarily unavailable. + +

      +Please try connecting later.` \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/info.js b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/info.js index 3e72a105..bd87d97c 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/info.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/info.js @@ -3,26 +3,26 @@ var minisrv_service_file = true; var client_caps = null; if (socket.ssid != null) { - if (ssid_sessions[socket.ssid].capabilities) { - client_caps = ssid_sessions[socket.ssid].capabilities; + if (session_data.capabilities) { + client_caps = session_data.capabilities; } } if (client_caps) { headers = `200 OK Content-Type: text/html` - + var service_ip = minisrv_config.config.service_ip var client_label = "TODO"; var boot_client_label = "TODO"; var wtv_system_sysconfig_str = "TODO"; - var wtv_system_version = ssid_sessions[socket.ssid].get("wtv-system-version"); - var wtv_client_bootrom_version = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version"); - var wtv_client_serial_number = wtvshared.filterSSID(ssid_sessions[socket.ssid].get("wtv-client-serial-number")); - var wtv_client_rom_type = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); - var wtv_system_chipversion_str = ssid_sessions[socket.ssid].get("wtv-system-chipversion"); - var wtv_system_sysconfig_hex = parseInt(ssid_sessions[socket.ssid].get("wtv-system-sysconfig")).toString(16); + var wtv_system_version = session_data.get("wtv-system-version"); + var wtv_client_bootrom_version = session_data.get("wtv-client-bootrom-version"); + var wtv_client_serial_number = wtvshared.filterSSID(session_data.get("wtv-client-serial-number")); + var wtv_client_rom_type = session_data.get("wtv-client-rom-type"); + var wtv_system_chipversion_str = session_data.get("wtv-system-chipversion"); + var wtv_system_sysconfig_hex = parseInt(session_data.get("wtv-system-sysconfig")).toString(16); var capabilities_table = new WTVClientCapabilities().capabilities_table; @@ -58,7 +58,7 @@ Content-Type: text/html`

      Service: - ${z_title} + ${minisrv_version_string}
      Client: @@ -82,19 +82,19 @@ Content-Type: text/html` ${socket.remoteAddress} `; - if (ssid_sessions[socket.ssid].getSessionData("registered")) { + if (session_data.getSessionData("registered")) { data += `
      Subscriber Name: - ${ssid_sessions[socket.ssid].getSessionData("subscriber_name")} + ${session_data.getSessionData("subscriber_name")}
      Subscriber Username: - ${ssid_sessions[socket.ssid].getSessionData("subscriber_username")} + ${session_data.getSessionData("subscriber_username")}
      Subscriber Contact: - ${ssid_sessions[socket.ssid].getSessionData("subscriber_contact")} (${ssid_sessions[socket.ssid].getSessionData("subscriber_contact_method")})`; + ${session_data.getSessionData("subscriber_contact")} (${session_data.getSessionData("subscriber_contact_method")})`; } else { data += `
      Unregistered Guest: @@ -113,7 +113,7 @@ Content-Type: text/html` &modem; `; - if (ssid_sessions[socket.ssid].get("wtv-need-upgrade")) { + if (session_data.get("wtv-need-upgrade")) { data += `
      Mini-browser: diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/nullify-me.js b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/nullify-me.js new file mode 100644 index 00000000..aa5df95f --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/nullify-me.js @@ -0,0 +1,16 @@ +var minisrv_service_file = true; + +// null is the new demo/flash + +if (session_data) { + if (session_data.data_store.wtvsec_login) { + if (session_data.data_store.wtvsec_login.ticket_store) { + if (session_data.data_store.wtvsec_login.ticket_store.user_id != null) { + if (session_data.data_store.wtvsec_login.ticket_store.user_id >= 0) + session_data.switchUserID(-1); + } + } + } +} + +headers = "400 You are now nullified."; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/register.js b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/register.js index c9be28be..b149a7f4 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/register.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/register.js @@ -3,7 +3,7 @@ var minisrv_service_file = true; headers = `200 OK Content-Type: text/html`; -if (ssid_sessions[socket.ssid].getSessionData("registered")) { +if (session_data.getSessionData("registered")) { var redirect = [10, "client:goback?"]; var message = "Error: Your box is already registered. If you would like to re-register, you must first unregister."; } else if (request_headers.query.confirm_register) { diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/tricks.js b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/tricks.js index b14b558e..f2fda2c4 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/tricks.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/tricks.js @@ -41,7 +41,7 @@ data = ` Show Services `; -if (ssid_sessions[socket.ssid].getSessionData("registered")) data += `Unregister This Box`; +if (session_data.getSessionData("registered")) data += `Unregister This Box`; else data += `Register This Box` data += ` diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/unregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/unregister.js index 7e7a2646..f3c5b41f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/unregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-tricks/unregister.js @@ -3,13 +3,18 @@ var minisrv_service_file = true; headers = `200 OK Content-Type: text/html`; -if (!ssid_sessions[socket.ssid].getSessionData("registered")) { +if (!session_data.getSessionData("registered")) { headers += "\nwtv-noback-all: wtv-"; headers += "\nwtv-expire-all: wtv-"; var redirect = [5, "client:relogin?"]; var message = "Error: Your box is not registered. You are accessing " + minisrv_config.config.service_name + " in Guest Mode. There is nothing to delete!"; +} else if (session_data.user_id !== 0) { + headers += "\nwtv-noback-all: wtv-"; + headers += "\nwtv-expire-all: wtv-"; + var redirect = [5, "wtv-tricks:/tricks"]; + var message = "Error: You must be the primary user to unregister this box."; } else if (request_headers.query.confirm_unregister) { - if (ssid_sessions[socket.ssid].unregisterBox()) { + if (session_data.unregisterBox()) { headers += "\nwtv-noback-all: wtv-"; headers += "\nwtv-expire-all: wtv-"; var redirect = [3, "client:relog?"]; diff --git a/zefie_wtvp_minisrv/SharedROMCache/AT_BannerGradient.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerGradient.gif new file mode 100644 index 00000000..9ae0dc54 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerGradient.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/AT_BannerIcon.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerIcon.gif new file mode 100644 index 00000000..2d2f8c48 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AT_BannerIcon.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/AT_BottomShadow.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_BottomShadow.gif new file mode 100644 index 00000000..637d7ad6 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AT_BottomShadow.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/AT_Shadow.gif b/zefie_wtvp_minisrv/SharedROMCache/AT_Shadow.gif new file mode 100644 index 00000000..fba1f05a Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AT_Shadow.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/AccountBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/AccountBanner.gif new file mode 100644 index 00000000..8eb45ba3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AccountBanner.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/AroundTownIcon2.gif b/zefie_wtvp_minisrv/SharedROMCache/AroundTownIcon2.gif new file mode 100644 index 00000000..396f1b3c Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/AroundTownIcon2.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/BannerMail.gif b/zefie_wtvp_minisrv/SharedROMCache/BannerMail.gif new file mode 100644 index 00000000..a7e9f4fe Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/BannerMail.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/BulletArrow.gif b/zefie_wtvp_minisrv/SharedROMCache/BulletArrow.gif new file mode 100644 index 00000000..ae5eab66 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/BulletArrow.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/Chat.gif b/zefie_wtvp_minisrv/SharedROMCache/Chat.gif new file mode 100644 index 00000000..b2ef4027 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/Chat.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/CommunityBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/CommunityBanner.gif new file mode 100644 index 00000000..ad1781dd Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/CommunityBanner.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/DottedLine.gif b/zefie_wtvp_minisrv/SharedROMCache/DottedLine.gif new file mode 100644 index 00000000..c84ea2e8 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/DottedLine.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/ExploreTitle.gif b/zefie_wtvp_minisrv/SharedROMCache/ExploreTitle.gif new file mode 100644 index 00000000..29cdd034 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ExploreTitle.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/FileImage.gif b/zefie_wtvp_minisrv/SharedROMCache/FileImage.gif new file mode 100644 index 00000000..ff804edb Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/FileImage.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/FileMovie.gif b/zefie_wtvp_minisrv/SharedROMCache/FileMovie.gif new file mode 100644 index 00000000..7f31b5d2 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/FileMovie.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/FilePackage.gif b/zefie_wtvp_minisrv/SharedROMCache/FilePackage.gif new file mode 100644 index 00000000..55e1d1fd Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/FilePackage.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/FileSound.gif b/zefie_wtvp_minisrv/SharedROMCache/FileSound.gif new file mode 100644 index 00000000..199fcd98 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/FileSound.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/FileText.gif b/zefie_wtvp_minisrv/SharedROMCache/FileText.gif new file mode 100644 index 00000000..3c5f762e Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/FileText.gif differ 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-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/SharedROMCache/MessageGradient.gif b/zefie_wtvp_minisrv/SharedROMCache/MessageGradient.gif new file mode 100644 index 00000000..561464a7 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/MessageGradient.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/NameStrip.gif b/zefie_wtvp_minisrv/SharedROMCache/NameStrip.gif new file mode 100644 index 00000000..8a6930bb Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/NameStrip.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/PanelEdge.gif b/zefie_wtvp_minisrv/SharedROMCache/PanelEdge.gif new file mode 100644 index 00000000..61f11bee Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/PanelEdge.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/PaperBase.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperBase.gif new file mode 100644 index 00000000..34c5d31e Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/PaperBase.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/PaperTop.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperTop.gif new file mode 100644 index 00000000..38334866 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/PaperTop.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/PaperTopFlat.gif b/zefie_wtvp_minisrv/SharedROMCache/PaperTopFlat.gif new file mode 100644 index 00000000..81b44abd Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/PaperTopFlat.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/PromotionLeftEdge.gif b/zefie_wtvp_minisrv/SharedROMCache/PromotionLeftEdge.gif new file mode 100644 index 00000000..7aca3206 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/PromotionLeftEdge.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/RemoveButton.gif b/zefie_wtvp_minisrv/SharedROMCache/RemoveButton.gif new file mode 100644 index 00000000..7b5d8640 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/RemoveButton.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S20BV1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20BV1.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S20BV1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S20BV2.gif b/zefie_wtvp_minisrv/SharedROMCache/S20BV2.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S20BV2.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/S40H1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TH1.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/ROMCache/S40H1.gif rename to zefie_wtvp_minisrv/SharedROMCache/S20TH1.gif diff --git a/zefie_wtvp_minisrv/SharedROMCache/S20TV1.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TV1.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S20TV1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S20TV2.gif b/zefie_wtvp_minisrv/SharedROMCache/S20TV2.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S20TV2.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S40H1.gif b/zefie_wtvp_minisrv/SharedROMCache/S40H1.gif new file mode 100644 index 00000000..b8973a1b Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S40H1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S40V1.gif b/zefie_wtvp_minisrv/SharedROMCache/S40V1.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S40V1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S40V2.gif b/zefie_wtvp_minisrv/SharedROMCache/S40V2.gif new file mode 100644 index 00000000..ce2df6c3 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S40V2.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S60HS1.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS1.gif new file mode 100644 index 00000000..5bb6ca39 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S60HS1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S60HS2.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS2.gif new file mode 100644 index 00000000..5bb6ca39 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S60HS2.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S60HS3.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS3.gif new file mode 100644 index 00000000..5bb6ca39 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S60HS3.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S60HS4.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS4.gif new file mode 100644 index 00000000..5bb6ca39 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S60HS4.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/S60HS5.gif b/zefie_wtvp_minisrv/SharedROMCache/S60HS5.gif new file mode 100644 index 00000000..5bb6ca39 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/S60HS5.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/SAdH1.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH1.gif new file mode 100644 index 00000000..f34009ac Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/SAdH1.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/SAdH2.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH2.gif new file mode 100644 index 00000000..f34009ac Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/SAdH2.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/SAdH3.gif b/zefie_wtvp_minisrv/SharedROMCache/SAdH3.gif new file mode 100644 index 00000000..f34009ac Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/SAdH3.gif differ 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/SharedROMCache/ShadowCorner.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowCorner.gif new file mode 100644 index 00000000..e734d451 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ShadowCorner.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/ShadowH.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowH.gif new file mode 100644 index 00000000..b8973a1b Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ShadowH.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/ShadowHCap.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowHCap.gif new file mode 100644 index 00000000..c7ee6374 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ShadowHCap.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/ShadowHStart.gif b/zefie_wtvp_minisrv/SharedROMCache/ShadowHStart.gif new file mode 100644 index 00000000..f92af56e Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/ShadowHStart.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/SiteShowcase.gif b/zefie_wtvp_minisrv/SharedROMCache/SiteShowcase.gif new file mode 100644 index 00000000..f20e7029 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/SiteShowcase.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/Spacer.gif b/zefie_wtvp_minisrv/SharedROMCache/Spacer.gif new file mode 100644 index 00000000..672c48ff Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/Spacer.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/UsingWebTVBanner.gif b/zefie_wtvp_minisrv/SharedROMCache/UsingWebTVBanner.gif new file mode 100644 index 00000000..52dc1e69 Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/UsingWebTVBanner.gif differ diff --git a/zefie_wtvp_minisrv/SharedROMCache/UtilityBullet.gif b/zefie_wtvp_minisrv/SharedROMCache/UtilityBullet.gif new file mode 100644 index 00000000..cf14744d Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/UtilityBullet.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-star/ROMCache/WebTVLogoJewel.gif b/zefie_wtvp_minisrv/SharedROMCache/WebTVLogoJewel.gif similarity index 100% rename from zefie_wtvp_minisrv/ServiceVault/wtv-star/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/SharedROMCache/help/common/helpMastheadBlank.swf b/zefie_wtvp_minisrv/SharedROMCache/help/common/helpMastheadBlank.swf new file mode 100644 index 00000000..3bb8bbca Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/help/common/helpMastheadBlank.swf differ 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/SharedROMCache/news_icon.gif b/zefie_wtvp_minisrv/SharedROMCache/news_icon.gif new file mode 100644 index 00000000..656be1cb Binary files /dev/null and b/zefie_wtvp_minisrv/SharedROMCache/news_icon.gif differ 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/WTVClientSessionData.js b/zefie_wtvp_minisrv/WTVClientSessionData.js deleted file mode 100644 index cd522520..00000000 --- a/zefie_wtvp_minisrv/WTVClientSessionData.js +++ /dev/null @@ -1,398 +0,0 @@ -const { lib } = require('crypto-js'); - -class WTVClientSessionData { - - fs = require('fs'); - path = require('path'); - - ssid = null; - data_store = null; - session_store = null; - login_security = null; - capabilities = null; - session_storage = ""; - minisrv_config = []; - wtvshared = null; - wtvmime = null; - - constructor(minisrv_config, ssid) { - if (!minisrv_config) throw ("minisrv_config required"); - var WTVShared = require('./WTVShared.js')['WTVShared']; - var WTVMime = require('./WTVMime.js'); - this.minisrv_config = minisrv_config; - this.wtvshared = new WTVShared(minisrv_config); - this.wtvmime = new WTVMime(minisrv_config); - - this.ssid = ssid; - this.data_store = new Array(); - this.session_store = {}; - } - - /** - * Returns the absolute path to the user's file store, or false if unregistered - * @returns {string|boolean} Absolute path to the user's file store, or false if unregistered - */ - getUserStoreDirectory() { - if (!this.isRegistered()) return false; - return this.minisrv_config.config.SessionStore + this.path.sep + this.ssid + this.path.sep; - } - - /** - * Store a file in the user's file store - * @param {string} path Relative path to User's file store - * @param {Buffer} data File data - * @param {number|null} last_modified Unix timestamp to set last modified date to - * @param {boolean} overwrite Overwrite if file exists - * @returns {boolean} Whether or not the file was written - */ - storeUserStoreFile(path, data, last_modified = null, overwrite = true) { - var store_dir = this.getUserStoreDirectory(); - if (!store_dir) return false; // unregistered - var result = false; - var path_split = path.split('/'); - var file_name = path_split.pop(); - var store_dir_path = this.wtvshared.makeSafePath(store_dir, path_split.join('/').replace('/', this.path.sep)); - var store_full_path = this.wtvshared.makeSafePath(store_dir_path, file_name); - - try { - if (!this.fs.existsSync(store_dir_path)) this.fs.mkdirSync(store_dir_path, { recursive: true }); - var file_exists = this.fs.existsSync(store_full_path); - if (!file_exists || (file_exists && overwrite)) result = this.fs.writeFileSync(store_full_path, data); - if (result !== false && last_modified) { - var file_timestamp = new Date(last_modified * 1000); - fs.utimesSync(store_full_path, Date.now(), file_timestamp) - } - } catch (e) { - console.error(" # User File Store failed", e); - } - return (result === false) ? false : true; - } - - /** - * Retrieves a file from the user store - * @param {string} path Path relative to the User File Store - * @returns {Buffer|false} Buffer data, or false if could not open file - */ - getUserStoreFile(path) { - var store_dir = this.getUserStoreDirectory(); - if (!store_dir) return false; // unregistered - var store_dir_path = this.wtvshared.makeSafePath(store_dir, path.replace('/', this.path.sep)); - if (this.fs.existsSync(store_dir_path)) return this.fs.readFileSync(store_dir_path); - else return false; - } - - /** - * Retrieves a file from the user store with a file://Disk/ url - * @param {string} url file://Disk/ base url - * @returns {Buffer|false} Buffer data, or false if could not open file - */ - getUserStoreFileByURL(url) { - var path_split = url.split('/'); - path_split.shift(); - path_split.shift(); - var store_dir_path = path_split.join('/').replace('/', this.path.sep); - return this.getUserStoreFile(store_dir_path); - } - - /** - * Retrieves the Content-Type of a User Store File - * @param {string} path Path relative to the User File Store - * @returns {string|false} Content-Type, or false if could not open file - */ - getUserStoreContentType(path) { - return this.wtvmime.getSimpleContentType(path); - } - - /** - * Returns the number of user cookies - * @returns {number} Number of cookies - */ - countCookies() { - return Object.keys(this.session_store.cookies).length || 0; - } - - resetCookies() { - this.session_store.cookies = {}; - // webtv likes to have at least one cookie in the list, set a dummy cookie for zefie's site expiring in 1 year. - this.addCookie("wtv.zefie.com", "/", this.wtvshared.getUTCTime(365 * 86400000), "cookie_type=chocolatechip"); - } - - addCookie(domain, path = null, expires = null, data = null) { - if (!this.checkCookies()) this.resetCookies(); - if (!domain) return false; - else if (typeof (domain) == 'object') { - // accept array as first argument - if (domain.domain && domain.path && domain.expires && domain.data) var cookie_data = domain; - else return false; - } else { - if (path && expires && data) { - var cookie_data = new Array(); - cookie_data['cookie'] = unescape(data); - cookie_data['expires'] = unescape(expires); - cookie_data['path'] = unescape(path); - cookie_data['domain'] = unescape(domain); - } else { - return false; - } - } - - var self = this; - var cookie_index = -1; - // see if we have a cookie for this domain/path - Object.keys(this.session_store.cookies).forEach(function (k) { - if (cookie_index >= 0) return; - if (domain == self.session_store.cookies[k].domain && path == self.session_store.cookies[k].path) cookie_index = k; - }); - // otherwise add a new one - if (cookie_index == -1) cookie_index = this.countCookies(); - - this.session_store.cookies[cookie_index] = Object.assign({}, cookie_data); - - return true; - } - - getCookie(domain, path) { - if (!this.checkCookies()) this.resetCookies(); - var self = this; - var result = false; - Object.keys(this.session_store['cookies']).forEach(function (k) { - if (result != false) return; - if (self.session_store['cookies'][k].domain == domain && - self.session_store['cookies'][k].path == path) { - - var current_epoch_utc = Date.parse((new Date()).toUTCString()); - var cookie_expires_epoch_utc = Date.parse(new Date(Date.parse(self.session_store['cookies'][k].expires)).toUTCString()); - if (cookie_expires_epoch_utc <= current_epoch_utc) self.deleteCookie(self.session_store['cookies'][k]); - else result = self.session_store['cookies'][k]; - } - }); - return result; - } - - getCookieString(domain, path) { - var cookie_data = this.getCookie(domain, path); - /* - var outstring = ""; - Object.keys(cookie_data).forEach(function (k) { - outstring += k + "=" + escape(cookie_data[k]) + "&"; - }); - return outstring.substring(0, outstring.length - 1); - */ - return cookie_data.cookie; - } - - deleteCookie(domain, path = null) { - var result = false; - if (!this.checkCookies()) { - this.resetCookies(); - return true; - } - if (!domain) return false; - else if (typeof (domain) == 'object') { - // accept array as first argument - if (domain.domain && domain.path) { - path = domain.path; - domain = domain.domain; - } - } else if (!path) { - return false; - } - - var self = this; - Object.keys(this.session_store['cookies']).forEach(function (k) { - if (self.session_store['cookies'][k].domain == domain && self.session_store['cookies'][k].path == path) { - delete self.session_store['cookies'][k]; - self.storeSessionData(); - result = true; - } - }); - - return result; - } - - checkCookies() { - if (!this.session_store.cookies) return false; - else if (this.session_store.cookies == []) return false; - return true; - } - - listCookies() { - if (!this.checkCookies()) this.resetCookies(); - var outstring = ""; - var self = this; - Object.keys(this.session_store.cookies).forEach(function (k) { - outstring += self.session_store.cookies[k].domain + "\0" + self.session_store.cookies[k].path + "\0"; - }); - return outstring; - } - - loadSessionData(raw_data = false) { - try { - if (this.fs.lstatSync(this.minisrv_config.config.SessionStore + this.path.sep + this.ssid + ".json")) { - var json_data = this.fs.readFileSync(this.minisrv_config.config.SessionStore + this.path.sep + this.ssid + ".json", 'Utf8') - if (raw_data) return json_data; - - var session_data = JSON.parse(json_data); - this.session_store = session_data; - return true; - } - } catch (e) { - // Don't log error 'file not found', it just means the client isn't registered yet - if (e.code != "ENOENT") console.error(" # Error loading session data for", this.wtvshared.filterSSID(this.ssid), e); - return false; - } - } - - saveSessionData(force_write = false) { - if (this.isRegistered()) { - // load data from disk and merge new data - var temp_store = this.session_store; - if (this.loadSessionData()) this.session_store = Object.assign(this.session_store, temp_store); - else this.session_store = temp_store; - temp_store = null; - } else { - // do not write file if user is not registered, return true because this is not an error - // force write needed to set the initial reg - if (!force_write) return true; - } - - try { - // only save if file has changed - var json_save_data = JSON.stringify(this.session_store); - var json_load_data = this.loadSessionData(true); - if (json_save_data != json_load_data) this.fs.writeFileSync(this.minisrv_config.config.SessionStore + this.path.sep + this.ssid + ".json", JSON.stringify(this.session_store), "Utf8"); - return true; - } catch (e) { - console.error(" # Error saving session data for", this.wtvshared.filterSSID(this.ssid), e); - return false; - } - } - - retrieveSessionData() { - // alias - return this.loadSessionData(); - } - - storeSessionData(force_write = false) { - // alias - return this.saveSessionData(force_write); - } - - SaveIfRegistered() { - if (this.isRegistered()) return this.saveSessionData(); - return false; - } - - isRegistered() { - var self = this; - var ssid_match = false; - this.fs.readdirSync(this.minisrv_config.config.SessionStore).forEach(file => { - if (!file.match(/.*\.json/ig)) return; - if (ssid_match) return; - if (file.split('.')[0] == self.ssid) ssid_match = true; - }); - return ssid_match; - } - - unregisterBox() { - var user_store_base = this.wtvshared.makeSafePath(this.wtvshared.getAbsolutePath(this.minisrv_config.config.SessionStore), this.path.sep + this.ssid); - try { - if (this.fs.existsSync(user_store_base + ".json")) { - this.fs.unlinkSync(user_store_base + ".json"); - this.session_store = {}; - } - if (this.fs.existsSync(user_store_base)) { - this.fs.rmdirSync(user_store_base, { recursive: true }); - } - return true; - } catch (e) { - // Don't log error 'file not found', it just means the client isn't registered yet - console.error(" # Error deleting session data for", this.wtvshared.filterSSID(this.ssid), e); - return false; - } - } - - hasCap(cap) { - if (this.capabilities) { - return this.capabilities[cap] || false; - } - return false; - } - - getMaxUsernameLength() { - if (parseInt(this.data_store['wtv-system-version'] < 4000)) { - // older builds may crash with nicknames longer than 16 chars. - // actual build where support started is yet unknown - return 16; - } else { - // newer builds supported up to 32 chars, I think - return 32; - } - } - - setIRCNick(nick) { - // strip out unsupported chars - nick = nick.replace(/[^a-zA-Z0-9\-\_\`\^]/g, ""); - - // limit nick length based on build support - nick = nick.substring(0, this.getMaxUsernameLength()); - - // returns headers to send to client, while storing the new data in our session data. - this.data_store['wtv-user-name'] = nick; - this.data_store['wtv-irc-nick'] = nick; - this.session_store.subscriber_irc_nick = nick; - return "wtv-irc-nick: " + nick + "\nwtv-user-nick: " + nick; - } - - isMiniBrowser() { - return (this.data_store['wtv-need-upgrade'] || this.data_store['wtv-used-8675309']) ? true : false; - } - - currentConnections() { - if (this.data_store) { - if (this.data_store.sockets) { - return this.data_store.sockets.size; - } - } - return 0; - } - - getSessionData(key = null) { - if (typeof (this.data_store) === 'session_store') return null; - else if (key === null) return this.data_store; - else if (this.session_store[key]) return this.session_store[key]; - else return null; - } - - setSessionData(key, value) { - if (key === null) throw ("ClientSessionData.set(): invalid key provided"); - if (typeof (this.session_store) === 'undefined') this.session_store = new Array(); - this.session_store[key] = value; - } - - deleteSessionData(key) { - if (key === null) throw ("ClientSessionData.delete(): invalid key provided"); - delete this.session_store[key]; - } - - - get(key = null) { - if (typeof (this.data_store) === 'undefined') return null; - else if (key === null) return this.data_store; - else if (this.data_store[key]) return this.data_store[key]; - else return null; - } - - set(key, value) { - if (key === null) throw ("ClientSessionData.set(): invalid key provided"); - if (typeof (this.data_store) === 'undefined') this.data_store = new Array(); - this.data_store[key] = value; - } - - delete(key) { - if (key === null) throw ("ClientSessionData.delete(): invalid key provided"); - delete this.data_store[key]; - } -} - -module.exports = WTVClientSessionData; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/WTVShared.js b/zefie_wtvp_minisrv/WTVShared.js deleted file mode 100644 index a218e373..00000000 --- a/zefie_wtvp_minisrv/WTVShared.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * Shared functions across all classes and apps - */ - -class WTVShared { - - path = require('path'); - fs = require('fs'); - minisrv_config = []; - - constructor(minisrv_config) { - if (minisrv_config == null) this.minisrv_config = this.readMiniSrvConfig(); - else this.minisrv_config = minisrv_config; - - if (!String.prototype.reverse) { - String.prototype.reverse = function () { - var splitString = this.split(""); - var reverseArray = splitString.reverse(); - var joinArray = reverseArray.join(""); - return joinArray; - } - } - } - - returnAbsolutePath(check_path) { - if (check_path.substring(0, 1) != this.path.sep && check_path.substring(1, 1) != ":") { - // non-absolute path, so use current directory as base - check_path = (__dirname + this.path.sep + check_path); - } else { - // already absolute path - } - return check_path; - } - - isMiniBrowser(ssid_session) { - return (ssid_session.get("wtv-need-upgrade") || ssid_session.get("wtv-used-8675309")) ? true : false; - } - - isOldBuild(ssid_session) { - return (this.isMiniBrowser(ssid_session) || parseInt(ssid_session.get("wtv-system-version")) < 3500) ? true : false; - } - - readMiniSrvConfig(user_config = true, notices = true) { - if (notices) console.log(" *** Reading global configuration..."); - try { - var minisrv_config = JSON.parse(this.fs.readFileSync(__dirname + this.path.sep + "config.json")); - } catch (e) { - throw ("ERROR: Could not read config.json", e); - } - - var integrateConfig = function(main, user) { - Object.keys(user).forEach(function (k) { - if (typeof (user[k]) == 'object' && user[k] != null) { - // new entry - if (!main[k]) main[k] = new Array(); - // go down the rabbit hole - main[k] = integrateConfig(main[k], user[k]); - } else { - // update main config - main[k] = user[k]; - } - }); - return main; - } - - if (user_config) { - try { - if (this.fs.lstatSync(__dirname + "/user_config.json")) { - if (notices) console.log(" *** Reading user configuration..."); - try { - var minisrv_user_config = JSON.parse(this.fs.readFileSync(__dirname + this.path.sep + "user_config.json")); - } catch (e) { - console.error("ERROR: Could not read user_config.json", e); - var throw_me = true; - } - // file exists and we read and parsed it, but the variable is undefined - // Likely a syntax parser error that did not trip the exception check above - try { - minisrv_config = integrateConfig(minisrv_config, minisrv_user_config) - } catch (e) { - console.error("ERROR: Could not read user_config.json", e); - } - } - } catch (e) { - if (minisrv_config.config.debug_flags) { - if (minisrv_config.config.debug_flags.debug) console.error(" * Notice: Could not find user configuration (user_config.json). Using default configuration."); - } - } - } - - return minisrv_config; - } - - getMiniSrvConfig() { - return this.minisrv_config; - } - - - /** - * Returns the Last-Modified date in Unix Timestamp format - * @param {string} file Path to a file - */ - getFileLastModified(file) { - var stats = this.fs.lstatSync(file); - if (stats) return new Date(stats.mtimeMs); - return false; - } - - /** - * Returns the Last-Modified date in a RFC7231 compliant UTC Date String - * @param {string} file Path to a file - */ - getFileLastModifiedUTCString(file) { - return this.getFileLastModified(file).toUTCString(); - } - - /** - * Returns a RFC7231 compliant UTC Date String from the current time - * @param {Number} offset Offset from current time (+/-) - * @returns {string} A RFC7231 compliant UTC Date String from the current time - */ - getUTCTime(offset = 0) { - return new Date((new Date).getTime() + offset).toUTCString(); - } - - /** - * Returns a censored SSID - * @param {string|Array} obj SSID String or Headers Object - */ - filterSSID(obj) { - if (this.minisrv_config.config.hide_ssid_in_logs === true) { - if (typeof (obj) == "string") { - if (obj.substr(0, 8) == "MSTVSIMU") { - return obj.substr(0, 10) + ('*').repeat(10) + obj.substr(20); - } else if (obj.substr(0, 5) == "1SEGA") { - return obj.substr(0, 6) + ('*').repeat(6) + obj.substr(13); - } else { - return obj.substr(0, 6) + ('*').repeat(9); - } - } else { - if (obj["wtv-client-serial-number"]) { - var ssid = obj["wtv-client-serial-number"]; - if (ssid.substr(0, 8) == "MSTVSIMU") { - obj["wtv-client-serial-number"] = ssid.substr(0, 10) + ('*').repeat(10) + ssid.substr(20); - } else if (ssid.substr(0, 5) == "1SEGA") { - obj["wtv-client-serial-number"] = ssid.substr(0, 6) + ('*').repeat(6) + ssid.substr(13); - } else { - obj["wtv-client-serial-number"] = ssid.substr(0, 6) + ('*').repeat(9); - } - } - return obj; - } - } else { - return obj; - } - } - - /** - * Returns an absolute path - * @param {string} path - * @param {string} directory Root directory - */ - getAbsolutePath(path, directory = __dirname) { - if (path.substring(0, 1) != this.path.sep && path.substring(1, 1) != ":") { - // non-absolute path, so use current directory as base - path = (directory + this.path.sep + path); - } else { - // already absolute path - } - return this.fixPathSlashes(path); - } - - /** - * Returns a percentage - * @param {number} partialValue - * @param {number} totalValue - * @returns {number} percentage - */ - getPercentage = function (partialValue, totalValue) { - return Math.floor((100 * partialValue) / totalValue); - } - - /** - * If the file ends with .gz, remove it - * @param {string} path - * @return {string} path without gz, or unmodified path if it isnt a gz - */ - getFilePath(path) { - var path_split = path.split('/'); - path_split.pop(); - return path_split.join('/'); - } - - /** - * Gets the file extension from a path - * @param {string} path - * @returns {String} File Extension (without dot) - */ - getFileExt(path) { - return path.reverse().split(".")[0].reverse(); - } - - getLineFromFile(filename, line_no, callback) { - var stream = this.fs.createReadStream(filename, { - flags: 'r', - encoding: 'utf-8', - fd: null, - bufferSize: 64 * 1024 - }); - - - var fileData = ''; - stream.on('data', function (data) { - fileData += data; - - // The next lines should be improved - var lines = fileData.split("\n"); - - if (lines.length >= +line_no) { - stream.destroy(); - callback(null, lines[+line_no]); - } - }); - - stream.on('error', function () { - callback('Error', null); - }); - - stream.on('end', function () { - callback('File end reached without finding line', null); - }); - } - - doErrorPage(code, data = null, pc_mode = false) { - var headers = null; - switch (code) { - case 404: - if (data === null) data = "The service could not find the requested page."; - if (pc_mode) headers = "404 Not Found\n"; - else headers = code + " " + data + "\n"; - headers += "Content-Type: text/html\n"; - break; - case 400: - case 500: - if (data === null) data = "HackTV ran into a technical problem."; - if (pc_mode) headers = "500 Internal Server Error\n"; - else headers = code + " " + data + "\n"; - headers += "Content-Type: text/html\n"; - break; - case 401: - if (data === null) data = "Access Denied."; - if (pc_mode) headers = "401 Access Denied\n"; - else headers = code + " " + data + "\n"; - headers += "Content-Type: text/html\n"; - break; - default: - headers = code + " " + data + "\n"; - headers += "Content-Type: text/html\n"; - break; - } - console.error(" * doErrorPage Called:", code, data); - return new Array(headers, data); - } - - /** - * Strips bad things from paths - * @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); - } - - /** - * Corrects any / or \ differences, if any for file paths - * @param {string} path - * @returns {string} corrected path - */ - fixPathSlashes(path) { - // fix slashes - if (this.path.sep == '/' && path.indexOf("\\") != -1) path = path.replace(/\\/g, this.path.sep); - else if (this.path.sep == "\\" && path.indexOf("/") != -1) path = path.replace(/\//g, this.path.sep); - - // remove double slashes - while (path.indexOf(this.path.sep + this.path.sep) != -1) path = path.replace(this.path.sep + this.path.sep, this.path.sep); - - return path; - } - /** - * Makes sure an SSID is clean, and doesn't contain any exploitable characters - * @param {string} ssid - * @returns {string} Sanitized SSID - */ - makeSafeSSID(ssid = "") { - ssid = ssid.replace(/[^a-zA-Z0-9]/g, ""); - if (ssid.length == 0) ssid = null; - return ssid; - } -} - -class clientShowAlert { - message = null; - buttonlabel1 = null; - buttonlabel2 = null; - buttonaction1 = null; - buttonaction2 = null; - noback = null; - image = null; - - constructor(image = null, message = null, buttonlabel1 = null, buttonaction1 = null, buttonlabel2 = null, buttonaction2 = null, noback = null) { - this.message = message; - this.buttonlabel1 = buttonlabel1; - this.buttonlabel2 = buttonlabel2; - this.buttonaction1 = buttonaction1; - this.buttonaction2 = buttonaction2; - this.message = message; - this.noback = noback; - if (typeof image === 'object') { - this.image = null; - Object.keys(image).forEach(function (k) { - if (this[k] === null) this[k] = image[k]; - }, this); - } else { - this.image = image; - } - } - - getURL() { - var url = "client:ShowAlert?"; - if (this.message) url += "message=" + escape(this.message) + "&"; - if (this.buttonlabel1) url += "buttonlabel1=" + escape(this.buttonlabel1) + "&"; - if (this.buttonaction1) url += "buttonaction1=" + escape(this.buttonaction1) + "&"; - if (this.buttonlabel2) url += "buttonlabel2=" + escape(this.buttonlabel2) + "&"; - if (this.buttonaction2) url += "buttonaction2=" + escape(this.buttonaction2) + "&"; - if (this.image) url += "image=" + escape(this.image) + "&"; - if (this.noback) url += "noback=true&"; - return url.substring(0, url.length - 1); - } -} - -module.exports.WTVShared = WTVShared; -module.exports.clientShowAlert = clientShowAlert; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 6b1c3841..b4eaf918 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -1,29 +1,36 @@ 'use strict'; +var classPath = __dirname + "/includes/"; +const { WTVShared, clientShowAlert } = require(classPath + "WTVShared.js"); +const wtvshared = new WTVShared(); // creates minisrv_config +classPath = wtvshared.getAbsolutePath(classPath, __dirname); const fs = require('fs'); +const tls = require('tls'); const path = require('path'); const zlib = require('zlib'); const http = require('http'); const https = require('https'); -const strftime = require('strftime'); // used externally by service scripts const net = require('net'); +const crypto = require('crypto') const CryptoJS = require('crypto-js'); const { crc16 } = require('easy-crc'); const process = require('process'); -var WTVSec = require('./WTVSec.js'); -var WTVLzpf = require('./WTVLzpf.js'); -var WTVClientCapabilities = require('./WTVClientCapabilities.js'); -var WTVClientSessionData = require('./WTVClientSessionData.js'); -var WTVMime = require("./WTVMime.js"); -var { WTVShared, clientShowAlert } = require("./WTVShared.js"); +const WTVSec = require(classPath + "/WTVSec.js"); +const WTVLzpf = require(classPath + "/WTVLzpf.js"); +const WTVClientCapabilities = require(classPath + "/WTVClientCapabilities.js"); +const WTVClientSessionData = require(classPath + "/WTVClientSessionData.js"); +const WTVMime = require(classPath + "/WTVMime.js"); +const WTVFlashrom = require(classPath + "/WTVFlashrom.js"); +const vm = require('vm'); +const express = require('express'); process .on('SIGTERM', shutdown('SIGTERM')) .on('SIGINT', shutdown('SIGINT')) - .on('uncaughtException', shutdown('uncaughtException')); + .on('uncaughtException', (e => { console.log(e); })); -function shutdown(signal) { +function shutdown(signal = 'SIGTERM') { return (err) => { console.log("Received signal", signal); if (err) console.error(err.stack || err); @@ -36,6 +43,7 @@ var ssid_sessions = new Array(); var socket_sessions = new Array(); var ports = []; +var pc_ports = []; // add .reverse() feature to all JavaScript Strings in this application // works for service vault scripts too. @@ -48,15 +56,28 @@ if (!String.prototype.reverse) { } } +// add .getCaseInsensitiveKey() to all JavaScript Objects in this application { +// works for service vault scripts too. + +if (!Object.prototype.getCaseInsensitiveKey) { + Object.prototype.getCaseInsensitiveKey = function (object_name, key_name) { + var foundKey = Object.keys(object_name).find(key => key.toLowerCase() === key_name.toLowerCase()) || null; + if (foundKey) { + // found a key + return object_name[foundKey]; + } else return null; + } +} + function getServiceString(service, overrides = {}) { // used externally by service scripts if (service === "all") { var out = ""; Object.keys(minisrv_config.services).forEach(function (k) { if (overrides.exceptions) { - Object.keys(overrides.exceptions).forEach(function (j) { - if (k != overrides.exceptions[j]) out += minisrv_config.services[k].toString(overrides) + "\n"; - }); + Object.keys(overrides.exceptions).forEach(function (j) { + if (k != overrides.exceptions[j]) out += minisrv_config.services[k].toString(overrides) + "\n"; + }); } else { out += minisrv_config.services[k].toString(overrides) + "\n"; } @@ -71,10 +92,6 @@ function getServiceString(service, overrides = {}) { } } -// passthrough for old scripts -function doErrorPage(code, data = null, pc_mode = false) { - return wtvshared.doErrorPage(code, data, pc_mode); -} async function sendRawFile(socket, path) { if (!minisrv_config.config.debug_flags.quiet) console.log(" * Found " + path + " to handle request (Direct File Mode) [Socket " + socket.id + "]"); @@ -87,162 +104,381 @@ async function sendRawFile(socket, path) { }); } -async function processPath(socket, service_vault_file_path, request_headers = new Array(), service_name) { +var runScriptInVM = function (script_data, user_contextObj = {}, privileged = false, filename = null) { + // Here we define the ServiceVault Script Context Object + // The ServiceVault scripts will only be allowed to access the following fcnutions/variables. + // Furthermore, only modifications to variables in `updateFromVM` will be saved. + // Example: an attempt to change "minisrv_config" from a ServiceVault script would be discarded + + // create global context object + var contextObj = { + // node core variables and functions + "console": console, // needed for per-script debugging + "__dirname": __dirname, // needed by services such as wtv-flashrom and wtv-disk + + // Our modules + "wtvmime": wtvmime, + "http": http, + "https": https, + "wtvshared": wtvshared, + "zlib": zlib, + "clientShowAlert": clientShowAlert, + "WTVClientSessionData": WTVClientSessionData, + "WTVClientCapabilities": WTVClientCapabilities, + "strftime": require('strftime'), + "CryptoJS": CryptoJS, + "crypto": crypto, + "fs": fs, + "path": path, + + // Our variables and functions + "minisrv_config": minisrv_config, + "socket": null, + "headers": null, + "data": null, + "request_is_async": false, + "minisrv_version_string": z_title, + "getServiceString": getServiceString, + "sendToClient": sendToClient, + "ServiceDeps": ServiceDeps, + "service_vaults": service_vaults, + "cwd": __dirname, // current working directory + + // Our prototype overrides + "Buffer": Buffer, + "String": String, + "Object": Object, + + // add any additional context objects provided with function call + ...user_contextObj + } + + // per service overrides + var modules_loaded = []; + if (minisrv_config.services[contextObj.service_name]) { + if (minisrv_config.services[contextObj.service_name].modules) { + var vm_modules = minisrv_config.services[contextObj.service_name].modules; + Object.keys(vm_modules).forEach(function (k) { + var module_file = classPath + path.sep + vm_modules[k] + ".js" + try { + contextObj[vm_modules[k]] = require(module_file); + modules_loaded.push(module_file) + } catch (e) { + console.error(" *!* Could not load module", module_file, "requested by service", contextObj.service_name) + } + }) + } + } + switch (contextObj.service_name) { + case "wtv-guide": + // wtv-guide is a special case due to needing this function + modules_to_load.push({ "name": "WTVGuide", "file": classPath + "/WTVGuide.js" }); + contextObj.wtvguide = new tmpmod(minisrv_config, ssid_sessions[contextObj.socket.ssid], contextObj.socket, runScriptInVM); + break; + + case "wtv-1800": + case "wtv-flashrom": + // these are special cases because the primary app already loaded this + contextObj = { ...contextObj, "WTVFlashrom": WTVFlashrom } + break; + } + + + if (contextObj.socket) { + if (contextObj.socket.id) + if (socket_sessions[contextObj.socket.id]) contextObj.wtv_encrypted = (socket_sessions[contextObj.socket.id].secure === true); + } + + if (privileged) { + contextObj = { + ...contextObj, + "privileged": true, + "require": require, // this is dangerous but needed for some scripts at this time + "SessionStore": SessionStore, + "ssid_sessions": ssid_sessions, + "socket_sessions": socket_sessions, + "reloadConfig": reloadConfig, + "classPath": classPath + } + } + + var options = {}; + if (filename) options = { "filename": filename }; + var eval_ctx = new vm.Script(script_data, options) + try { + eval_ctx.runInNewContext(contextObj, { + "breakOnSigint": true + }); + } catch (e) { + console.error(e); + } + + // unload any loaded modules for this vm + if (modules_loaded.length > 0) { + Object.keys(modules_loaded).forEach(function (k) { + wtvshared.unloadModule(modules_loaded[k]); + }) + } + + return contextObj; // updated context object with whatever global varibles the script set +} + +function sendToPCClient(headers, data) { + +} + +async function processPath(socket, service_vault_file_path, request_headers = new Array(), service_name, shared_romcache = null, pc_services = false) { 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; + var contextObj = { + "privileged": false, + "socket": socket, + "session_data": ssid_sessions[socket.ssid], + "request_headers": request_headers, + "service_name": service_name, + "cwd": __dirname // current working directory, updated below in function + } + + // Define the variables that we want to assign from the evaluated script. + // Normally any changes in the VM are discarded, but the rest of this function + // requires reading some of the data back into the main application. + // Here we define which ones to read back. + var updateFromVM = [ + // format: [ ourvarname, scriptsvarname ] + ["headers", "headers"], // we need to be able to read the script's response headers + ["data", "data"], // we need to be able to read the script's response data + ["request_is_async", "request_is_async"] // we need to know if the script is async or not + ] + + if (!pc_services) { + updateFromVM.push(["ssid_sessions", "ssid_sessions"]); // global ssid_sessions object for privileged service scripts, such as wtv-setup, wtv-head-waiter, etc + updateFromVM.push(["socket_sessions", "socket_sessions"]); // global socket_sessions object for privileged service scripts, such as wtv-1800, etc + updateFromVM.push([`ssid_sessions[${socket.ssid}]`, "session_data"]); // user-specific session data from unprivileged scripts + } + 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 (!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)) { - 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]); - } - }); + 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); } - } 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 + // 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_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 + 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); + 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() + contextObj.cwd = service_vault_file_path + } else { + contextObj.cwd = service_vault_file_path.substr(0, service_vault_file_path.lastIndexOf(path.sep)); + } - 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(); + 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; + // process flashroms + if (wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "rom" || wtvshared.getFileExt(service_vault_file_path).toLowerCase() == "brom") { + var bf0app_update = false; + var request_path = request_headers.request_url.replace(service_name + ":/", ""); + var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); + var bootver = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") + + if ((romtype == "bf0app" || !romtype) && (bootver == "105" || !bootver)) { + // assume old classic in flash mode, override user setting and send tellyscript + // because it is required to proceed in flash mode + bf0app_update = true; + ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + } + + if (!ssid_sessions[socket.ssid].data_store.WTVFlashrom) { + ssid_sessions[socket.ssid].data_store.WTVFlashrom = new WTVFlashrom(minisrv_config, service_vaults, service_name, minisrv_config.services[service_name].use_zefie_server, bf0app_update); + } + + ssid_sessions[socket.ssid].data_store.WTVFlashrom.getFlashRom(request_path, function (data, headers) { + sendToClient(socket, headers, data); + }); + + // 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 + } else 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); + 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); + 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 safe 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 + socket_sessions[socket.id].starttime = Math.floor(new Date().getTime() / 1000); + var script_data = fs.readFileSync(service_vault_file_path + ".js").toString(); + var priv = false; + if (minisrv_config.services[service_name]) priv = (minisrv_config.services[service_name].privileged) ? true : false; + else if (pc_services) priv = (minisrv_config.services['pc_services'].privileged) ? true : false; + + var vmResults = runScriptInVM(script_data, contextObj, priv, service_vault_file_path + ".js"); + // Here we read back certain data from the ServiceVault Script Context Object + updateFromVM.forEach((item) => { + try { + if (typeof vmResults[item[1]] !== "undefined") eval(item[0] + ' = vmResults["' + item[1] + '"]'); + } catch (e) { + + } + }) + + 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 script_data = fs.readFileSync(catchall_file).toString(); + var priv = false; + if (minisrv_config.services[service_name]) priv = (minisrv_config.services[service_name].privileged) ? true : false; + else if (pc_services) priv = (minisrv_config.services['pc_services'].privileged) ? true : false; + + runScriptInVM(script_data, contextObj, priv, catchall_file); + + // Here we read back certain data from the ServiceVault Script Context Object + try { + if (typeof vmResults[item[1]] !== "undefined") eval(item[0] + ' = vmResults["' + item[1] + '"]'); + } catch (e) { + + } + + if (request_is_async && !minisrv_config.config.debug_flags.quiet) console.log(" * Script requested Asynchronous mode"); + break; + } else { + service_check_dir.pop(); + } } } } @@ -253,18 +489,22 @@ async function processPath(socket, service_vault_file_path, request_headers = ne } catch (e) { var errpage = wtvshared.doErrorPage(400); headers = errpage[0]; - data = errpage[1] + "

      The interpreter said:
      " + e.toString() + "
      "; - console.error(" * Scripting error:",e); + data = errpage[1]; + if (pc_services) { + if (minisrv_config.services.pc_services.show_verbose_errors) + data += "

      The interpreter said:
      " + e.stack + "
      "; + } + console.error(" * Scripting error:", e); } 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, "")); - var errpage = wtvshared.doErrorPage(404, null, socket.minisrv_pc_mode); + 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, null, pc_services); headers = errpage[0]; data = errpage[1]; } if (headers == null && !request_is_async) { - var errpage = wtvshared.doErrorPage(400, null, socket.minisrv_pc_mode); + var errpage = wtvshared.doErrorPage(400, null, null, pc_services); headers = errpage[0]; data = errpage[1]; console.error(" * Scripting or Data error: Headers were not defined. (headers,data) as follows:") @@ -277,33 +517,57 @@ async function processPath(socket, service_vault_file_path, request_headers = ne } } -async function processURL(socket, request_headers) { - var shortURL, headers, data = ""; - request_headers.query = new Array(); +async function processURL(socket, request_headers, pc_services = false) { + var shortURL, headers, data, service_name, original_service_name = ""; + var enable_multi_query = false; + request_headers.query = {}; if (request_headers.request_url) { + if (pc_services) { + original_service_name = request_headers.service_name; // store PC Services service name + service_name = verifyServicePort(request_headers.service_name, socket); // get the actual ServiceVault path + delete request_headers.service_name; + } if (request_headers.request_url.indexOf('?') >= 0) { shortURL = request_headers.request_url.split('?')[0]; - var qraw = request_headers.request_url.split('?')[1]; - if (qraw.length > 0) { - qraw = qraw.split("&"); - for (let i = 0; i < qraw.length; i++) { - var qraw_split = qraw[i].split("="); - if (qraw_split.length == 2) { - var k = qraw_split[0]; - request_headers.query[k] = unescape(qraw[i].split("=")[1].replace(/\+/g,"%20")); + + if (request_headers.request_url.indexOf('?') >= 0) { + shortURL = request_headers.request_url.split('?')[0]; + if (minisrv_config.services[service_name]) enable_multi_query = minisrv_config.services[service_name].enable_multi_query || false; + var qraw = request_headers.request_url.split('?')[1]; + if (qraw.length > 0) { + qraw = qraw.split("&"); + for (let i = 0; i < qraw.length; i++) { + var qraw_split = qraw[i].split("="); + if (qraw_split.length == 2) { + var k = qraw_split[0]; + if (request_headers.query[k] && enable_multi_query) { + if (typeof request_headers.query[k] === 'string') { + var keyarray = [request_headers.query[k]]; + request_headers.query[k] = keyarray; + } + request_headers.query[k].push(unescape(qraw[i].split("=")[1].replace(/\+/g, "%20"))); + } else { + request_headers.query[k] = unescape(qraw[i].split("=")[1].replace(/\+/g, "%20")); + } + } else if (qraw[i].length == 1) { + request_headers.query[qraw[i]] = null; + } } } + } else { + shortURL = unescape(request_headers.request_url); } } else { shortURL = unescape(request_headers.request_url); } + if (request_headers['wtv-request-type']) socket_sessions[socket.id].wtv_request_type = request_headers['wtv-request-type']; if (request_headers.post_data) { - var post_data_string = ''; + var post_data_string = null; try { - post_data_string = request_headers.post_data.toString(CryptoJS.enc.Utf8).replace("\0", ""); // if not text this will probably throw an exception - if (isUnencryptedString(post_data_string)) { + post_data_string = request_headers.post_data.toString(CryptoJS.enc.Utf8); // if not text this will probably throw an exception + if (post_data_string) { if (post_data_string.indexOf('=')) { if (post_data_string.indexOf('&')) { var qraw = post_data_string.split('&'); @@ -312,7 +576,18 @@ async function processURL(socket, request_headers) { var qraw_split = qraw[i].split("="); if (qraw_split.length == 2) { var k = qraw_split[0]; - request_headers.query[k] = unescape(qraw[i].split("=")[1].replace(/\+/g, "%20")); + var data = unescape(qraw[i].split("=")[1].replace(/\+/g, "%20")); + if (request_headers.query[k]) { + if (typeof request_headers.query[k] === 'string') { + var keyarray = [request_headers.query[k]]; + request_headers.query[k] = keyarray; + } + if (wtvshared.isASCII(data)) request_headers.query[k].push(data); + else request_headers.query[k].push(wtvshared.urlDecodeBytes(qraw[i].split("=")[1].replace(/\+/g, "%20"))); + } else { + if (wtvshared.isASCII(data)) request_headers.query[k] = data; + else request_headers.query[k] = wtvshared.urlDecodeBytes(qraw[i].split("=")[1].replace(/\+/g, "%20")); + } } } } @@ -320,16 +595,26 @@ async function processURL(socket, request_headers) { var qraw_split = post_data_string.split("="); if (qraw_split.length == 2) { var k = qraw_split[0]; - request_headers.query[k] = unescape(qraw_split[1].replace(/\+/g, "%20")); + var data = unescape(qraw_split[1].replace(/\+/g, "%20")); + if (request_headers.query[k]) { + if (typeof request_headers.query[k] === 'string') { + var keyarray = [request_headers.query[k]]; + request_headers.query[k] = keyarray; + } + if (wtvshared.isASCII(data)) request_headers.query[k].push(data); + else request_headers.query[k].push(wtvshared.urlDecodeBytes(qraw_split[1].replace(/\+/g, "%20"))); + } else { + if (wtvshared.isASCII(data)) request_headers.query[k] = data; + else request_headers.query[k] = wtvshared.urlDecodeBytes(qraw_split[1].replace(/\+/g, "%20")); + } } } } } } catch (e) { - // do nothing + } } - if ((shortURL.indexOf("http") != 0 && shortURL.indexOf("ftp") != 0 && shortURL.indexOf(":") > 0 && shortURL.indexOf(":/") == -1)) { // Apparently it is within WTVP spec to accept urls without a slash (eg wtv-home:home) // Here, we just reassemble the request URL as if it was a proper URL (eg wtv-home:/home) @@ -339,52 +624,109 @@ async function processURL(socket, request_headers) { shortURL_split.shift(); var shortURL_service_path = shortURL_split.join(":"); shortURL = shortURL_service_name + ":/" + shortURL_service_path; - } else if (shortURL.indexOf(":") == -1 && request_headers.request.indexOf("HTTP/1") > 0 && socket.ssid == null) { - if (request_headers.Host) { - if (minisrv_config.config.pc_server_hidden_service_enabled) { - // browsers typically send a Host header - service_name = minisrv_config.config.pc_server_hidden_service; - socket.minisrv_pc_mode = true; - shortURL = service_name + ":" + shortURL; + } - // if a directory, request index - if (shortURL.substring(shortURL.length - 1) == "/") shortURL += "index"; - } else { - // minimal pc mode to send error - socket.minisrv_pc_mode = true; - var errpage = wtvshared.doErrorPage(401, "PC services are disabled on this server", socket.minisrv_pc_mode); - headers = errpage[0]; - data = errpage[1] - socket_sessions[socket.id].close_me = true; + if (socket.ssid) { + // skip box auth tests for pc mode + + // check security + if (!ssid_sessions[socket.ssid].isAuthorized(shortURL)) { + // lockdown mode and URL not authorized + headers = "300 Unauthorized\n"; + headers += "Location: " + minisrv_config.config.unauthorized_url + "\n"; + headers += "minisrv-no-mail-count: true\n"; + data = ""; + sendToClient(socket, headers, data); + console.log(" * Lockdown rejected request for " + shortURL + " on socket ID", socket.id); + return; + } + + if (ssid_sessions[socket.ssid].isRegistered() && !ssid_sessions[socket.ssid].isUserLoggedIn()) { + if (!ssid_sessions[socket.ssid].isAuthorized(shortURL, 'login')) { + // user is not fully logged in, and URL not authorized + headers = "300 Unauthorized\n"; + headers += "Location: client:relogin\n"; + headers += "minisrv-no-mail-count: true\n"; + data = ""; sendToClient(socket, headers, data); + console.log(" * Incomplete login rejected request for " + shortURL + " on socket ID", socket.id); return; } } + + if (ssid_sessions[socket.ssid].get("wtv-my-disk-sucks-sucks-sucks")) { + if (!ssid_sessions[socket.ssid].baddisk) { + // psuedo lockdown, will unlock on the disk warning page, but prevents minisrv access until they read the error + ssid_sessions[socket.ssid].lockdown = true; + ssid_sessions[socket.ssid].baddisk = true; + } + } + + if (!ssid_sessions[socket.ssid].isUserLoggedIn() && !ssid_sessions[socket.ssid].isAuthorized(shortURL, 'login')) { + // lockdown mode and URL not authorized + headers = `300 Unauthorized +Location: ${minisrv_config.config.unauthorized_url} +minisrv-no-mail-count: true`; + data = ""; + sendToClient(socket, headers, data); + console.log(" * Rejected login bypass request for " + shortURL + " on socket ID", socket.id); + return; + } } - if (shortURL.indexOf(':/') >= 0 && shortURL.indexOf('://') < 0) { + if (pc_services) { + if (original_service_name == service_name) console.log(" * PC request on service " + service_name + " for " + request_headers.request_url, 'on', socket.id); + else console.log(" * PC request on service " + original_service_name + " (Service Vault " + service_name + ") for " + request_headers.request_url, 'on', socket.id); + } + // Check URL for :/, but not :// (to differentiate wtv urls) + if (shortURL.indexOf(':/') >= 0 && shortURL.indexOf('://') == -1) { var ssid = socket.ssid; if (ssid == null) { - // prevent possible injection attacks via SSID and filesystem SessionStore + // prevent possible injection attacks via malformed SSID and filesystem SessionStore ssid = wtvshared.makeSafeSSID(request_headers["wtv-client-serial-number"]); if (ssid == "") ssid = null; } + if (!pc_services) { + var reqverb = "Request"; + if (request_headers.encrypted || request_headers.secure) reqverb = "Encrypted " + reqverb; + if (ssid != null) { + console.log(" * " + reqverb + " for " + request_headers.request_url + " from WebTV SSID " + (await wtvshared.filterSSID(ssid)), 'on', socket.id); + } else { + console.log(" * " + reqverb + " for " + request_headers.request_url, 'on', socket.id); + } - var reqverb = "Request"; - if (request_headers.encrypted || request_headers.secure) reqverb = "Encrypted " + reqverb; - if (ssid != null) { - console.log(" * " + reqverb + " for " + request_headers.request_url + " from WebTV SSID " + (await wtvshared.filterSSID(ssid)), 'on', socket.id); - } else { - console.log(" * " + reqverb + " for " + request_headers.request_url, 'on', socket.id); + var service_name = verifyServicePort(shortURL.split(':/')[0], socket); + if (!service_name) { + // detect if client is trying to load wtv-star due to client-perceived error + if (getSocketDestinationPort(socket) == getPortByService("wtv-star")) { + // is wtv-star + if (minisrv_config.config.debug_flags.debug) console.log(" * client requested", shortURL, "on wtv-star port", getSocketDestinationPort(socket)) + shortURL = "wtv-star:/star"; + service_name = "wtv-star"; + } else { + // is actually a request on then wrong port + var errpage = wtvshared.doErrorPage(500, null, null, pc_services); + socket_sessions[socket.id].close_me = true; + sendToClient(socket, errpage[0], errpage[1]); + return + } + } } - // 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]); - if (minisrv_config.config.debug_flags.show_headers) console.log(" * Incoming headers on socket ID", socket.id, (await wtvshared.filterSSID(request_headers))); + 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.filterRequestLog(wtvshared.filterSSID(request_headers))))); socket_sessions[socket.id].request_headers = request_headers; - processPath(socket, urlToPath, request_headers, service_name); - } else if (shortURL.indexOf('http://') >= 0 || shortURL.indexOf('https://') >= 0) { + processPath(socket, urlToPath, request_headers, service_name, shared_romcache, pc_services); + } else if ((shortURL.indexOf('http://') >= 0 || shortURL.indexOf('https://') >= 0) && !pc_services) { doHTTPProxy(socket, request_headers); + } else if (pc_services) { + // if a directory, request index + if (shortURL.substring(shortURL.length - 1) == "/") shortURL += "index"; + var urlToPath = wtvshared.fixPathSlashes(service_name + path.sep + shortURL); + processPath(socket, urlToPath, request_headers, service_name, shared_romcache, pc_services); } else { // error reading headers (no request_url provided) var errpage = wtvshared.doErrorPage(400); @@ -398,7 +740,7 @@ async function processURL(socket, request_headers) { async function doHTTPProxy(socket, request_headers) { var request_type = (request_headers.request_url.substring(0, 5) == "https") ? "https" : "http"; - if (minisrv_config.config.debug_flags.show_headers) console.log(request_type.toUpperCase() +" Proxy: Client Request Headers on socket ID", socket.id, (await wtvshared.filterSSID(request_headers))); + if (minisrv_config.config.debug_flags.show_headers) console.log(request_type.toUpperCase() + " Proxy: Client Request Headers on socket ID", socket.id, (await wtvshared.decodePostData(wtvshared.filterRequestLog(wtvshared.filterSSID(request_headers))))); switch (request_type) { case "https": var proxy_agent = https; @@ -434,16 +776,24 @@ async function doHTTPProxy(socket, request_headers) { } } + // RFC7239 + if (socket.remoteAddress != "127.0.0.1") { + options.headers["X-Forwarded-For"] = socket.remoteAddress; + } + if (request_headers.post_data) { if (request_headers["Content-type"]) options.headers["Content-type"] = request_headers["Content-type"]; if (request_headers["Content-length"]) options.headers["Content-length"] = request_headers["Content-length"]; } if (minisrv_config.services[request_type].use_external_proxy && minisrv_config.services[request_type].external_proxy_port) { + // configure connection to an external proxy if (minisrv_config.services[request_type].external_proxy_is_socks) { + // configure connection to remote socks proxy var ProxyAgent = require('proxy-agent'); options.agent = new ProxyAgent("socks://" + (minisrv_config.services[request_type].external_proxy_host || "127.0.0.1") + ":" + minisrv_config.services[request_type].external_proxy_port); } else { + // configure connection to remote http proxy var proxy_agent = http; options.host = minisrv_config.services[request_type].external_proxy_host; options.port = minisrv_config.services[request_type].external_proxy_port; @@ -466,30 +816,66 @@ async function doHTTPProxy(socket, request_headers) { var data_hex = Buffer.concat(data).toString('hex'); console.log(` * Proxy Request ${request_type.toUpperCase()} ${res.statusCode} for ${request_headers.request}`) - res.headers.http_response = res.statusCode + " " + res.statusMessage; - res.headers["wtv-connection-close"] = false; + // an http response error is not a request error, and will come here under the 'end' event rather than an 'error' event. + switch (res.statusCode) { + case 404: + res.headers.Response = res.statusCode + " The publisher can’t find the page requested."; + break; + + case 401: + case 403: + res.headers.Response = res.statusCode + " The publisher of that page has not authorized you to use it."; + break; + + case 500: + res.headers.Response = res.statusCode + " The publisher of that page can’t be reached."; + break; + + default: + res.headers.Response = res.statusCode + " " + res.statusMessage; + break; + } + // header pass-through whitelist, case insensitive comparsion to server, however, you should // specify the header case as you intend for the client var headers = stripHeaders(res.headers, [ - 'Server', 'Connection', + 'Server', 'Date', 'Content-Type', - 'Content-length', 'Cookie', 'Location', 'Accept-Ranges', 'Last-Modified' ]); + headers["wtv-http-proxy"] = true; + headers["wtv-trusted"] = false; + + // if Connection: close header, set our internal variable to close the socket + if (headers['Connection']) { + if (headers['Connection'].toLowerCase().indexOf('close') !== -1) { + headers["wtv-connection-close"] = true; + } + } + + // if a wtv-explaination is defined for an error code (except 200), define the header here to + // show the 'Explain' button on the client error ShowAlert + if (minisrv_config.services['http']['wtv-explanation']) { + if (minisrv_config.services['http']['wtv-explanation'][res.statusCode]) { + headers['wtv-explanation-url'] = minisrv_config.services['http']['wtv-explanation'][res.statusCode]; + } + } + if (data_hex.substring(0, 8) == "0d0a0d0a") data_hex = data_hex.substring(8); if (data_hex.substring(0, 4) == "0a0a") data_hex = data_hex.substring(4); - headers["wtv-http-proxy"] = true; - sendToClient(socket, headers, Buffer.from(data_hex,'hex')); + sendToClient(socket, headers, Buffer.from(data_hex, 'hex')); }); }).on('error', function (err) { + // severe errors, such as unable to connect. var errpage, headers, data = null; - if (err.code == "ENOTFOUND") errpage = wtvshared.doErrorPage(400, `The publisher ${request_data.host} is unknown.`); - else if (err.message.indexOf("HostUnreachable") > 0) errpage = wtvshared.doErrorPage(400, `The publisher ${request_data.host} could not be reached.`); + if (err.code == "ENOTFOUND" || err.message.indexOf("HostUnreachable") > 0) { + errpage = wtvshared.doErrorPage(400, `The publisher ${request_data.host} is unknown.`); + } else { console.log(" * Unhandled Proxy Request Error:", err); errpage = wtvshared.doErrorPage(400); @@ -511,13 +897,19 @@ async function doHTTPProxy(socket, request_headers) { function stripHeaders(headers_obj, whitelist) { var whitelisted_headers = new Array(); var out_headers = new Array(); - out_headers.http_response = headers_obj.http_response; + out_headers.Response = headers_obj.Response; out_headers['wtv-connection-close'] = headers_obj['wtv-connection-close']; // compare regardless of case Object.keys(whitelist).forEach(function (k) { Object.keys(headers_obj).forEach(function (j) { - if (whitelist[k].toLowerCase() == j.toLowerCase()) whitelisted_headers[j.toLowerCase()] = [whitelist[k], j, headers_obj[j]]; + if (whitelist[k].toLowerCase() == j.toLowerCase()) { + // if header = connection, strip 'upgrade' + if (j.toLowerCase() == "connection") { + headers_obj[j] = headers_obj[j].replace("Upgrade", "").replace(",", "").trim(); + } + whitelisted_headers[j.toLowerCase()] = [whitelist[k], j, headers_obj[j]]; + } }); }); @@ -534,14 +926,13 @@ function stripHeaders(headers_obj, whitelist) { function headerStringToObj(headers, response = false) { var inc_headers = 0; - var headers_obj = new Array(); + var headers_obj = {}; var headers_obj_pre = headers.split("\n"); headers_obj_pre.forEach(function (d) { if (/^SECURE ON/.test(d) && !response) { headers_obj.secure = true; - //socket_sessions[socket.id].secure_headers = true; } else if (/^([0-9]{3}) $/.test(d.substring(0, 4)) && response) { - headers_obj.http_response = d.replace("\r", ""); + headers_obj.Response = d.replace("\r", ""); } else if (/^(GET |PUT |POST)$/.test(d.substring(0, 4)) && !response) { headers_obj.request = d.replace("\r", ""); var request_url = d.split(' '); @@ -586,13 +977,28 @@ async function sendToClient(socket, headers_obj, data) { socket.destroy(); return; } - var wtv_connection_close = headers_obj["wtv-connection-close"]; - if (typeof (headers_obj["wtv-connection-close"]) != 'undefined') delete headers_obj["wtv-connection-close"]; + if (!socket.res) { + var wtv_connection_close = (headers_obj["wtv-connection-close"]) ? true : false; + if (typeof (headers_obj["wtv-connection-close"]) != 'undefined') delete headers_obj["wtv-connection-close"]; + + if (!headers_obj['minisrv-no-mail-count']) { + if (ssid_sessions[socket.ssid]) { + if (ssid_sessions[socket.ssid].isRegistered()) { + if (ssid_sessions[socket.ssid].mailstore) { + headers_obj['wtv-mail-count'] = ssid_sessions[socket.ssid].mailstore.countUnreadMessages(0); + } + } + } + } else { + if (headers_obj['wtv-mail-count']) delete headers_obj['wtv-mail-count']; + delete headers_obj['minisrv-no-mail-count']; + } + } // add Connection header if missing, default to Keep-Alive if (!headers_obj.Connection) { headers_obj.Connection = "Keep-Alive"; - headers_obj = moveObjectElement('Connection', 'http_response', headers_obj); + headers_obj = moveObjectElement('Connection', 'Response', headers_obj); } var content_length = 0; @@ -619,7 +1025,7 @@ async function sendToClient(socket, headers_obj, data) { } } } - + // if box can do compression, see if its worth enabling // small files actually get larger, so don't compress them @@ -635,8 +1041,18 @@ async function sendToClient(socket, headers_obj, data) { } } + // webtvism + if (headers_obj["minisrv-force-compression"]) { + compression_type = parseInt(headers_obj["minisrv-force-compression"]); + delete headers_obj["minisrv-force-compression"]; + } + + if (socket.res) { // pc mode with response object available + if (compression_type == 1) compression_type = 2; // just in case + } + // compress if needed - if (compression_type > 0 && content_length > 0 && headers_obj['http_response'].substring(0, 3) == "200") { + if (compression_type > 0 && content_length > 0 && headers_obj['Response'].substring(0, 3) == "200") { var uncompressed_content_length = content_length; switch (compression_type) { case 1: @@ -670,99 +1086,107 @@ async function sendToClient(socket, headers_obj, data) { if (uncompressed_content_length != compressed_content_length) if (minisrv_config.config.debug_flags.debug) console.log(" # Compression stats: Orig Size:", uncompressed_content_length, "~ Comp Size:", compressed_content_length, "~ Ratio:", compression_ratio, "~ Saved:", compression_percentage.toString() + "%"); } - // encrypt if needed - if (socket_sessions[socket.id].secure == true && !socket_sessions[socket.id].do_not_encrypt) { - headers_obj["wtv-encrypted"] = 'true'; - headers_obj = moveObjectElement('wtv-encrypted', 'Connection', headers_obj); - if (content_length > 0 && socket_sessions[socket.id].wtvsec) { - if (!minisrv_config.config.debug_flags.quiet) console.log(" * Encrypting response to client ...") - var enc_data = socket_sessions[socket.id].wtvsec.Encrypt(1, data); - data = enc_data; + if (!socket.res) { + // encrypt if needed + if (socket_sessions[socket.id].secure == true && !socket_sessions[socket.id].do_not_encrypt) { + headers_obj["wtv-encrypted"] = 'true'; + headers_obj = moveObjectElement('wtv-encrypted', 'Connection', headers_obj); + if (content_length > 0 && socket_sessions[socket.id].wtvsec) { + if (!minisrv_config.config.debug_flags.quiet) console.log(" * Encrypting response to client ...") + var enc_data = socket_sessions[socket.id].wtvsec.Encrypt(1, data); + data = enc_data; + } + } + + if (socket_sessions[socket.id].do_not_encrypt) { + if (headers_obj["wtv-encrypted"]) delete headers_obj["wtv-encrypted"]; + if (headers_obj["secure"]) delete headers_obj["secure"]; } } - if (socket_sessions[socket.id].do_not_encrypt) { - if (headers_obj["wtv-encrypted"]) delete headers_obj["wtv-encrypted"]; - if (headers_obj["secure"]) delete headers_obj["secure"]; - } // calculate content length // make sure we are using our Content-length and not one set in a script. if (headers_obj["Content-Length"]) delete headers_obj["Content-Length"]; if (headers_obj["Content-length"]) delete headers_obj["Content-length"]; + headers_obj["Content-length"] = content_length; - if (ssid_sessions[socket.ssid]) { - if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { - if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64) { - if (ssid_sessions[socket.ssid].data_store.update_ticket) { - headers_obj["wtv-ticket"] = ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64; - headers_obj = moveObjectElement("wtv-ticket", "Connection", headers_obj); - ssid_sessions[socket.ssid].data_store.update_ticket = false; + // if force-content-length is defined, use it for webtvisms + if (headers_obj["minisrv-force-content-length"]) { + headers_obj["Content-length"] = headers_obj["minisrv-force-content-length"]; + delete headers_obj["minisrv-force-content-length"]; + + } + + if (!socket.res) { + // Send wtv-ticket if it has been flagged as updated + if (ssid_sessions[socket.ssid]) { + if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { + if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64) { + if (ssid_sessions[socket.ssid].data_store.wtvsec_login.update_ticket) { + headers_obj["wtv-ticket"] = ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64; + headers_obj = moveObjectElement("wtv-ticket", "Connection", headers_obj); + ssid_sessions[socket.ssid].data_store.wtvsec_login.update_ticket = false; + } } } } } - var end_of_line = "\n"; - if (socket.minisrv_pc_mode) { - end_of_line = "\r\n"; - headers_obj['http_response'] = "HTTP/1.0 " + headers_obj['http_response']; - } + if (!socket.res) { + var end_of_line = "\n"; -/* // wtv-request-type download wants minimal headers? - if (data.byteLength > 0) { - if (socket_sessions[socket.id].wtv_request_type == "download") { - if (headers_obj['Content-Type'] != "wtv/download-list") { - // minimalize headers - var new_headers = { "http_response": headers_obj['http_response'].split(" ")[0] + " " } - if (headers_obj['wtv-encrypted']) new_headers['wtv-encrypted'] = headers_obj['wtv-encrypted']; - new_headers["content-type"] = headers_obj['Content-Type']; - new_headers["content-length"] = headers_obj['Content-length']; - - headers_obj = new_headers; - } - } - } -*/ - // header object to string - if (minisrv_config.config.debug_flags.show_headers) console.log(" * Outgoing headers on socket ID", socket.id, (await wtvshared.filterSSID(headers_obj))); - Object.keys(headers_obj).forEach(function (k) { - if (k == "http_response") { - headers += headers_obj[k] + end_of_line; - } else { - if (k.indexOf('_') >= 0) { - var j = k.split('_')[0]; - headers += j + ": " + headers_obj[k] + end_of_line; + // header object to string + if (minisrv_config.config.debug_flags.show_headers) console.log(" * Outgoing headers on socket ID", socket.id, (await wtvshared.filterSSID(headers_obj))); + Object.keys(headers_obj).forEach(function (k) { + if (k == "Response") { + headers += headers_obj[k] + end_of_line; } else { - headers += k + ": " + headers_obj[k] + end_of_line; + if (k.indexOf('_') >= 0) { + var j = k.split('_')[0]; + headers += j + ": " + headers_obj[k] + end_of_line; + } else { + headers += k + ": " + headers_obj[k] + end_of_line; + } } - } - }); + }); - if (headers_obj["Connection"]) { - if (headers_obj["Connection"].toLowerCase() == "close" && wtv_connection_close == "true") { - socket_sessions[socket.id].destroy_me = true; + if (headers_obj["Connection"]) { + if (headers_obj["Connection"].toLowerCase() == "close" && wtv_connection_close) { + socket_sessions[socket.id].destroy_me = true; + } } } // send to client - var toClient = null; - if (typeof data == 'string') { - toClient = headers + end_of_line + data; - sendToSocket(socket, Buffer.from(toClient)); - } else if (typeof data == 'object') { - if (minisrv_config.config.debug_flags.quiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; - if (socket_sessions[socket.id].secure_headers == true) { - // encrypt headers - if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers"; - var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + end_of_line); - sendToSocket(socket, new Buffer.from(concatArrayBuffer(enc_headers, data))); - } else { - sendToSocket(socket, new Buffer.from(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); + if (socket.res) { + + var resCode = parseInt(headers_obj.Response.substr(0, 3)); + headers_obj['x-powered-by'] = "Express via " + z_title; + socket.res.writeHead(resCode, headers_obj); + socket.res.end(data); + var log_obj = Object.assign({}, socket.res.getHeaders()); + if (minisrv_config.config.debug_flags.show_headers) console.log(" * Outgoing PC headers on " + socket.service_name + " socket ID", socket.id, log_obj); + if (minisrv_config.config.debug_flags.quiet) console.log(" * Sent response " + headers_obj.Response + " to PC client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); + } else { + var toClient = null; + if (typeof data == 'string') { + toClient = headers + end_of_line + data; + sendToSocket(socket, Buffer.from(toClient)); + } else if (typeof data == 'object') { + if (minisrv_config.config.debug_flags.quiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; + if (socket_sessions[socket.id].secure_headers == true) { + // encrypt headers + if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers"; + var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + end_of_line); + sendToSocket(socket, new Buffer.from(concatArrayBuffer(enc_headers, data))); + } else { + sendToSocket(socket, new Buffer.from(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); + } + if (minisrv_config.config.debug_flags.quiet) console.log(" * Sent" + verbosity_mod + " " + headers_obj.Response + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); } - if (minisrv_config.config.debug_flags.quiet) console.log(" * Sent" + verbosity_mod + " " + headers_obj.http_response + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); } } @@ -840,109 +1264,14 @@ function moveObjectElement(currentKey, afterKey, obj) { if (next !== -1) return result; else return obj; } -function checkSecurity(socket) { - var out = null; - var ip2long = function (ip) { - var components; - if (components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) { - var iplong = 0; - var power = 1; - for (var i = 4; i >= 1; i -= 1) { - iplong += power * parseInt(components[i]); - power *= 256; - } - return iplong; - } - else return -1; - }; - - var isInSubnet = function (ip, subnet) { - var mask, base_ip, long_ip = ip2long(ip); - if ((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = ip2long(mask[1])) >= 0)) { - var freedom = Math.pow(2, 32 - parseInt(mask[2])); - return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1); - } - else return false; - }; - - var rejectSSIDConnection = function (ssid, blacklist) { - var rejectReason = null; - if (blacklist) { - rejectReason = ssid + " is in the blacklist."; - console.log(" * Request from SSID", wtvshared.filterSSID(ssid), "(" + socket.remoteAddress + "), but that SSID is in the blacklist, rejecting."); - } else { - rejectReason = ssid + " is not in the whitelist."; - console.log(" * Request from SSID", wtvshared.filterSSID(socket.ssid), "(" + socket.remoteAddress + "), but that SSID is not in the whitelist, rejecting."); - } - if (fs.existsSync(__dirname + '/ServiceDeps/TOS.html')) { - var tosErrorPage = fs.readFileSync(__dirname + '/ServiceDeps/TOS.html').toString(); - out = new Array(`200 Goodbye -wtv-service: reset -Connection: close -Content-type: text/html`, tosErrorPage.replace('\$\{REASON\}', rejectReason)); - } else { - var errpage = wtvshared.doErrorPage(401, "Access to this service is denied."); - out = errpage; - } - } - - var checkSSIDIPWhitelist = function (ssid, blacklist) { - var ssid_access_list_ip_override = false; - if (minisrv_config.config.ssid_ip_allow_list) { - if (minisrv_config.config.ssid_ip_allow_list[socket.ssid]) { - Object.keys(minisrv_config.config.ssid_ip_allow_list[socket.ssid]).forEach(function (k) { - if (minisrv_config.config.ssid_ip_allow_list[socket.ssid][k].indexOf('/') > 0) { - if (isInSubnet(socket.remoteAddress, minisrv_config.config.ssid_ip_allow_list[socket.ssid][k])) { - // remoteAddr is in allowed subnet - ssid_access_list_ip_override = true; - } - } else { - if (socket.remoteAddress == minisrv_config.config.ssid_ip_allow_list[socket.ssid][k]) { - // remoteAddr directly matches IP - ssid_access_list_ip_override = true; - } - } - }); - if (!ssid_access_list_ip_override) rejectSSIDConnection(socket.ssid, blacklist); - } else { - rejectSSIDConnection(socket.ssid, blacklist); - } - } else { - rejectSSIDConnection(socket.ssid, blacklist); - } - if (ssid_access_list_ip_override && minisrv_config.config.debug_flags.debug) console.log(" * Request from disallowed SSID", wtvshared.filterSSID(ssid), "was allowed due to IP address whitelist"); - } - - // process whitelist first - if (socket.ssid && minisrv_config.config.ssid_allow_list) { - var ssid_is_in_whitelist = minisrv_config.config.ssid_allow_list.findIndex(element => element == socket.ssid); - if (ssid_is_in_whitelist == -1) { - // no whitelist match, but lets see if the remoteAddress is allowed - checkSSIDIPWhitelist(socket.ssid, false); - } - } - - // now check blacklist - if (socket.ssid && minisrv_config.config.ssid_block_list) { - var ssid_is_in_blacklist = minisrv_config.config.ssid_block_list.findIndex(element => element == socket.ssid); - if (ssid_is_in_blacklist != -1) { - // blacklist match, but lets see if the remoteAddress is allowed - checkSSIDIPWhitelist(socket.ssid, true); - } - } - - // Passed Security - return out; -} - -function isUnencryptedString(string, verbose = false) { +function isUnencryptedString(string) { // a generic "isAscii" check is not sufficient, as the test will see the binary // compressed / encrypted data as ASCII. This function checks for characters expected // in unencrypted headers, and returns true only if every character in the string matches // the regex. Once we know the string is binary, we can better process it with the // raw base64 or hex data in processRequest() below. - return /^([A-Za-z0-9\+\/\=\-\.\,\ \"\;\:\?\&\r\n\(\)\%\<\>\_\~\*\@\#\\]{8,})$/.test(string); + return /^([A-Za-z0-9\+\/\=\-\.\,\ \"\;\:\?\&\r\n\(\)\%\<\>\_\~\*\@\#\\\!]{8,})$/.test(string); } async function processRequest(socket, data_hex, skipSecure = false, encryptedRequest = false) { @@ -980,7 +1309,7 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq // its not a POST and it failed the isUnencryptedString test, so we think this is an encrypted blob if (socket_sessions[socket.id].secure != true) { // first time so reroll sessions - if (minisrv_config.config.debug_flags.debug) console.log(" # [ UNEXPECTED BINARY BLOCK ] First sign of encryption, re-creating RC4 sessions for socket id", socket.id); + // if (minisrv_config.config.debug_flags.debug) console.log(" # [ UNEXPECTED BINARY BLOCK ] First sign of encryption, re-creating RC4 sessions for socket id", socket.id); socket_sessions[socket.id].wtvsec = new WTVSec(minisrv_config); socket_sessions[socket.id].wtvsec.IssueChallenge(); socket_sessions[socket.id].wtvsec.SecureOn(); @@ -1019,20 +1348,20 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq ssid_sessions[socket.ssid].SaveIfRegistered(); } if (!ssid_sessions[socket.ssid].data_store.sockets) ssid_sessions[socket.ssid].data_store.sockets = new Set(); - ssid_sessions[socket.ssid].ssid = socket.ssid; ssid_sessions[socket.ssid].data_store.sockets.add(socket); } } - var failed_security = checkSecurity(socket); - if (failed_security) { - socket_sessions[socket.id].close_me = true; - headers = failed_security[0]; - data = failed_security[1]; - sendToClient(socket, headers, data); + if (!socket.ssid) { + // process as pc service + processURL(socket, headers); return; } + if (!ssid_sessions[socket.ssid] || !socket.ssid) return headers; + if (!ssid_sessions[socket.ssid].getClientAddress()) ssid_sessions[socket.ssid].setClientAddress(socket.remoteAddress); + ssid_sessions[socket.ssid].checkSecurity(); + if (headers["wtv-capability-flags"] != null) { if (!ssid_sessions[socket.ssid]) { ssid_sessions[socket.ssid] = new WTVClientSessionData(minisrv_config, socket.ssid); @@ -1062,12 +1391,22 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq if (headers["wtv-incarnation"]) ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(headers["wtv-incarnation"]); ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = headers["wtv-ticket"]; ssid_sessions[socket.ssid].data_store.wtvsec_login.DecodeTicket(ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64); + if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id != null) { + if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id >= 0) + ssid_sessions[socket.ssid].switchUserID(ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id, true, false); + } } else { if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 != headers["wtv-ticket"]) { - if (minisrv_config.config.debug_flags.debug) console.log(" # New ticket from client"); - ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = headers["wtv-ticket"]; - ssid_sessions[socket.ssid].data_store.wtvsec_login.DecodeTicket(ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64); - if (headers["wtv-incarnation"]) ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(headers["wtv-incarnation"]); + if (!ssid_sessions[socket.ssid].data_store.wtvsec_login.update_ticket) { + if (minisrv_config.config.debug_flags.debug) console.log(" # New ticket from client"); + ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64 = headers["wtv-ticket"]; + ssid_sessions[socket.ssid].data_store.wtvsec_login.DecodeTicket(ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_b64); + if (headers["wtv-incarnation"]) ssid_sessions[socket.ssid].data_store.wtvsec_login.set_incarnation(headers["wtv-incarnation"]); + if (ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id >= 0) { + if (ssid_sessions[socket.ssid].user_id != ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id) + ssid_sessions[socket.ssid].switchUserID(ssid_sessions[socket.ssid].data_store.wtvsec_login.ticket_store.user_id, true, false); + } + } } } } @@ -1157,7 +1496,6 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq return; } } - // handle POST if (headers['request'] && !socket_sessions[socket.id].expecting_post_data) { if (headers['request'].substring(0, 4) == "POST") { @@ -1187,7 +1525,7 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq processURL(socket, headers); } else if (socket_sessions[socket.id].post_data.length > (socket_sessions[socket.id].post_data_length * 2)) { // got too much data ? ... should not ever reach this code (section 2) - var errpage = wtvshared.doErrorPage(400, "Received too much data in POST request
      Got " + (socket_sessions[socket.id].post_data.length / 2) + ", expected " + socket_sessions[socket.id].post_data_length) + " (2)"; + var errpage = wtvshared.doErrorPage(400, null, "Received too much data in POST request
      Got " + (socket_sessions[socket.id].post_data.length / 2) + ", expected " + socket_sessions[socket.id].post_data_length) + " (2)"; headers = errpage[0]; data = errpage[1]; sendToClient(socket, headers, data); @@ -1198,7 +1536,7 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq if (!socket_sessions[socket.id].post_data) socket_sessions[socket.id].post_data = ''; socket_sessions[socket.id].post_data += CryptoJS.enc.Hex.parse(socket_sessions[socket.id].post_data); console.log(" * Incoming", post_string, "request on", socket.id, "from", wtvshared.filterSSID(socket.ssid), "to", headers['request_url'], "(expecting", socket_sessions[socket.id].post_data_length, "bytes of data from client...)"); - } + } return; } else { delete socket_sessions[socket.id].headers; @@ -1206,12 +1544,13 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq delete socket_sessions[socket.id].post_data_length; processURL(socket, headers); return; - } + } } else { socket_sessions[socket.id].headers = headers; } } else { - // handle streaming POST + + // handle streaming POST if (socket_sessions[socket.id].expecting_post_data && headers) { socket_sessions[socket.id].headers = headers; if (socket_sessions[socket.id].post_data.length < (socket_sessions[socket.id].post_data_length * 2)) { @@ -1269,13 +1608,12 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq if (socket_sessions[socket.id].expecting_post_data) delete socket_sessions[socket.id].expecting_post_data; socket.setTimeout(minisrv_config.config.socket_timeout * 1000); // got too much data ? ... should not ever reach this code - var errpage = wtvshared.doErrorPage(400, "Received too much data in POST request
      Got " + (socket_sessions[socket.id].post_data.length / 2) + ", expected " + socket_sessions[socket.id].post_data_length); + var errpage = wtvshared.doErrorPage(400, null, "Received too much data in POST request
      Got " + (socket_sessions[socket.id].post_data.length / 2) + ", expected " + socket_sessions[socket.id].post_data_length); headers = errpage[0]; data = errpage[1]; sendToClient(socket, headers, data); return; } - } else if (!skipSecure) { if (!encryptedRequest) { if (socket_sessions[socket.id].secure != true) { @@ -1335,13 +1673,13 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq } } } - } + } } - } + } } async function cleanupSocket(socket) { - try { + try { if (socket_sessions[socket.id]) { if (!minisrv_config.config.debug_flags.quiet) console.log(" * Cleaning up disconnected socket", socket.id); delete socket_sessions[socket.id]; @@ -1363,7 +1701,7 @@ async function cleanupSocket(socket) { // set timeout to check ssid_sessions[socket.ssid].data_store.socket_check = setTimeout(function (ssid) { if (ssid_sessions[ssid].currentConnections() === 0) { - if (!minisrv_config.config.debug_flags.quiet) console.log(" * WebTV SSID", wtvshared.filterSSID(ssid), " has not been seen in", (timeout / 1000), "seconds, cleaning up session data for this SSID"); + if (!minisrv_config.config.debug_flags.quiet) console.log(" * WebTV SSID", wtvshared.filterSSID(ssid), "has not been seen in", (timeout / 1000), "seconds, cleaning up session data for this SSID"); delete ssid_sessions[ssid]; } }, timeout, socket.ssid); @@ -1430,21 +1768,26 @@ function getGitRevision() { if (rev.indexOf(':') === -1) { return rev; } else { - return fs.readFileSync(__dirname + path.sep + ".." + path.sep + ".git" + path.sep + rev.substring(5)).toString().trim().substring(0,8) + "-" + rev.split('/').pop(); + return fs.readFileSync(__dirname + path.sep + ".." + path.sep + ".git" + path.sep + rev.substring(5)).toString().trim().substring(0, 8) + "-" + rev.split('/').pop(); } } catch (e) { return null; } } +var minisrv_config = null; + +function reloadConfig() { + minisrv_config = wtvshared.readMiniSrvConfig(true, false, true); // snatches minisrv_config + return minisrv_config; +} // SERVER START var git_commit = getGitRevision() var z_title = "zefie's wtv minisrv v" + require('./package.json').version; -if (git_commit) console.log("**** Welcome to " + z_title + " (git " + git_commit + ") ****"); -else console.log("**** Welcome to " + z_title + " ****"); +if (git_commit) z_title += " (git " + git_commit + ")"; +console.log("**** Welcome to " + z_title + " ****"); -const wtvshared = new WTVShared(); // creates minisrv_config -var minisrv_config = wtvshared.getMiniSrvConfig(); // snatches minisrv_config +minisrv_config = wtvshared.getMiniSrvConfig(); // snatches minisrv_config const wtvmime = new WTVMime(minisrv_config); if (git_commit) { @@ -1461,7 +1804,7 @@ if (minisrv_config.config.ServiceVaults) { Object.keys(minisrv_config.config.ServiceVaults).forEach(function (k) { var service_vault = wtvshared.returnAbsolutePath(minisrv_config.config.ServiceVaults[k]); service_vaults.push(service_vault); - console.log(" * Configured Service Vault at", service_vault, "with priority",(parseInt(k)+1)); + console.log(" * Configured Service Vault at", service_vault, "with priority", (parseInt(k) + 1)); }) } else { throw ("ERROR: No Service Vaults defined!"); @@ -1474,6 +1817,13 @@ if (minisrv_config.config.SessionStore) { throw ("ERROR: No Session Storage Directory (SessionStore) defined!"); } +if (minisrv_config.config.ServiceDeps) { + var ServiceDeps = wtvshared.returnAbsolutePath(minisrv_config.config.ServiceDeps); + console.log(" * Configured Service Dependancies at", ServiceDeps); +} else { + throw ("ERROR: No Service Dependancies Directory (SessionDeps) defined!"); +} + var service_ip = minisrv_config.config.service_ip; Object.keys(minisrv_config.services).forEach(function (k) { if (minisrv_config.services[k].disabled) return; @@ -1483,7 +1833,8 @@ Object.keys(minisrv_config.services).forEach(function (k) { minisrv_config.services[k].host = service_ip; } if (minisrv_config.services[k].port && !minisrv_config.services[k].nobind) { - ports.push(minisrv_config.services[k].port); + if (minisrv_config.services[k].pc_services) pc_ports.push(minisrv_config.services[k].port); + else ports.push(minisrv_config.services[k].port); } // minisrv_config service toString minisrv_config.services[k].toString = function (overrides) { @@ -1507,11 +1858,14 @@ Object.keys(minisrv_config.services).forEach(function (k) { } return outstr; } - console.log(" * Configured Service", k, "on Port", minisrv_config.services[k].port, "- Host", minisrv_config.services[k].host, "- Bind Port:", !minisrv_config.services[k].nobind); + console.log(" * Configured Service:", k, "on Port", minisrv_config.services[k].port, "- Service Host:", minisrv_config.services[k].host, "- Bind Port:", !minisrv_config.services[k].nobind, "- PC Services Mode:", (minisrv_config.services[k].pc_services) ? true : false); }) if (minisrv_config.config.hide_ssid_in_logs) console.log(" * Masking SSIDs in console logs for security"); else console.log(" * Full SSIDs will be shown in console logs"); +if (minisrv_config.config.filter_passwords_in_logs) console.log(" * Will attempt to filter passwords in browser queries") +else console.log(" * Passwords in browser queries will not be filtered") + if (minisrv_config.config.service_logo.indexOf(':') == -1) minisrv_config.config.service_logo = "wtv-star:/ROMCache/" + minisrv_config.config.service_logo; if (minisrv_config.config.service_splash_logo.indexOf(':') == -1) minisrv_config.config.service_splash_logo = "wtv-star:/ROMCache/" + minisrv_config.config.service_splash_logo; @@ -1519,76 +1873,123 @@ minisrv_config.version = require('./package.json').version; if (minisrv_config.config.error_log_file) { var error_log_stream = fs.createWriteStream(wtvshared.returnAbsolutePath(minisrv_config.config.error_log_file), { flags: 'a' }); var process_stderr = process.stderr.write; - var writeError = function() { + var writeError = function () { process_stderr.apply(process.stderr, arguments); if (error_log_stream) error_log_stream.write.apply(error_log_stream, arguments); } process.stderr.write = writeError } +// sanity +if (minisrv_config.config.user_accounts.max_users_per_account < 1) { + console.log(" * WARNING: user_accounts.max_users_per_account should be at least 1, we have set it to 1."); + minisrv_config.config.user_accounts.max_users_per_account = 1; +} +if (minisrv_config.config.user_accounts.max_users_per_account > 99) { + console.log(" * WARNING: user_accounts.max_users_per_account should be less than 99, we have set it to 99."); + minisrv_config.config.user_accounts.max_users_per_account = 99; +} + process.on('uncaughtException', function (err) { console.error((err && err.stack) ? err.stack : err); }); -// defaults -minisrv_config.config.debug_flags = []; -minisrv_config.config.debug_flags.debug = false; -minisrv_config.config.debug_flags.quiet = true; // will squash minisrv_config.config.debug_flags.debug even if its true -minisrv_config.config.debug_flags.show_headers = false; -if (minisrv_config.config.verbosity) { - switch (minisrv_config.config.verbosity) { - case 0: - minisrv_config.config.debug_flags.debug = false; - minisrv_config.config.debug_flags.quiet = true; - minisrv_config.config.debug_flags.show_headers = false; - console.log(" * Console Verbosity level 0 (quietest)") - break; - case 1: - minisrv_config.config.debug_flags.debug = false; - minisrv_config.config.debug_flags.quiet = true; - minisrv_config.config.debug_flags.show_headers = true; - console.log(" * Console Verbosity level 1 (headers shown)") - break; - case 2: - minisrv_config.config.debug_flags.debug = true; - minisrv_config.config.debug_flags.quiet = true; - minisrv_config.config.debug_flags.show_headers = false; - console.log(" * Console Verbosity level 2 (verbose without headers)") - break; - case 3: - minisrv_config.config.debug_flags.debug = true; - minisrv_config.config.debug_flags.quiet = true; - minisrv_config.config.debug_flags.show_headers = true; - console.log(" * Console Verbosity level 3 (verbose with headers)") - break; - default: - minisrv_config.config.debug_flags.debug = true; - minisrv_config.config.debug_flags.quiet = false; - minisrv_config.config.debug_flags.show_headers = true; - console.log(" * Console Verbosity level 4 (debug verbosity)") - break; +function findServiceByPort(port) { + var service_name = null; + Object.keys(minisrv_config.services).forEach(function (k) { + if (service_name) return; + if (minisrv_config.services[k].port) { + if (port == parseInt(minisrv_config.services[k].port)) + service_name = k; + } + }) + return service_name; +} + + +function getPortByService(service) { + if (minisrv_config.services[service]) return minisrv_config.services[service].port; + else return null; +} + +function getSocketDestinationPort(socket) { + return parseInt(socket._server._connectionKey.split(':')[2]); +} + +function verifyServicePort(service_name, socket) { + if (socket._server._connectionKey) { + var socketPort = getSocketDestinationPort(socket); + if (minisrv_config.services[service_name]) { + if (minisrv_config.services[service_name].port == socketPort) { + if (minisrv_config.services[service_name].servicevault_dir) + return minisrv_config.services[service_name].servicevault_dir; + else + return service_name; + } + } } + return false; } var initstring = ''; +var initstring_pc = ''; ports.sort(); +pc_ports.sort(); // de-duplicate ports in case user configured multiple services on same port const bind_ports = [...new Set(ports)] if (!minisrv_config.config.bind_ip) minisrv_config.config.bind_ip = "0.0.0.0"; -bind_ports.forEach(function (v) { +bind_ports.every(function (v) { try { var server = net.createServer(handleSocket); server.listen(v, minisrv_config.config.bind_ip); initstring += v + ", "; + return true; } catch (e) { throw ("Could not bind to port", v, "on", minisrv_config.config.bind_ip, e.toString()); } + return false; }); -initstring = initstring.substring(0, initstring.length - 2); +// PC Services via express +// de-duplicate ports in case user configured multiple services on same port +const pc_bind_ports = [...new Set(pc_ports)] +if (!minisrv_config.config.bind_ip) minisrv_config.config.bind_ip = "0.0.0.0"; +pc_bind_ports.every(function (v) { + try { + var server = express(); + server.listen(v, minisrv_config.config.bind_ip); + initstring_pc += v + ", "; + server.get('*', (req, res) => { + var request_headers = {}; + req.socket.id = parseInt(crc16('CCITT-FALSE', Buffer.from(String(req.socket.remoteAddress) + String(req.socket.remotePort), "utf8")).toString(16), 16); + socket_sessions[req.socket.id] = []; + var service_name = findServiceByPort(v); + request_headers['request'] = "GET " + req.originalUrl + " HTTP/1.1"; + request_headers.request_url = req.originalUrl; + Object.keys(req.headers).forEach(function (k) { + request_headers[k] = req.headers[k]; + }); + request_headers.query = req.query; + if (minisrv_config.config.debug_flags.show_headers) console.log(" * Incoming PC Headers on", service_name, "socket ID", req.socket.id, wtvshared.filterRequestLog(request_headers)); + request_headers.service_name = service_name; + req.socket.minisrv_pc_mode = true; + req.socket.res = res; + req.socket.service_name = service_name; + processURL(req.socket, request_headers, true) + }) + return true; + } catch (e) { + throw ("Could not bind to port", v, "on", minisrv_config.config.bind_ip, e.toString()); + } + return false; +}); +if (initstring.length > 0) initstring = initstring.substring(0, initstring.length - 2); +if (initstring_pc.length > 0) initstring_pc = initstring_pc.substring(0, initstring_pc.length - 2); + +if (initstring.length > 0) console.log(" * Started WTVP Server on port(s) " + initstring + "...") +if (initstring_pc.length > 0) console.log(" * Started HTTP Server on port(s) " + initstring_pc + "...") -console.log(" * Started server on ports " + initstring + "...") var listening_ip_string = (minisrv_config.config.bind_ip != "0.0.0.0") ? "IP: " + minisrv_config.config.bind_ip : "all interfaces"; -console.log(" * Listening on", listening_ip_string,"~","Service IP:", service_ip); \ No newline at end of file +console.log(" * Listening on", listening_ip_string, "~", "Service IP:", service_ip); \ No newline at end of file diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json deleted file mode 100644 index 2ff44672..00000000 --- a/zefie_wtvp_minisrv/config.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "config": { - "service_ip": "127.0.0.1", - "ServiceVaults": [ - "UserServiceVault", - "ServiceVault" - ], - "SessionStore": "SessionStore", - "service_owner": "a minisrv user", - "service_name": "WebTV", - "service_logo": "WebTVLogoJewel.gif", - "service_splash_logo": "file://ROM/images/SplashLogo1.gif", - "hide_ssid_in_logs": true, - "post_percentages": [ 0, 25, 50, 100 ], - "verbosity": 2, - "socket_timeout": 86400, - "post_data_socket_timeout": 30, - "error_log_file": "errors.log", - "catchall_file_name": "catchall.js", - "hide_incomplete_features": true, - "enable_lzpf_compression": true, - "enable_gzip_compression": true, - "pc_server_hidden_service": "http_pc", - "pc_server_hidden_service_enabled": false, - "show_diskmap": false, - "allow_guests": true - }, - "services": { - "wtv-head-waiter": { - "port": 1601, - "connections": 1 - }, - "wtv-tricks": { - "port": 1602, - "flags": "0x00000004" - }, - "wtv-star": { - "port": 1603, - "flags": "0x00000007" - }, - "wtv-register": { - "port": 1607 - }, - "wtv-log": { - "port": 1609, - "connections": 1, - "write_logs_to_disk": false - }, - "wtv-home": { - "port": 1612 - }, - "wtv-1800": { - "port": 1615, - "connections": 1, - "flags": "0x00000004", - "send_tellyscripts": false - }, - "wtv-flashrom": { - "port": 1618, - "flags": "0x00000040", - "debug": false, - "use_zefie_server": true, - "bf0app_default_rom": "content/artemis-webtv-000/build7588/daily-nondebug/bf0app-part000.rom", - "catchall_file_name": "content-serve.js" - }, - "wtv-setup": { - "port": 1613, - "flags": "0x00000010", - "connections": 3 - }, - "wtv-cookie": { - "port": 1619, - "connections": 1 - }, - "wtv-chat": { - "port": 1630, - "connections": 3 - }, - "wtv-disk": { - "port": 1635, - "connections": 3 - }, - "http": { - "port": 1650, - "connections": 3, - "use_external_proxy": false, - "external_proxy_is_socks": false, - "external_proxy_host": "127.0.0.1", - "external_proxy_port": 1080, - "flags": "0x00000001" - }, - "https": { - "port": 1650, - "connections": 3, - "use_external_proxy": false, - "external_proxy_is_socks": false, - "external_proxy_host": "127.0.0.1", - "external_proxy_port": 1080, - "flags": "0x00000001" - }, - "wtv-music": { - "port": 1656, - "connections": 3 - } - } -} diff --git a/zefie_wtvp_minisrv/diskmap_gen.js b/zefie_wtvp_minisrv/diskmap_gen.js index 6ededbdd..72abf657 100644 --- a/zefie_wtvp_minisrv/diskmap_gen.js +++ b/zefie_wtvp_minisrv/diskmap_gen.js @@ -1,7 +1,7 @@ const process = require('process'); const fs = require('fs'); const path = require('path'); -var { WTVShared, clientShowAlert } = require("./WTVShared.js"); +var { WTVShared, clientShowAlert } = require(classPath + "/WTVShared.js"); const wtvshared = new WTVShared(); // creates minisrv_config var minisrv_config = wtvshared.getMiniSrvConfig(); // snatches minisrv_config diff --git a/zefie_wtvp_minisrv/includes/WTVAdmin.js b/zefie_wtvp_minisrv/includes/WTVAdmin.js new file mode 100644 index 00000000..a358467b --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVAdmin.js @@ -0,0 +1,172 @@ +class WTVAdmin { + + fs = require('fs'); + path = require('path'); + minisrv_config = []; + wtvr = null; + wtvshared = null; + wtvclient = null; + WTVClientSessionData = require("./WTVClientSessionData.js"); + service_name = "wtv-admin"; + + constructor(minisrv_config, wtvclient, service_name) { + this.minisrv_config = minisrv_config; + var { WTVShared } = require("./WTVShared.js"); + var WTVRegister = require("./WTVRegister.js"); + this.wtvclient = wtvclient; + this.wtvshared = new WTVShared(minisrv_config); + this.wtvr = new WTVRegister(minisrv_config); + this.clientAddress = wtvclient.getClientAddress(); + this.service_name = service_name; + } + + + ip2long(ip) { + var components; + + if (components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) { + var iplong = 0; + var power = 1; + for (var i = 4; i >= 1; i -= 1) { + iplong += power * parseInt(components[i]); + power *= 256; + } + return iplong; + } + else return -1; + } + + isInSubnet(ip, subnet) { + if (subnet.indexOf('/') == -1) { + var mask, base_ip, long_ip = this.ip2long(ip); + var mask2, base_ip2, long_ip2 = this.ip2long(ip); + return (long_ip == long_ip2); + } else { + var mask, base_ip, long_ip = this.ip2long(ip); + if ((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = this.ip2long(mask[1])) >= 0)) { + var freedom = Math.pow(2, 32 - parseInt(mask[2])); + return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1); + } + } + return false; + } + + rejectConnection(reason_is_ssid) { + var rejectReason; + if (reason_is_ssid) { + rejectReason = this.wtvclient.ssid + " is not in the whitelist."; + console.log(" * Request from SSID", this.wtvshared.filterSSID(this.wtvclient.ssid), "(" + this.clientAddress + ") for wtv-admin, but that SSID is not in the admin whitelist."); + } else { + rejectReason = this.clientAddress + " is not in the whitelist for SSID " + this.wtvclient.ssid + "."; + console.log(" * Request from SSID", this.wtvshared.filterSSID(this.wtvclient.ssid), "(" + this.clientAddress + ") for wtv-admin, but that IP is not authorized for that SSID."); + } + return rejectReason; + } + + checkPassword(password) { + if (this.minisrv_config.services[this.service_name].password) { + return (password == this.minisrv_config.services[this.service_name].password); + } else { + // no password set + return true; + } + } + + isAuthorized() { + var allowed_ssid = false; + var allowed_ip = false; + if (this.minisrv_config.services[this.service_name].authorized_ssids) { + var self = this; + Object.keys(self.minisrv_config.services[this.service_name].authorized_ssids).forEach(function (k) { + if (typeof self.minisrv_config.services[self.service_name].authorized_ssids[k] == "string") { + var ssid = self.minisrv_config.services[self.service_name].authorized_ssids[k] + if (ssid == self.wtvclient.ssid) allowed_ssid = true; + allowed_ip = true; // no ip block defined + } else { + var ssid = k; + if (ssid == self.wtvclient.ssid) { + allowed_ssid = true; + Object.keys(self.minisrv_config.services[self.service_name].authorized_ssids[k]).forEach(function (j) { + if (self.isInSubnet(self.clientAddress, self.minisrv_config.services[self.service_name].authorized_ssids[k][j])) { + allowed_ip = true; + } + }); + } + } + }); + } + return (allowed_ssid && allowed_ip) ? true : this.rejectConnection(!allowed_ssid); + } + + getAccountInfo(username, directory = null) { + var search_dir = this.minisrv_config.config.SessionStore; + var account_data = null; + var self = this; + if (directory) search_dir = directory; + this.fs.readdirSync(search_dir).forEach(file => { + if (self.fs.lstatSync(search_dir + self.path.sep + file).isDirectory() && account_data === null) { + account_data = self.getAccountInfo(username, search_dir + self.path.sep + file); + } + if (account_data !== null) return; + if (!file.match(/.*\.json/ig)) return; + try { + var temp_session_data_file = self.fs.readFileSync(search_dir + self.path.sep + file, 'Utf8'); + var temp_session_data = JSON.parse(temp_session_data_file); + + if (temp_session_data.subscriber_username.toLowerCase() == username.toLowerCase()) { + account_data = [temp_session_data, (search_dir + self.path.sep + file).replace(this.minisrv_config.config.SessionStore + this.path.sep, "").split(this.path.sep)[0]]; + } + } catch (e) { + console.error(" # Error parsing Session Data JSON", search_dir + self.path.sep + file, e); + } + }); + if (account_data !== null) { + if (account_data.ssid) return account_data; + var account_info = {}; + account_info.ssid = account_data[1]; + account_info.username = account_data[0].subscriber_username; + account_info.user_id = account_data[0].subscriber_userid; + var userSession = new this.WTVClientSessionData(this.minisrv_config, account_info.ssid); + userSession.user_id = 0; + account_info.account_users = userSession.listPrimaryAccountUsers(); + return account_info; + } + return null; + } + + getAccountInfoBySSID(ssid) { + var account_info = {}; + var userSession = new this.WTVClientSessionData(this.minisrv_config, ssid); + userSession.user_id = 0; + if (userSession.isRegistered(false)) { + account_info.ssid = ssid; + account_info.account_users = userSession.listPrimaryAccountUsers(); + account_info.username = account_info.account_users['subscriber'].subscriber_username; + account_info.user_id = 0; + return account_info; + } + else return false; + } + + + getAccountBySSID(ssid) { + var userSession = new this.WTVClientSessionData(this.minisrv_config, ssid); + userSession.user_id = 0; + return userSession; + } + + isBanned(ssid) { + var self = this; + var isBanned = false; + if (this.minisrv_config.config.ssid_block_list) { + Object.keys(this.minisrv_config.config.ssid_block_list).forEach(function (k) { + if (self.minisrv_config.config.ssid_block_list[k] == ssid) { + isBanned = true; + } + }); + } + return isBanned; + } +} + +module.exports = WTVAdmin; diff --git a/zefie_wtvp_minisrv/WTVBGMusic.js b/zefie_wtvp_minisrv/includes/WTVBGMusic.js similarity index 99% rename from zefie_wtvp_minisrv/WTVBGMusic.js rename to zefie_wtvp_minisrv/includes/WTVBGMusic.js index 2cfa8bdd..298457f9 100644 --- a/zefie_wtvp_minisrv/WTVBGMusic.js +++ b/zefie_wtvp_minisrv/includes/WTVBGMusic.js @@ -1246,18 +1246,18 @@ class WTVBGMusic { constructor(minisrv_config, session_data) { if (!minisrv_config) throw ("minisrv_config required"); if (!session_data) throw ("WTVClientSessionData required"); - var WTVShared = require('./WTVShared.js')['WTVShared']; + var WTVShared = require("./WTVShared.js")['WTVShared']; this.minisrv_config = minisrv_config; this.session_data = session_data; this.wtvshared = new WTVShared(minisrv_config); } - getMusicObj() { + getMusicObj(force_default = false) { var music_obj = this.session_data.getSessionData("wtv-bgmusic"); if (music_obj === null) music_obj = {}; // check if we need to set defaults - var setDefaults = false; + var setDefaults = force_default; if (!music_obj.enableCategories) setDefaults = true; else if (music_obj.enableCategories.length == 0) setDefaults = true; if (!music_obj.enableSongs) setDefaults = true; diff --git a/zefie_wtvp_minisrv/WTVClientCapabilities.js b/zefie_wtvp_minisrv/includes/WTVClientCapabilities.js similarity index 100% rename from zefie_wtvp_minisrv/WTVClientCapabilities.js rename to zefie_wtvp_minisrv/includes/WTVClientCapabilities.js diff --git a/zefie_wtvp_minisrv/includes/WTVClientSessionData.js b/zefie_wtvp_minisrv/includes/WTVClientSessionData.js new file mode 100644 index 00000000..4187369c --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVClientSessionData.js @@ -0,0 +1,852 @@ +const { lib } = require('crypto-js'); +const CryptoJS = require('crypto-js'); +const WTVMail = require("./WTVMail.js") +const WTVSec = require("./WTVSec.js"); +const WTVFavorites = require("./WTVFavorites.js"); + + +class WTVClientSessionData { + + fs = require('fs'); + path = require('path'); + + ssid = null; + data_store = null; + session_store = null; + mailstore = null; + favstore = null; + login_security = null; + capabilities = null; + session_storage = ""; + minisrv_config = []; + wtvshared = null; + wtvmime = null; + lockdown = null; + lockdownReason = null; + lockdownWhitelist = null; + baddisk = false; + clientAddress = null; + user_id = 0; + cryptoKey = "PNa$WN7gz}!T=t6X7^=|Ii##CEB~p\EP"; + + constructor(minisrv_config, ssid) { + if (!minisrv_config) throw ("minisrv_config required"); + var WTVShared = require("./WTVShared.js")['WTVShared']; + var WTVMime = require("./WTVMime.js"); + this.minisrv_config = minisrv_config; + this.wtvshared = new WTVShared(minisrv_config); + this.wtvmime = new WTVMime(minisrv_config); + this.lockdown = false; + this.ssid = ssid; + this.data_store = new Array(); + this.session_store = {}; + this.lockdownWhitelist = [ + "wtv-1800:/preregister", + "wtv-head-waiter:/login", + "wtv-head-waiter:/ValidateLogin", + "wtv-head-waiter:/login-stage-two", + "wtv-head-waiter:/relogin", + "wtv-head-waiter:/ROMCache/Spacer.gif", + "wtv-head-waiter:/ROMCache/NameStrip.gif", + "wtv-head-waiter:/images/PasswordBanner.gif", + "wtv-head-waiter:/ROMCache/UtilityBullet.gif", + "wtv-head-waiter:/images/NameBanner.gif", + "wtv-head-waiter:/bad-disk", + "wtv-log:/log" + ]; + this.lockdownWhitelist.push(minisrv_config.config.unauthorized_url); + this.lockdownWhitelist.push(minisrv_config.config.service_logo); + this.mailstore = new WTVMail(this.minisrv_config, this) + this.favstore = new WTVFavorites(this.minisrv_config, this) + this.loginWhitelist = Object.assign([], this.lockdownWhitelist); // clone lockdown whitelist into login whitelist + this.loginWhitelist.push("wtv-head-waiter:/choose-user"); + this.loginWhitelist.push("wtv-head-waiter:/password"); + this.loginWhitelist.push("http://*"); // allow http proxy without login + this.loginWhitelist.push("https://*"); // allow https proxy without login + } + + assignMailStore() { + this.mailstore = new WTVMail(this.minisrv_config, this) + } + + createWTVSecSession() { + return new WTVSec(this.minisrv_config) + } + + getAccountTotalUnreadMessages() { + if (!this.isRegistered()) return false; // unregistered + if (this.user_id > 0) return false; // not primary user or pre-login + + + var total_unread_messages = 0; + for (var i = 0; i < this.minisrv_config.config.user_accounts.max_users_per_account; i++) { + var subUserSession = new this.constructor(this.minisrv_config, this.ssid); + subUserSession.switchUserID(i, false, false); + subUserSession.assignMailStore(); + if (subUserSession.mailstore) { + total_unread_messages += subUserSession.mailstore.countUnreadMessages(0); + } + } + return total_unread_messages; + } + + switchUserID(user_id, update_mail = true, update_ticket = true) { + this.user_id = user_id; + this.loadSessionData(); + if (this.isRegistered()) this.assignMailStore(); + if (this.data_store.wtvsec_login && update_ticket) this.setTicketData('user_id', user_id); + } + + setTicketData(key, value) { + if (this.data_store.wtvsec_login) this.data_store.wtvsec_login.setTicketData(key, value); + else return false; + + return true; + } + + getTicketData(key) { + if (this.data_store.wtvsec_login) return this.data_store.wtvsec_login.getTicketData(key); + + return false; + } + + deleteTicketData(key) { + if (this.data_store.wtvsec_login) this.data_store.wtvsec_login.deleteTicketData(key); + else return false; + + return true; + } + + findFreeUserSlot() { + if (this.user_id != 0) return false; // subscriber only command + var master_directory = this.getUserStoreDirectory(true); + if (this.fs.existsSync(master_directory)) { + for (var i = 0; i < this.minisrv_config.config.user_accounts.max_users_per_account; i++) { + var test_dir = master_directory + this.path.sep + "user" + i; + if (!this.fs.existsSync(test_dir)) { + return i; + break; + } + } + } + return false; + } + + getDisplayName() { + return (this.user_id == 0) ? this.getSessionData("subscriber_name") : this.getSessionData("display_name"); + } + + getNumberOfUserAccounts() { + if (!this.isRegistered()) return false; + if (this.user_id != 0) return false; // subscriber only command + return Object.keys(this.listPrimaryAccountUsers()).length; + } + + listPrimaryAccountUsers() { + if (this.user_id != 0) return false; // subscriber only command + + var master_directory = this.getUserStoreDirectory(true); + var account_data = []; + var self = this; + this.fs.readdirSync(master_directory).forEach(f => { + if (self.fs.lstatSync(master_directory + self.path.sep + f).isDirectory()) { + if (f.substr(0, 4) == "user") { + var user_file = master_directory + self.path.sep + f + self.path.sep + f + ".json"; + if (self.fs.existsSync(user_file)) { + if (f == "user0") account_data['subscriber'] = JSON.parse(this.fs.readFileSync(user_file)); + else account_data[f] = JSON.parse(this.fs.readFileSync(user_file)); + } + } + } + }); + return account_data; + } + + + mkdirRecursive(thedir) { + thedir.split(this.path.sep).reduce( + (directories, directory) => { + directories += directory + this.path.sep; + if (!this.fs.existsSync(directories)) { + this.fs.mkdirSync(directories); + } + return directories; + }, + '', + ); + } + + /** + * Returns the absolute path to the user's file store, or false if unregistered + * @param subscriber {boolean} Returns the parent subscriber directory instead of the user's directory + * @returns {string|boolean} Absolute path to the user's file store, or false if unregistered + */ + getUserStoreDirectory(subscriber = false, user_id = null) { + if (user_id == null) user_id = this.user_id; + var userstore = this.minisrv_config.config.SessionStore + this.path.sep + this.ssid + this.path.sep; + if (!subscriber) userstore += "user" + user_id + this.path.sep; + return userstore; + } + + removeUser(user_id) { + if (!this.isRegistered()) return false; // not registered + if (parseInt(this.user_id) !== 0) return false; // not primary account + if (user_id === 0) return false; // cannot delete primary account in this fashion + + var userstore = this.getUserStoreDirectory(false, user_id); + if (this.fs.existsSync(userstore)) { + this.fs.rmSync(userstore, { recursive: true }); + return true; + } + return false; + } + + /** + * Store a file in the user's file store + * @param {string} path Relative path to User's file store + * @param {Buffer} data File data + * @param {number|null} last_modified Unix timestamp to set last modified date to + * @param {boolean} overwrite Overwrite if file exists + * @returns {boolean} Whether or not the file was written + */ + storeUserStoreFile(path, data, last_modified = null, overwrite = true) { + var store_dir = this.getUserStoreDirectory(); + if (!store_dir) return false; // unregistered + // FileStore + store_dir += "FileStore" + this.path.sep; + var result = false; + var path_split = path.split('/'); + var file_name = path_split.pop(); + var store_dir_path = this.wtvshared.makeSafePath(store_dir, path_split.join('/').replace('/', this.path.sep)); + var store_full_path = this.wtvshared.makeSafePath(store_dir_path, file_name); + + try { + if (!this.fs.existsSync(store_dir_path)) this.fs.mkdirSync(store_dir_path, { recursive: true }); + var file_exists = this.fs.existsSync(store_full_path); + if (!file_exists || (file_exists && overwrite)) result = this.fs.writeFileSync(store_full_path, data); + if (result !== false && last_modified) { + var file_timestamp = new Date(last_modified * 1000); + fs.utimesSync(store_full_path, Date.now(), file_timestamp) + } + } catch (e) { + console.error(" # User File Store failed", e); + } + return (result === false) ? false : true; + } + + /** + * Retrieves a file from the user store + * @param {string} path Path relative to the User File Store + * @returns {Buffer|false} Buffer data, or false if could not open file + */ + getUserStoreFile(path) { + var store_dir = this.getUserStoreDirectory(); + if (!store_dir) return false; // unregistered + // FileStore + store_dir += "FileStore" + this.path.sep; + var store_dir_path = this.wtvshared.makeSafePath(store_dir, path.replace('/', this.path.sep)); + if (this.fs.existsSync(store_dir_path)) return this.fs.readFileSync(store_dir_path); + else return false; + } + + /** + * Retrieves a file from the user store with a file://Disk/ url + * @param {string} url file://Disk/ base url + * @returns {Buffer|false} Buffer data, or false if could not open file + */ + getUserStoreFileByURL(url) { + var path_split = url.split('/'); + path_split.shift(); + path_split.shift(); + var store_dir_path = path_split.join('/').replace('/', this.path.sep); + return this.getUserStoreFile(store_dir_path); + } + + /** + * Retrieves the Content-Type of a User Store File + * @param {string} path Path relative to the User File Store + * @returns {string|false} Content-Type, or false if could not open file + */ + getUserStoreContentType(path) { + return this.wtvmime.getSimpleContentType(path); + } + + /** + * Returns the number of user cookies + * @returns {number} Number of cookies + */ + countCookies() { + return Object.keys(this.session_store.cookies).length || 0; + } + + resetCookies() { + this.session_store.cookies = {}; + // webtv likes to have at least one cookie in the list, set a dummy cookie for zefie's site expiring in 1 year. + this.addCookie("wtv.zefie.com", "/", this.wtvshared.getUTCTime(365 * 86400000), "cookie_type=chocolatechip"); + } + + addCookie(domain, path = null, expires = null, data = null) { + if (!this.checkCookies()) this.resetCookies(); + if (!domain) return false; + else if (typeof (domain) == 'object') { + // accept array as first argument + if (domain.domain && domain.path && domain.expires && domain.data) var cookie_data = domain; + else return false; + } else { + if (path && expires && data) { + var cookie_data = new Array(); + cookie_data['cookie'] = unescape(data); + cookie_data['expires'] = unescape(expires); + cookie_data['path'] = unescape(path); + cookie_data['domain'] = unescape(domain); + } else { + return false; + } + } + + var self = this; + var cookie_index = -1; + // see if we have a cookie for this domain/path + Object.keys(this.session_store.cookies).forEach(function (k) { + if (cookie_index >= 0) return; + if (domain == self.session_store.cookies[k].domain && path == self.session_store.cookies[k].path) cookie_index = k; + }); + // otherwise add a new one + if (cookie_index == -1) cookie_index = this.countCookies(); + + this.session_store.cookies[cookie_index] = Object.assign({}, cookie_data); + + return true; + } + + getCookie(domain, path) { + if (!this.checkCookies()) this.resetCookies(); + var self = this; + var result = false; + Object.keys(this.session_store['cookies']).forEach(function (k) { + if (result != false) return; + if (self.session_store['cookies'][k].domain == domain && + self.session_store['cookies'][k].path == path) { + + var current_epoch_utc = Date.parse((new Date()).toUTCString()); + var cookie_expires_epoch_utc = Date.parse(new Date(Date.parse(self.session_store['cookies'][k].expires)).toUTCString()); + if (cookie_expires_epoch_utc <= current_epoch_utc) self.deleteCookie(self.session_store['cookies'][k]); + else result = self.session_store['cookies'][k]; + } + }); + return result; + } + + getCookieString(domain, path) { + var cookie_data = this.getCookie(domain, path); + /* + var outstring = ""; + Object.keys(cookie_data).forEach(function (k) { + outstring += k + "=" + escape(cookie_data[k]) + "&"; + }); + return outstring.substring(0, outstring.length - 1); + */ + return cookie_data.cookie; + } + + deleteCookie(domain, path = null) { + var result = false; + if (!this.checkCookies()) { + this.resetCookies(); + return true; + } + if (!domain) return false; + else if (typeof (domain) == 'object') { + // accept array as first argument + if (domain.domain && domain.path) { + path = domain.path; + domain = domain.domain; + } + } else if (!path) { + return false; + } + + var self = this; + Object.keys(this.session_store['cookies']).forEach(function (k) { + if (self.session_store['cookies'][k].domain == domain && self.session_store['cookies'][k].path == path) { + delete self.session_store['cookies'][k]; + self.storeSessionData(); + result = true; + } + }); + + return result; + } + + checkCookies() { + if (!this.session_store.cookies) return false; + else if (this.session_store.cookies == []) return false; + return true; + } + + listCookies() { + if (!this.checkCookies()) this.resetCookies(); + var outstring = ""; + var self = this; + Object.keys(this.session_store.cookies).forEach(function (k) { + outstring += self.session_store.cookies[k].domain + "\0" + self.session_store.cookies[k].path + "\0"; + }); + return outstring; + } + + loadSessionData(raw_data = false) { + try { + if (this.fs.lstatSync(this.getUserStoreDirectory() + "user" + this.user_id + ".json")) { + var json_data = this.fs.readFileSync(this.getUserStoreDirectory() + "user" + this.user_id + ".json", 'Utf8') + if (raw_data) return JSON.parse(json_data); + + var session_data = JSON.parse(json_data); + this.session_store = session_data; + return true; + } + } catch (e) { + // Don't log error 'file not found', it just means the client isn't registered yet + if (e.code != "ENOENT") console.error(" # Error loading session data for", this.wtvshared.filterSSID(this.ssid), e); + // also wipe any existing session_store + this.session_store = {}; + return false; + } + } + + encryptPassword(passwd) { + return CryptoJS.AES.encrypt(passwd, this.cryptoKey).toString(); + } + + decryptPassword(crypt) { + return CryptoJS.AES.decrypt(crypt, this.cryptoKey).toString(CryptoJS.enc.Utf8); + } + + encodePassword(passwd) { + var encoded_passwd = CryptoJS.SHA512(passwd); + return encoded_passwd.toString(CryptoJS.enc.Base64); + } + + generatePassword(len) { + return CryptoJS.lib.WordArray.random(Math.round(len / 2)).toString(CryptoJS.enc.Hex); + } + + setUserPassword(passwd) { + var encoded_passwd = this.encodePassword(passwd); + this.setSessionData("subscriber_password", encoded_passwd); + this.saveSessionData(); + } + + setUserSMTPPassword(passwd) { + var encoded_passwd = this.encryptPassword(passwd); + this.setSessionData("subscriber_smtp_password", encoded_passwd); + this.saveSessionData(); + } + + getUserSMTPPassword() { + return this.decryptPassword(this.setSessionData("subscriber_smtp_password")) + } + + disableUserPassword() { + this.setSessionData("subscriber_password", null); + this.saveSessionData(); + } + + getUserPasswordEnabled() { + if (!this.minisrv_config.config.passwords.enabled) return false; // master config override + var enabled = this.getSessionData("subscriber_password"); + return (enabled != null && typeof enabled != undefined); // true if set, false if null/disabled + } + + validateUserPassword(passwd) { + if (!this.getUserPasswordEnabled()) return true; // no password is set so always validate + + var encoded_passwd = this.encodePassword(passwd); + return (encoded_passwd == this.getSessionData("subscriber_password")); + } + + isUserLoggedIn() { + if (!this.getUserPasswordEnabled()) return true; // no password is set so always validate + var password_valid = this.get("password_valid"); + return (password_valid); + } + + setUserLoggedIn(value) { + if (value) return this.set("password_valid", value); + else { + this.delete("password_valid"); + return false; + } + } + + saveSessionData(force_write = false, skip_merge = false) { + if (this.isRegistered()) { + if (!skip_merge) { + // load data from disk and merge new data + var temp_data = this.loadSessionData(true); + if (temp_data) this.session_store = Object.assign(temp_data, this.session_store); + temp_data = null; + } + } else { + // do not write file if user is not registered, return true because this is not an error + // force write needed to set the initial reg + if (!force_write) return true; + } + + try { + // only save if file has changed + var json_save_data = JSON.stringify(this.session_store); + var json_load_data = (!skip_merge) ? this.loadSessionData(true) : {}; + + var storeDir = this.getUserStoreDirectory(); + if (!this.fs.existsSync(storeDir)) this.mkdirRecursive(storeDir); + var sessionToStore = this.session_store; + if (sessionToStore.password_valid) delete sessionToStore.password_valid; // do not save validity state of password login, resets when session expires + if (json_save_data != json_load_data) this.fs.writeFileSync(storeDir + "user" + this.user_id + ".json", JSON.stringify(sessionToStore), "Utf8"); + return true; + } catch (e) { + console.error(" # Error saving session data for", this.wtvshared.filterSSID(this.ssid), e); + return false; + } + } + + retrieveSessionData() { + // alias + return this.loadSessionData(); + } + + storeSessionData(force_write = false) { + // alias + return this.saveSessionData(force_write); + } + + SaveIfRegistered(skip_merge = false) { + if (this.isRegistered()) return this.saveSessionData(false, skip_merge); + return false; + } + + isRegistered(session_mode = true) { + if (session_mode) + return (this.getSessionData("registered") && this.fs.existsSync(this.getUserStoreDirectory())); + else + return this.fs.existsSync(this.getUserStoreDirectory()); + } + + unregisterBox() { + var user_store_base = this.wtvshared.makeSafePath(this.wtvshared.getAbsolutePath(this.minisrv_config.config.SessionStore), this.path.sep + this.ssid); + try { + if (this.fs.existsSync(user_store_base + ".json")) { + this.fs.unlinkSync(user_store_base + ".json"); + this.session_store = {}; + } + if (this.fs.existsSync(user_store_base)) { + this.fs.rmSync(user_store_base, { recursive: true }); + } + return true; + } catch (e) { + // Don't log error 'file not found', it just means the client isn't registered yet + console.error(" # Error deleting session data for", this.wtvshared.filterSSID(this.ssid), e); + return false; + } + } + + hasCap(cap) { + if (this.capabilities) { + return this.capabilities[cap] || false; + } + return false; + } + + getMaxUsernameLength() { + if (parseInt(this.data_store['wtv-system-version'] < 4000)) { + // older builds may crash with nicknames longer than 16 chars. + // actual build where support started is yet unknown + return 16; + } else { + // newer builds supported up to 32 chars, I think + return 32; + } + } + + setIRCNick(nick) { + // strip out unsupported chars + nick = nick.replace(/[^a-zA-Z0-9\-\_\`\^]/g, ""); + + // limit nick length based on build support + nick = nick.substring(0, this.getMaxUsernameLength()); + + // returns headers to send to client, while storing the new data in our session data. + this.data_store['wtv-user-name'] = nick; + this.data_store['wtv-irc-nick'] = nick; + this.session_store.subscriber_irc_nick = nick; + return "wtv-irc-nick: " + nick + "\nwtv-user-nick: " + nick; + } + + isMiniBrowser() { + return (this.data_store['wtv-need-upgrade'] || this.data_store['wtv-used-8675309']) ? true : false; + } + + currentConnections() { + if (this.data_store) { + if (this.data_store.sockets) { + return this.data_store.sockets.size; + } + } + return 0; + } + + getSessionData(key = null) { + if (typeof (this.data_store) === 'session_store') return null; + else if (key === null) return this.data_store; + else if (this.session_store[key]) return this.session_store[key]; + else return null; + } + + setSessionData(key, value) { + if (key === null) throw ("ClientSessionData.set(): invalid key provided"); + if (typeof (this.session_store) === 'undefined') this.session_store = new Array(); + this.session_store[key] = value; + this.SaveIfRegistered(); + } + + deleteSessionData(key) { + if (key === null) throw ("ClientSessionData.delete(): invalid key provided"); + delete this.session_store[key]; + this.SaveIfRegistered(true); + } + + + get(key = null) { + if (typeof (this.data_store) === 'undefined') return null; + else if (key === null) return this.data_store; + else if (this.data_store[key]) return this.data_store[key]; + else return null; + } + + set(key, value) { + if (key === null) throw ("ClientSessionData.set(): invalid key provided"); + if (typeof (this.data_store) === 'undefined') this.data_store = new Array(); + this.data_store[key] = value; + this.SaveIfRegistered(); + } + + delete(key) { + if (key === null) throw ("ClientSessionData.delete(): invalid key provided"); + delete this.data_store[key]; + this.SaveIfRegistered(true); + } + + getBoxName() { + switch (this.get("wtv-client-rom-type")) { + case "US-DTV-disk-0MB-16MB-softmodem-CPU5230": + case "US-DTV-disk-0MB-32MB-softmodem-CPU5230": + return "UltimateTV Satellite receiver"; + + case "US-WEBSTAR-disk-0MB-8MB-softmodem-CPU5230": + case "US-WEBSTAR-disk-0MB-16MB-softmodem-CPU5230": + return "WebTV Satellite receiver"; + + case "US-LC2-flashdisk-0MB-16MB-softmodem-CPU5230": + case "US-LC2-disk-0MB-8MB": + case "US-LC2-flash-2MB-8MB": + case "JP-LC2-disk-0MB-8MB": + case "JP-LC2-flash-2MB-8MB": + case "US-LC2-disk-0MB-8MB-softmodem-CPU5230": + case "US-LC2-flash-2MB-8MB-softmodem-CPU5230 ": + case "US-LC2-disk-0MB-8MB-CPU5230": + case "US-LC2-flash-2MB-8MB-CPU5230": + case "JP-LC2-disk-0MB-8MB-CPU5230": + case "JP-LC2-disk-0MB-16MB-CPU5230": + case "JP-LC2-flash-2MB-8MB-CPU5230": + return "WebTV Plus receiver"; + + default: + return "WebTV Internet receiver"; + } + } + + checkSecurity() { + var self = this; + var rejectReason = null; + var ip2long = function (ip) { + var components; + + if (components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) { + var iplong = 0; + var power = 1; + for (var i = 4; i >= 1; i -= 1) { + iplong += power * parseInt(components[i]); + power *= 256; + } + return iplong; + } + else return -1; + }; + + var isInSubnet = function (ip, subnet) { + if (subnet.indexOf('/') == -1) { + var mask, base_ip, long_ip = this.ip2long(ip); + var mask2, base_ip2, long_ip2 = this.ip2long(ip); + return (long_ip == long_ip2); + } else { + var mask, base_ip, long_ip = this.ip2long(ip); + if ((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = this.ip2long(mask[1])) >= 0)) { + var freedom = Math.pow(2, 32 - parseInt(mask[2])); + return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1); + } + } + return false; + }; + + var rejectSSIDConnection = function (blacklist) { + if (blacklist) { + rejectReason = self.ssid + " is in the blacklist."; + console.log(" * Request from SSID", self.wtvshared.filterSSID(self.ssid), "(" + self.clientAddress + "), but that SSID is in the blacklist."); + } else { + rejectReason = self.ssid + " is not in the whitelist."; + console.log(" * Request from SSID", self.wtvshared.filterSSID(self.ssid), "(" + self.clientAddress + "), but that SSID is not in the whitelist."); + } + } + + var checkSSIDIPWhitelist = function (ssid, blacklist) { + var ssid_access_list_ip_override = false; + if (self.minisrv_config.config.ssid_ip_allow_list) { + if (self.minisrv_config.config.ssid_ip_allow_list[self.ssid]) { + Object.keys(self.minisrv_config.config.ssid_ip_allow_list[self.ssid]).forEach(function (k) { + if (self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k].indexOf('/') > 0) { + if (isInSubnet(self.clientAddress, self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k])) { + // remoteAddr is in allowed subnet + ssid_access_list_ip_override = true; + } + } else { + if (self.clientAddress == self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k]) { + // remoteAddr directly matches IP + ssid_access_list_ip_override = true; + } + } + }); + if (!ssid_access_list_ip_override) rejectSSIDConnection(self.ssid, blacklist); + } else { + rejectSSIDConnection(blacklist); + } + } else { + rejectSSIDConnection(blacklist); + } + if (ssid_access_list_ip_override && self.minisrv_config.config.debug_flags.debug) console.log(" * Request from disallowed SSID", wtvshared.filterSSID(ssid), "was allowed due to IP address whitelist"); + } + + // process whitelist first + if (self.ssid && self.minisrv_config.config.ssid_allow_list) { + var ssid_is_in_whitelist = self.minisrv_config.config.ssid_allow_list.findIndex(element => element == self.ssid); + if (ssid_is_in_whitelist == -1) { + // no whitelist match, but lets see if the remoteAddress is allowed + checkSSIDIPWhitelist(self.ssid, false); + } + } + + // now check blacklist + if (self.ssid && self.minisrv_config.config.ssid_block_list) { + var ssid_is_in_blacklist = self.minisrv_config.config.ssid_block_list.findIndex(element => element == self.ssid); + if (ssid_is_in_blacklist != -1) { + // blacklist match, but lets see if the remoteAddress is allowed + checkSSIDIPWhitelist(self.ssid, true); + } + } + if (rejectReason === null) { + // Passed Security + return true; + } else { + // Failed security + this.enableLockdown(rejectReason); + return false; + } + } + + + isAuthorized(url, whitelist = 'lockdown', ignore_lockdown = false) { + // not in lockdown so just return true + if (whitelist == 'lockdown' && !this.lockdown && !ignore_lockdown) return true; + + // in lockdown, check whitelisted urls + var self = this; + var authorized = false; + switch (whitelist) { + case "lockdown": + Object.keys(this.lockdownWhitelist).forEach(function (k) { + if (self.lockdownWhitelist[k].charAt(self.lockdownWhitelist[k].length - 1) == '*') { + if (self.lockdownWhitelist[k].substring(0, self.lockdownWhitelist[k].length - 1) == url.substring(0, self.lockdownWhitelist[k].length - 1)) authorized = true; + } else { + if (self.lockdownWhitelist[k].substring(0, url.length) == url) authorized = true; + } + }); + break; + case "login": + Object.keys(this.loginWhitelist).forEach(function (k) { + if (self.loginWhitelist[k].charAt(self.loginWhitelist[k].length - 1) == '*') { + if (self.loginWhitelist[k].substring(0, self.loginWhitelist[k].length - 1) == url.substring(0, self.loginWhitelist[k].length - 1)) authorized = true; + } else { + if (self.loginWhitelist[k].substring(0, url.length) == url) authorized = true; + } + }); + break; + } + return authorized; + } + + enableLockdown(reason) { + this.lockdown = true; + this.lockdownReason = reason; + } + + disableLockdown() { + this.lockdown = false; + this.lockdownReason = null; + } + + setClientAddress(addr) { + this.clientAddress = addr; + } + + getClientAddress() { + return this.clientAddress; + } + + setMailstore(mailstore) { + this.mailstore = mailstore; + } + + getManufacturer(url = false) { + var isPlus = this.hasCap("client-has-tv-experience") + var romtype = this.get("wtv-client-rom-type"); + var brandId = this.ssid.charAt(8) + + if (brandId == 0) + if (url && romtype == "US-DTV-disk-0MB-32MB-softmodem-CPU5230") + return "Sony/DirecTV"; + else + return "Sony"; + else if (brandId == 1) + if (url && isPlus == true) + return "Philips-Plus"; + else + return "Philips"; + else if (brandId == 4) + return "Mitsubishi"; + else if (brandId == 5) + return "Philips-Mont"; + else if (brandId == 7) + return "Samsung"; + else if (brandId == 9) + if (url) + if (romtype == "US-DTV-disk-0MB-32MB-softmodem-CPU5230") + return "Thomson/DirecTV"; + else + return "Thomson"; + else + return "RCA"; + else + return "WebTV"; + } + +} + +module.exports = WTVClientSessionData; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/WTVDownloadList.js b/zefie_wtvp_minisrv/includes/WTVDisk.js similarity index 97% rename from zefie_wtvp_minisrv/WTVDownloadList.js rename to zefie_wtvp_minisrv/includes/WTVDisk.js index 9e259546..1755cdf2 100644 --- a/zefie_wtvp_minisrv/WTVDownloadList.js +++ b/zefie_wtvp_minisrv/includes/WTVDisk.js @@ -16,7 +16,7 @@ class WTVDownloadList { * @param {string} service_name Service name to use in wtv-urls */ constructor(minisrv_config, service_name = "wtv-disk") { - var { WTVShared, clientShowAlert } = require('./WTVShared.js'); + var { WTVShared, clientShowAlert } = require("./WTVShared.js"); this.minisrv_config = minisrv_config; this.wtvshared = new WTVShared(minisrv_config); this.clientShowAlert = clientShowAlert; @@ -160,6 +160,7 @@ class WTVDownloadList { } this.download_list += "GET " + file + "\n"; + source = source.replace(/\\/g, "/"); this.download_list += "group: " + group + "-UPDATE\n"; this.download_list += "location: " + source + "\n"; this.download_list += "file-permission: " + file_permission + "\n"; @@ -292,7 +293,7 @@ class WTVDownloadList { if (fail_url === null) fail_url = new this.clientShowAlert({ 'image': this.minisrv_config.config.service_logo, 'message': "Download failed...", - 'buttonlabel1': "Fuck!", + 'buttonlabel1': "Okay", 'buttonaction1': "client:goback", 'noback': true, }).getURL(); @@ -301,7 +302,7 @@ class WTVDownloadList { ${title} @@ -342,6 +343,8 @@ class WTVDownloadList { message="Preparing..." height=40 width=250> + +
      diff --git a/zefie_wtvp_minisrv/includes/WTVFavorites.js b/zefie_wtvp_minisrv/includes/WTVFavorites.js new file mode 100644 index 00000000..74e72f03 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVFavorites.js @@ -0,0 +1,395 @@ +class WTVFavorites { + + fs = require('fs'); + path = require('path'); + uuid = require('uuid'); + + ssid = null; + minisrv_config = []; + wtvshared = null; + wtvmime = null; + wtvclient = null; + WTVClientSessionData = null; + favFileExt = ".zfav"; + favstore_dir = null; + folderArr = []; + messageArr = []; + + constructor(minisrv_config, wtvclient) { + if (!minisrv_config) throw ("minisrv_config required"); + if (!wtvclient) throw ("WTVClientSessionData required"); + var WTVShared = require("./WTVShared.js")['WTVShared']; + var WTVMime = require("./WTVMime.js"); + this.WTVClientSessionData = require("./WTVClientSessionData.js"); + this.minisrv_config = minisrv_config; + this.wtvshared = new WTVShared(minisrv_config); + this.wtvmime = new WTVMime(minisrv_config); + this.wtvclient = wtvclient; + this.ssid = wtvclient.ssid; + this.folderArr = this.folderArr; + this.messageArr = this.messageArr; + } + + checkFavIntroSeen() { + return (this.wtvclient.getSessionData("subscriber_fav_intro_seen")) ? this.wtvclient.getSessionData("subscriber_fav_intro_seen") : false; + } + + setFavIntroSeen(seen) { + this.wtvclient.setSessionData("subscriber_fav_intro_seen", (seen) ? true : false); + } + + favstoreExists() { + if (!this.isguest) { + if (this.favstore_dir === null) { + // set favstore directory local var so we don't call the function every time + var userstore_dir = this.wtvclient.getUserStoreDirectory(); + + // FavStore + var store_dir = "FavStore" + this.path.sep; + this.favstore_dir = userstore_dir + store_dir; + } + return this.fs.existsSync(this.favstore_dir); + } + return null; + } + + folderExists(foldername) { + var folder_dir = null; + if (this.favstoreExists()) { + if (!foldername) return null; + + var folder_dir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folder_dir; + } + return (store_dir !== null) ? this.fs.existsSync(store_dir) : false; + } + + getFolderDir(foldername) { + var folder_dir = null; + if (this.favstoreExists()) { + if (!foldername) return null; + + var folder_dir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folder_dir; + } + return store_dir; + } + + createTemplateFolder(folder) { + // create emply folder + this.createFolder(folder) + var folder_templates = this.minisrv_config.favorites.folder_templates; + // populate it if a template exists + var self = this; + if (folder_templates[folder]) { + Object.keys(folder_templates[folder]).forEach(function (k) { + self.createFavorite(folder_templates[folder][k].title, folder_templates[folder][k].url, folder, (folder_templates[folder][k].image_type == "image/wtv-bitmap") ? atob(folder_templates[folder][k].image) : folder_templates[folder][k].image, folder_templates[folder][k].image_type); + }) + } + } + + createDefaultFolders() { + var brandId = this.ssid.charAt(8); + this.createTemplateFolder("Recommended"); + if (brandId == 7) + this.createTemplateFolder("Personal (Samsung)"); + else + this.createTemplateFolder("Personal"); + + if (brandId == 0) + this.createTemplateFolder("Sony"); + } + + createFavstore() { + if (this.favstoreExists() === false) { + if (!this.fs.existsSync(this.favstore_dir)) this.fs.mkdirSync(this.favstore_dir, { recursive: true }); + this.createDefaultFolders(); + this.wtvclient.setSessionData("subscriber_fav_images", true) + return true; + } + return false; + } + + createFolder(foldername) { + var folder_exists = this.folderExists(foldername); + if (folder_exists === false) { + var folderdir = foldername + this.path.sep; + var store_dir = this.favstore_dir + folderdir; + if (!this.fs.existsSync(store_dir)) this.fs.mkdirSync(store_dir, { recursive: true }); + return true; + } + return folder_exists; + } + + getFolders() { + var path = this.favstore_dir; + var self = this; + return this.fs.readdirSync(path).filter(function (file) { + self.folderArr.push(file); + return self.folderArr; + }); + } + + createFavoriteID() { + return this.uuid.v1(); + } + + createFavorite(title, url, folder, image, imagetype) { + var folderpath = this.getFolderDir(folder); + var favoriteid = this.createFavoriteID(); + var favoritefile = favoriteid + this.favFileExt; + var favoritefileout = folderpath + favoritefile; + if (imagetype != "url") + image = btoa(image); + + title = decodeURIComponent(title).replaceAll("+", " "); + url = decodeURIComponent(url) + var favoritedata = { + "title": title, + "url": url, + "folder": folder, + "image": image, + "imagetype": imagetype, + "id": favoriteid + } + try { + if (this.fs.existsSync(favoritefileout)) { + console.log(" * ERROR: Favorite with this UUID (" + favoriteid + ") already exists (should never happen). Favorite lost."); + return false; + } + + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, JSON.stringify(favoritedata)); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Favorite Store failed\n", e, "\n", favoritefileout, "\n", favorite, "\n"); + } + return false; + } + + listFavorites(folder) { + var folderpath = this.getFolderDir(folder); + var self = this; + self.messageArr = []; + this.fs.readdirSync(folderpath) + .map(function (v) { + var favorite_data_raw = null; + var favoritepath = folderpath + self.path.sep + v; + if (self.fs.existsSync(favoritepath)) favorite_data_raw = self.fs.readFileSync(favoritepath); + if (favorite_data_raw) { + var favorite_data = JSON.parse(favorite_data_raw); + self.messageArr.push(favorite_data); + } + + }) + return self.messageArr; + } + + getFavorite(folder, favoriteid) { + var folder_path = this.getFolderDir(folder); + var folder_file = favoriteid + this.favFileExt; + var folder_file_in = folder_path + this.path.sep + folder_file; + var folder_data_raw = null; + + if (this.fs.existsSync(folder_file_in)) folder_data_raw = this.fs.readFileSync(folder_file_in); + else console.error(" # FavErr: could not find ", folder_file_in); + + if (folder_data_raw) { + var folder_data = JSON.parse(folder_data_raw); + folder_data.folder_path = folder_path; + folder_data.folder_file = folder_file; + if (folder_data) { + folder_data.id = favoriteid; + + return folder_data; + } + else console.error(" # FavErr: could not parse json in ", folder_file_in); + } + return false; + } + + deleteFolder(folder){ + var dir = this.getFolderDir(folder); + if (dir) { + try { + this.fs.rmdirSync(dir, { recursive: true }); + return true; + } catch (e) { + return false; + } + } + return false; + } + + checkFolderName(folder) { + var check1 = /^([A-Za-z0-9\-\_])$/.test(folder); + var check2 = /^[A-Za-z]/.test(folder); + return (check1 && check2); + } + + deleteFavorite(favoriteid, folder) { + var folderdir = this.getFolderDir(folder); + this.fs.unlinkSync(folderdir + favoriteid + ".zfav", { recursive: true }); + } + + clearFolder(folder) { + const { readdirSync, rmSync } = require('fs'); + var dir = this.getFolderDir(folder); + readdirSync(dir).forEach(f => rmSync(`${dir}${f}`)); + } + + updateFavorite(favoritedata, folder) { + // encode message into json + var favoriteout = new Object(); + var folderpath = this.getFolderDir(folder); + Object.assign(favoriteout, favoritedata); + delete favoriteout.folderpath; + delete favoriteout.favoritefile; + var result = this.fs.writeFileSync(folderpath + favoritedata.id + ".zfav", JSON.stringify(favoriteout)); + if (!result) return false; + } + + changeFavoriteName(favoriteid, folder, name) { + var favorite = this.getFavorite(folder, favoriteid); + if (!favorite) return false; + + favorite.title = name; + this.updateFavorite(favorite, folder); + return true; + } + + moveFavorite(oldfolder, newfolder, favoriteid) { + var favorite = this.getFavorite(oldfolder, favoriteid); + if (!favorite) return false; + + var newfolderdata = this.listFavorites(newfolder); + var newfoldernum = newfolderdata.length + + if (newfoldernum > 17) + return; + + favorite.folder = newfolder; + this.updateFavorite(favorite, oldfolder); + var favoriteout = new Object(); + var folderpath = this.getFolderDir(newfolder); + Object.assign(favoriteout, favorite); + delete favoriteout.folderpath; + delete favoriteout.favoritefile; + this.fs.writeFileSync(folderpath + favorite.id + ".zfav", JSON.stringify(favoriteout)); + this.deleteFavorite(favoriteid, oldfolder) + return true; + } + + createShortcutKey() { + var favoritefileout = this.favstore_dir + "KeyStore.zfav"; + var keydata = {}; + + keydata.F1 = { + folder: "none", + id: "none" + } + keydata.F2 = { + folder: "none", + id: "none" + } + keydata.F3 = { + folder: "none", + id: "none" + } + keydata.F4 = { + folder: "none", + id: "none" + } + keydata.F5 = { + folder: "none", + id: "none" + } + keydata.F6 = { + folder: "none", + id: "none" + } + keydata.F7 = { + folder: "none", + id: "none" + } + + try { + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, keydata); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Key Store failed\n", e, "\n", favoritefileout); + } + return false; + } + + updateShortcutKey(oldkey, newkey, folder, id) { + var folderpath = this.getFolderDir(folder); + var favoritefileout = this.favstore_dir + "KeyStore.zfav"; + var keydata = {}; + + keydata = this.fs.readFileSync(favoritefileout) + console.log(newkey) + switch(newkey) { + case "F1": + keydata.F1.folder = folder; + break + case "F2": + keydata.F2 = { + folder: folder, + id: id + } + break; + case "F3": + keydata.F3 = { + folder: folder, + id: id + } + break; + case "F4": + keydata.F4 = { + folder: folder, + id: id + } + break; + case "F5": + keydata.F5 = { + folder: folder, + id: id + } + break; + case "F6": + keydata.F6 = { + folder: folder, + id: id + } + break; + case "F7": + keydata.F7 = { + folder: folder, + id: id + } + break; + } + if (oldkey == "none") + { + //no + } else { + keydata[oldkey].folder = null; + keydata[oldkey].id = null; + } + + try { + // encode favorite into json + var result = this.fs.writeFileSync(favoritefileout, keydata); + if (!result) return false; + + } catch (e) { + console.error(" # FavErr: Key Store failed\n", e, "\n", favoritefileout); + } + return false; + } +} +module.exports = WTVFavorites; diff --git a/zefie_wtvp_minisrv/WTVFlashrom.js b/zefie_wtvp_minisrv/includes/WTVFlashrom.js similarity index 96% rename from zefie_wtvp_minisrv/WTVFlashrom.js rename to zefie_wtvp_minisrv/includes/WTVFlashrom.js index 869d8fe4..9fd1a10f 100644 --- a/zefie_wtvp_minisrv/WTVFlashrom.js +++ b/zefie_wtvp_minisrv/includes/WTVFlashrom.js @@ -12,7 +12,7 @@ class WTVFlashrom { constructor(minisrv_config, service_vaults, service_name, use_zefie_server = true, bf0app_update = false, no_debug = false) { - var { WTVShared } = require('./WTVShared.js'); + var { WTVShared } = require("./WTVShared.js"); this.service_vaults = service_vaults; this.service_name = service_name; this.use_zefie_server = use_zefie_server; @@ -36,12 +36,12 @@ class WTVFlashrom { if (info_only) { callback(self.getFlashromInfo(data, request_path)); } else { - self.sendToClient(data, flashrom_file_path, callback); + self.sendToClient(data, request_path, callback); } } }); } catch (e) { - var errpage = wtvshared.doErrorPage(404, "The service could not find the requested ROM.") + var errpage = this.wtvshared.doErrorPage(404, "The service could not find the requested ROM.") var headers = errpage[0]; var data = errpage[1]; callback(data, headers); @@ -123,6 +123,7 @@ class WTVFlashrom { if (flashrom_info.is_bootrom) headers += "Content-Type: binary/x-wtv-bootrom"; // maybe? else headers += "Content-Type: binary/x-wtv-flashblock"; if (flashrom_info.next_rompath != null && this.bf0app_update) headers += "\nwtv-visit: " + flashrom_info.next_rompath; + headers += "\nminisrv-no-mail-count: true"; callback(data, headers); } diff --git a/zefie_wtvp_minisrv/includes/WTVGuide.js b/zefie_wtvp_minisrv/includes/WTVGuide.js new file mode 100644 index 00000000..47e93726 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVGuide.js @@ -0,0 +1,196 @@ +class WTVGuide { + minisrv_config = null; + session_data = null; + wtvshared = null; + runScriptInVM = null; + fs = require('fs'); + + constructor(minisrv_config, session_data, socket, runScriptInVM) { + if (!minisrv_config) throw ("minisrv_config required"); + if (!session_data) throw ("WTVClientSessionData required"); + var WTVShared = require("./WTVShared.js")['WTVShared']; + this.minisrv_config = minisrv_config; + this.session_data = session_data; + this.wtvshared = new WTVShared(minisrv_config); + this.runScriptInVM = runScriptInVM; + } + + generatePage(topic, subtopic, page = null) { + // sanitize a bit + + var template = null; + var template_args = null; + var data = false; + + switch (topic.toLowerCase()) { + case "glossary": + var template = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/templates/glossary.js"); + var glossary_datafile = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/glossary.json"); + if (!this.fs.existsSync(template)) break; + if (!this.fs.existsSync(glossary_datafile)) break; + + var glossary = JSON.parse(this.fs.readFileSync(glossary_datafile)); + if (glossary[subtopic.toUpperCase()]) { + if (page) { + // glossary word + if (glossary[subtopic.toUpperCase()][page.toLowerCase()]) { + var word = glossary[subtopic.toUpperCase()][page.toLowerCase()].word; + var definition = glossary[subtopic.toUpperCase()][page.toLowerCase()].definition; + // replace the word with a nice convienent link + var search = "= 0) { + var link_word_for_link, link_word_start_letter, link_word_override = null; + var original_start, end = 0; + var start = definition.indexOf(search) + search.length; + original_start = start; + // handle + console.log("start:", start) + console.log("debug > position:", definition.substr(start, 1)); + if (definition.substr(start, 1) != ">") { + console.log("debug: detecting word in tag") + start++; // +1 to skip = + end = definition.indexOf(">", start); + console.log("debug > position 2:", definition.indexOf(">", start)); + link_word_override = definition.substring(start, end); + // strip any quotes + if (link_word_override.substr(0, 1).match(/[\"\']/)) link_word_override = link_word_override.substring(1); + if (link_word_override.substr(link_word_override.length - 1, 1).match(/[\"\']/)) link_word_override = link_word_override.substr(0, link_word_override.length - 1); + + link_word_for_link = link_word_override.replace(/ /g, '').replace(/\'/g, '').replace(/\"/g, '').toLowerCase(); + link_word_start_letter = link_word_for_link.substr(0, 1).toUpperCase(); + start = end + 1; // update start pos for rest of processing + } else { + console.log("debug: generating word") + start++; + } + console.log("end:", end) + end = definition.indexOf("", start); + var link_word = definition.substring(start, end); + if (!link_word_for_link) link_word_for_link = link_word.replace(/ /g, '').replace(/\'/g,'').replace(/\"/g,'').toLowerCase(); + if (!link_word_start_letter) link_word_start_letter = link_word.substr(0, 1).toUpperCase(); + if (!link_word_override) link_word_override = link_word; + + var link = `wtv-guide:/help?topic=Glossary&subtopic=${link_word_start_letter}&page=${link_word_for_link}&word=${encodeURIComponent(link_word_override)}` + var new_definition = definition.substring(0, original_start - search.length) + `${link_word}` + definition.substring(end + 7); + console.log("start:", start) + console.log("end:", end) + console.log("link_word:", link_word) + console.log("link_word_for_link:", link_word_for_link); + console.log("link_word_start_letter:", link_word_start_letter); + console.log("link:", link) + console.log("new_definition:", new_definition) + definition = new_definition; + } + // replaces with the friendly name of the type of unit the user has + while (definition.indexOf("") >= 0) { + var romtype = this.session_data.get("wtv-client-rom-type"); + var boxname = ""; + if (romtype == "US-WEBSTAR-disk-0MB-16MB-softmodem-CPU5230" || romtype == "US-DTV-disk-0MB-32MB-softmodem-CPU5230") boxname = "satellite receiver" + else if (this.session_data.hasCap("client-has-tv-experience")) boxname = "WebTV Plus receiver"; + else boxname = "WebTV Internet terminal"; + definition = definition.replace(/\/g, boxname); + } + // replaces with either "WebTV" or "WebTV Plus" depending on user box type + while (definition.indexOf("") >= 0) { + var boxname = "WebTV"; + if (this.session_data.hasCap("client-has-tv-experience")) boxname += " Plus"; + definition = definition.replace(/\/g, boxname); + } + // replaces with either "Home" or "Web Home" depending on user box type + while (definition.indexOf("") >= 0) { + var homename = "Home"; + if (this.session_data.hasCap("client-has-tv-experience")) homename = "Web " + homename; + definition = definition.replace(/\/g, homename); + } + template_args = { + minisrv_config: this.minisrv_config, + word: word, + definition: definition + } + } + } else { + // glossary letter word index + var template = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/templates/glossary_word_index.js"); + var isPlusBox = false; + if (this.session_data.hasCap("client-has-tv-experience")) isPlusBox = true; + var worddb = []; + Object.keys(glossary[subtopic.toUpperCase()]).forEach(function (k) { + if (glossary[subtopic.toUpperCase()][k].plusonly && !isPlusBox) return; + var thisword = glossary[subtopic.toUpperCase()][k]; + thisword.link = k; + worddb.push(thisword); + }) + + template_args = { + minisrv_config: this.minisrv_config, + letter: subtopic.toUpperCase(), + words: worddb + } + } + } + if (template) break; + + case "index": + switch (subtopic.toLowerCase()) { + case "glossary": + var template = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/templates/glossary_index.js"); + console.log(template); + var glossary_datafile = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/glossary.json"); + if (!this.fs.existsSync(template)) break; + if (!this.fs.existsSync(glossary_datafile)) break; + + var glossary = JSON.parse(this.fs.readFileSync(glossary_datafile)); + var letters = []; + Object.keys(glossary).forEach(function (k) { letters.push(k); }); + template_args = { + minisrv_config: this.minisrv_config, + letters: letters + } + } + if (template) break; + + + default: + // fallback to old js file method + try { + var prerendered = null; + if (!page) prerendered = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/prerendered/" + topic + "/" + subtopic + ".js"); + else prerendered = this.wtvshared.getAbsolutePath(this.minisrv_config.config.ServiceDeps + "/wtv-guide/prerendered/" + topic + "/" + subtopic + "/" + page + ".js"); + + if (!this.fs.existsSync(prerendered)) break; + + + var prerendered_jscode = this.fs.readFileSync(prerendered); + if (!prerendered_jscode) break; + prerendered_jscode = prerendered_jscode.toString('ascii'); + var contextObj = { + "session_data": this.session_data + } + var vmResult = this.runScriptInVM(prerendered_jscode, contextObj); + if (vmResult.data) return vmResult.data; + } catch (e) { + console.log(e); + } + break; + + } + if (template && template_args) { + if (!data) { + var WTVTemplate = require(template); // load template class + try { + var wtvt = new WTVTemplate(template_args); // initialize template with our args + data = wtvt.getTemplatePage(); // execute template function + } catch (e) { + console.log(" * wtv-template error:", e) + } + // unload and clean up module + wtvshared.unloadModule(template); + } + + // return generated page + return data; + } else return false; + } +} + +module.exports = WTVGuide; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/WTVLzpf.js b/zefie_wtvp_minisrv/includes/WTVLzpf.js similarity index 100% rename from zefie_wtvp_minisrv/WTVLzpf.js rename to zefie_wtvp_minisrv/includes/WTVLzpf.js diff --git a/zefie_wtvp_minisrv/includes/WTVMail.js b/zefie_wtvp_minisrv/includes/WTVMail.js new file mode 100644 index 00000000..426f862c --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVMail.js @@ -0,0 +1,510 @@ +class WTVMail { + + fs = require('fs'); + path = require('path'); + uuid = require('uuid'); + ssid = null; + unread_mail = 0; + inbox_store = null; + sent_store = null; + saved_store = null; + minisrv_config = []; + wtvshared = null; + wtvmime = null; + wtvclient = null; + WTVClientSessionData = null; + mailstore_dir = null; + mailboxes = null; + msgFileExt = ".zmsg"; + trashMailboxName = "Trash"; + defaultColors = {}; + sendmailDefaultBGColor = "#1F2033" + + constructor(minisrv_config, wtvclient) { + if (!minisrv_config) throw ("minisrv_config required"); + var WTVShared = require("./WTVShared.js")['WTVShared']; + var WTVMime = require("./WTVMime.js"); + this.WTVClientSessionData = require("./WTVClientSessionData.js"); + this.minisrv_config = minisrv_config; + this.wtvshared = new WTVShared(minisrv_config); + this.wtvmime = new WTVMime(minisrv_config); + this.wtvclient = wtvclient; + this.ssid = this.wtvclient.ssid; + this.unread_mail = this.wtvclient.getSessionData("subscriber_unread_mail") ? this.wtvclient.getSessionData("subscriber_unread_mail") : 0; + this.mailboxes = [ + // referenced by id, so order is important! + "Inbox", + "Sent", + "Saved", + this.trashMailboxName + ]; + this.defaultColors = { + bgcolor: "#171726", + text: "#82A9D9", + link: "#BDA73A", + vlink: "#62B362" + }; + } + + checkMailIntroSeen() { + return (this.wtvclient.getSessionData("subscriber_mail_intro_seen")) ? this.wtvclient.getSessionData("subscriber_mail_intro_seen") : false; + } + + setMailIntroSeen(seen) { + this.wtvclient.setSessionData("subscriber_mail_intro_seen", (seen) ? true : false); + } + + + mailstoreExists() { + if (!this.isguest) { + if (this.mailstore_dir === null) { + // set mailstore directory local var so we don't call the function every time + var userstore_dir = this.wtvclient.getUserStoreDirectory(); + + // MailStore + var store_dir = "MailStore" + this.path.sep; + this.mailstore_dir = userstore_dir + store_dir; + } + return this.fs.existsSync(this.mailstore_dir); + } + return null; + } + + getSignatureColors(signature = null, sendmail = true) { + var colors = Object.assign({}, this.defaultColors); // start with default colors + if (sendmail) colors.bgcolor = this.sendmailDefaultBGColor; + + if (signature) { + if (signature.length > 0) { + if (signature.indexOf('') >= 0) { + if (signature.indexOf('= 0) { + // parse tag of html signature to get colors + const htmlparser2 = require("htmlparser2"); + const dom = htmlparser2.parseDocument(signature); + const body = htmlparser2.DomUtils.getElementsByTagName('body', dom)[0]; + if (body.attribs) { + for (const [key, value] of Object.entries(body.attribs)) { + colors[key] = value; + } + } + } + } + } + } + if (!colors.cursor) colors.cursor = colors.link; + return colors; + } + + mailboxExists(mailboxid) { + if (mailboxid > this.mailboxes.length) return null; + var mailbox_dir = null; + if (this.mailstoreExists()) { + var mailbox_name = this.getMailboxById(mailboxid); + if (!mailbox_name) return null; + + var mailbox_dir = mailbox_name + this.path.sep; + var store_dir = this.mailstore_dir + mailbox_dir; + } + return (store_dir !== null) ? this.fs.existsSync(store_dir) : false; + } + + createMailstore() { + if (this.mailstoreExists() === false) { + if (!this.fs.existsSync(this.mailstore_dir)) this.fs.mkdirSync(this.mailstore_dir, { recursive: true }); + return true; + } + return false; + } + + getMailboxById(mailboxid) { + return (mailboxid < this.mailboxes.length) ? this.mailboxes[mailboxid] : false; + } + + getMailboxByName(mailbox_name) { + var mailbox_id = false; + this.mailboxes.every(function (v, k) { + if (v.toLowerCase() == mailbox_name.toLowerCase()) { + mailbox_id = k; + return false; + } + return true; + }); + return mailbox_id; + } + + getMailboxStoreDir(mailboxid) { + if (this.mailboxExists(mailboxid)) { + var mailbox_name = this.getMailboxById(mailboxid); + return this.mailstore_dir + mailbox_name + this.path.sep; + } + return null; + } + + createMailbox(mailboxid) { + var mailbox_exists = this.mailboxExists(mailboxid); + if (mailbox_exists === false) { + var mailbox_name = this.getMailboxById(mailboxid); + var mailbox_dir = mailbox_name + this.path.sep; + var store_dir = this.mailstore_dir + mailbox_dir; + if (!this.fs.existsSync(store_dir)) this.fs.mkdirSync(store_dir, { recursive: true }); + return true; + } + return mailbox_exists; + } + + createMessageID() { + return this.uuid.v1(); + } + + createMessage(mailboxid, from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, signature = null, date = null, known_sender = false, attachments = [], url = null, url_title = null) { + if (this.createMailbox(mailboxid)) { + if (!date) date = Math.floor(Date.now() / 1000); + + var mailbox_path = this.getMailboxStoreDir(mailboxid); + var message_id = this.createMessageID(); + var message_file = message_id + this.msgFileExt; + var message_file_out = mailbox_path + message_file; + var message_data = { + "from_addr": from_addr, + "from_name": from_name, + "to_addr": to_addr, + "to_name": to_name, + "date": date, + "subject": subject, + "body": msgbody, + "known_sender": known_sender, + "signature": signature, + "unread": true, + "attachments": attachments, + "url": url, + "url_title": url_title + } + try { + if (this.fs.existsSync(message_file_out)) { + console.log(" * ERROR: Message with this UUID (" + messageid + ") already exists (should never happen). Message lost."); + return false; + } + + // encode message into json + var result = this.fs.writeFileSync(message_file_out, JSON.stringify(message_data)); + if (!result) return false; + + // rely on filesystem times for sorting as it is quicker then reading every file + var file_timestamp = new Date(date * 1000); + fs.utimesSync(message_file, Date.now(), file_timestamp); + if (!result) console.error(" WARNING: Setting timestamp on " + message_file + " failed, mail dates will be inaccurate."); + + } catch (e) { + console.error(" # MailErr: Mail Store failed\n", e, "\n", message_file_out, "\n", message_data ,"\n"); + } + return false; + } + } + + createWelcomeMessage() { + var from_addr = (this.minisrv_config.config.service_owner_account) ? this.minisrv_config.config.service_owner_account : this.minisrv_config.config.service_owner; + from_addr += "@" + this.minisrv_config.config.service_name; + var from_name = this.minisrv_config.config.service_owner + var to_addr = this.wtvclient.getSessionData("subscriber_username") + "@" + this.minisrv_config.config.service_name; + var to_name = this.wtvclient.getSessionData("subscriber_name"); + var subj = "Welcome to " + this.minisrv_config.config.service_name; + var msg = "poop"; + return this.createMessage(0, from_addr, to_addr, msg, subj, from_name, to_name, null, null, true); + } + + getMessage(mailboxid, messageid) { + if (this.createMailbox(mailboxid)) { + var mailbox_path = this.getMailboxStoreDir(mailboxid); + var message_file = messageid + this.msgFileExt; + var message_file_in = mailbox_path + this.path.sep + message_file; + var message_data_raw = null; + + if (this.fs.existsSync(message_file_in)) message_data_raw = this.fs.readFileSync(message_file_in); + else console.error(" # MailErr: could not find ", message_file_in); + + if (message_data_raw) { + var message_data = JSON.parse(message_data_raw); + message_data.mailbox_path = mailbox_path; + message_data.message_file = message_file; + if (message_data) { + message_data.id = messageid; + // backwards compat + if (!message_data.attachments) message_data.attachments = []; + + return message_data; + } + else console.error(" # MailErr: could not parse json in ", message_file_in); + } + } + return false; + } + + updateMessage(message_data) { + // encode message into json + var message_out = new Object(); + Object.assign(message_out, message_data); + delete message_out.mailbox_path; + delete message_out.message_file; + var result = this.fs.writeFileSync(message_data.mailbox_path + this.path.sep + message_data.message_file, JSON.stringify(message_out)); + if (!result) return false; + + // rely on filesystem times for sorting as it is quicker then reading every file + var file_timestamp = new Date(message_data.date * 1000); + fs.utimesSync(message_file, Date.now(), file_timestamp); + if (!result) console.error(" WARNING: Setting timestamp on " + message_file + " failed, mail dates will be inaccurate."); + } + + checkMessageIdSanity(messageid) { + return /^[A-Za-z0-9\-]{36}$/.test(messageid); + } + + + listMessages(mailboxid, limit, reverse_sort = false, offset = 0) { + if (this.createMailbox(mailboxid)) { + var mailbox_path = this.getMailboxStoreDir(mailboxid); + var self = this; + var files = this.fs.readdirSync(mailbox_path) + .map(function (v) { + var message_data_raw = null; + var message_date = null; + var message_path = mailbox_path + self.path.sep + v; + if (self.fs.existsSync(message_path)) message_data_raw = self.fs.readFileSync(message_path); + if (message_data_raw) { + var message_data = JSON.parse(message_data_raw); + if (message_data) message_date = message_data.date; + } + var message_date_ret = (message_date) ? message_date : self.fs.statSync(mailbox_path + self.path.sep + v).mtime.getTime(); + self.fs.statSync(mailbox_path + self.path.sep + v).mtime.getTime() + return { + name: v, + time: message_date_ret + }; + }) + .sort(function (a, b) { + if (!reverse_sort) return b.time - a.time; + else return a.time - b.time; + }) + .map(function (v) { + if (v.name.substring((v.name.length - self.msgFileExt.length)) === self.msgFileExt) return v.name.substring(0, (v.name.length - 5)); + }); + + if (files.length == 0) return false; // no messages + else { + // todo filter previous results when offset + var messagelist_out = new Array(); + Object.keys(files).forEach(function (k) { + var message = self.getMessage(mailboxid, files[k]); + if (message) messagelist_out.push(mailboxid, message); + else console.error(" # MailErr: reading message ID: ", files[k]); + }) + return messagelist_out.filter(function (n) { return n; }); + } + } + return null; // error + } + + countMessages(mailboxid) { + var messages = this.listMessages(mailboxid, 100, false); + var message_count = Object.keys(messages).length; + return (message_count) ? message_count : 0; + } + + countUnreadMessages(mailboxid) { + var messages = this.listMessages(mailboxid, 100, false); + var unread = 0; + Object.keys(messages).forEach(function (k) { + if (messages[k].unread) unread++; + }); + return unread; + } + + getMailboxIcon() { + var icon_image = null; + switch (this.countMessages(0)) { + case 0: + icon_image = "OpenMailbox0.gif"; + break; + case 1: + icon_image = "OpenMailbox1.gif"; + break; + default: + icon_image = "OpenMailbox2.gif"; + break; + } + return icon_image; + } + + checkUserExists(username, directory = null) { + // returns the user's ssid, and user_id and userid in an array if true, false if not + var search_dir = this.minisrv_config.config.SessionStore; + var return_val = false; + var self = this; + if (directory) search_dir = directory; + this.fs.readdirSync(search_dir).forEach(file => { + if (self.fs.lstatSync(search_dir + self.path.sep + file).isDirectory() && !return_val) { + return_val = self.checkUserExists(username, search_dir + self.path.sep + file); + } + if (!file.match(/.*\.json/ig)) return; + try { + var temp_session_data_file = self.fs.readFileSync(search_dir + self.path.sep + file, 'Utf8'); + var temp_session_data = JSON.parse(temp_session_data_file); + if (temp_session_data.subscriber_username.toLowerCase() == username.toLowerCase()) { + return_val = search_dir.replace(this.minisrv_config.config.SessionStore + self.path.sep, '').replace("user", '').split(self.path.sep); + return_val.push(temp_session_data.subscriber_name); + } + } catch (e) { + console.error(" # Error parsing Session Data JSON", file, e); + } + }); + return return_val; + } + + getUserMailstore(username) { + var user_data = this.checkUserExists(username); + if (user_data) { + var user_wtvsession = new this.WTVClientSessionData(this.minisrv_config, user_data[0]); + user_wtvsession.user_id = user_data[1]; + var user_mailstore = new WTVMail(this.minisrv_config, user_wtvsession) + return user_mailstore; + } + return false; + } + + sendMessageToAddr(from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, signature = null, attachments = [], url = null, url_title = null) { + if (!to_addr) return "Your message could not be sent.

      You must specify an addressee in the To: area."; + + + if (to_addr.indexOf('@') === -1) to_addr += "@"+this.minisrv_config.config.service_name; + var username = to_addr.split("@")[0]; + var dest_minisrv = to_addr.split("@")[1] || this.minisrv_config.config.service_name; + + // local only for now + if (dest_minisrv.toLowerCase() !== this.minisrv_config.config.service_name.toLowerCase()) { + return "The m-mail address " + to_addr + " is not supported by this MiniSrv."; + } + + // find user if local + if (dest_minisrv.toLowerCase() === this.minisrv_config.config.service_name.toLowerCase()) { + var dest_user_mailstore = this.getUserMailstore(username); + // user does not exist + if (!dest_user_mailstore) return "The user " + username + " does not exist on MiniSrv " + dest_minisrv + ""; + + if (!to_name) { + var userExistsData = this.checkUserExists(username); + to_name = userExistsData[2]; + } + + // check if the destination user's Inbox exists yet + if (!dest_user_mailstore.mailboxExists(0)) { + // mailbox does not yet exist, create it + var mailbox_exists = dest_user_mailstore.createMailbox(mailbox); + // Just created Inbox for the first time, so create the welcome message + if (mailbox_exists) dest_user_mailstore.createWelcomeMessage(); + } + // if the mailbox exists, deliver the message + if (dest_user_mailstore.mailboxExists(0)) dest_user_mailstore.createMessage(0, from_addr, to_addr, msgbody, subject, from_name, to_name, signature, null, this.isInUserAddressBook(to_addr, from_addr), attachments, url, url_title); + else return "There was an internal error sending the message to " + to_addr + ". Please try again later"; + + // clean up + dest_user_mailstore = null; + return true; + } + return "Unknown error"; + } + + isInUserAddressBook(address_to_check, address_to_look_for) { + // unimplemented + return false; + } + + getMessageMailboxName(messageid) { + // returns the mailbox id of which the message was found for the current user + var self = this; + var mailbox_name = false; + if (this.checkMessageIdSanity(messageid)) { + if (this.mailstoreExists()) { + this.fs.readdirSync(this.mailstore_dir).every(mailbox => { + if (mailbox_name) return false; + self.fs.readdirSync(self.mailstore_dir + mailbox).every(file => { + var regexSearch = messageid + self.msgFileExt; + var re = new RegExp(regexSearch, "ig"); + if (!file.match(re)) return true; + mailbox_name = mailbox; + return false; + }); + return true; + }); + } + } + return mailbox_name; + } + + getMessageMailboxID(messageid) { + var mailbox_name = this.getMessageMailboxName(messageid); + if (!mailbox_name) return false; + return this.getMailboxByName(mailbox_name); + } + + getMessageByID(messageid) { + var mailbox_name = this.getMessageMailboxName(messageid); + if (!mailbox_name) return false; + + var mailboxid = this.mailboxes.findIndex((value) => value == mailbox_name); + + if (mailboxid !== false) return this.getMessage(mailboxid, messageid); + return null; + } + + moveMailMessage(messageid, dest_mailbox_id) { + // returns true if successful, false if failed. + var currentMailbox = this.getMessageMailboxID(messageid); + // Same mailbox + if (dest_mailbox_id == currentMailbox) return false; + + // Invalid destination mailbox ID + if (dest_mailbox_id > (this.mailboxes.length - 1) || dest_mailbox_id < 0) return false; + + if (!this.mailboxExists(dest_mailbox_id)) this.createMailbox(dest_mailbox_id); + + var currentMailStoreDir = this.getMailboxStoreDir(currentMailbox); + if (!currentMailStoreDir) return false; + + var destMailStoreDir = this.getMailboxStoreDir(dest_mailbox_id); + if (!destMailStoreDir) return false; + + var currentMailFile = currentMailStoreDir + this.path.sep + messageid + this.msgFileExt; + var destMailFile = destMailStoreDir + this.path.sep + messageid + this.msgFileExt; + + // File exists + if (this.fs.existsSync(destMailFile)) return false; + + return this.fs.renameSync(currentMailFile, destMailFile); + } + + deleteMessage(messageid) { + var currentMailbox = this.getMessageMailboxName(messageid); + var trashMailbox = this.getMailboxByName(this.trashMailboxName); + if (currentMailbox != trashMailbox) { + // if not in the trash, move it to trash + return this.moveMailMessage(messageid, trashMailbox); + } else { + // if its already in the trash, delete it forever + var currentMailFile = this.getMailboxStoreDir(trashMailbox) + this.path.sep + messageid + this.msgFileExt; + if (this.fs.fileExistsSync(currentMailFile)) + return this.fs.unlink(currentMailFile); + else + return false; + } + } + + setMessageReadStatus(messageid, read = true) { + var message = this.getMessageByID(messageid); + if (!message) return false; + + message.unread = !read; + this.updateMessage(message); + return true; + } +} + +module.exports = WTVMail; diff --git a/zefie_wtvp_minisrv/WTVMime.js b/zefie_wtvp_minisrv/includes/WTVMime.js similarity index 94% rename from zefie_wtvp_minisrv/WTVMime.js rename to zefie_wtvp_minisrv/includes/WTVMime.js index a404100f..771e2824 100644 --- a/zefie_wtvp_minisrv/WTVMime.js +++ b/zefie_wtvp_minisrv/includes/WTVMime.js @@ -11,7 +11,7 @@ class WTVMime { constructor(minisrv_config) { - var WTVShared = require('./WTVShared.js')['WTVShared']; + var WTVShared = require("./WTVShared.js")['WTVShared']; this.minisrv_config = minisrv_config; this.wtvshared = new WTVShared(minisrv_config); if (!String.prototype.reverse) { @@ -24,7 +24,6 @@ class WTVMime { } } - shouldWeCompress(ssid_session, headers_obj) { var compress_data = false; var compression_type = 0; // no compression @@ -73,11 +72,9 @@ class WTVMime { else if (content_type == "application/json") compress_data = true; if (compression_type == 2) { // gzip only - if (content_type.match(/^audio\/(x-)?(s3m|mod|xm)$/)) compress_data = true; // s3m, mod, xm - if (content_type.match(/^audio\/(x-)?(midi|wav|wave|aif(f)?)$/)) compress_data = true; // midi & wav + if (content_type.match(/^audio\/(x-)?(s3m|mod|xm|midi|wav|wave|aif(f)?)$/)) compress_data = true; // s3m, mod, xm, midi & wav if (content_type.match(/^application\/karaoke$/)) compress_data = true; // midi karaoke - if (content_type.match(/^binary\/x-wtv-approm$/)) compress_data = true; // approms - if (content_type.match(/^binary\/doom-data$/)) compress_data = true; // DOOM WADs + if (content_type.match(/^binary\/(x-wtv-approm|doom-data)/)) compress_data = true; // approms and DOOM WADs if (content_type.match(/^wtv\/download-list$/)) compress_data = true; // WebTV Download List } } @@ -142,6 +139,9 @@ class WTVMime { case "ini": wtv_mime_type = "wtv/jack-configuration"; break; + case "kar": + wtv_mime_type = "audio/midi"; + break; case "mips-code": wtv_mime_type = "code/x-wtv-code-mips"; break; diff --git a/zefie_wtvp_minisrv/includes/WTVNews.js b/zefie_wtvp_minisrv/includes/WTVNews.js new file mode 100644 index 00000000..352b3cba --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVNews.js @@ -0,0 +1,110 @@ +class WTVNews { + + minisrv_config = null; + newsie = require('newsie').default; + service_name = null; + client = null; + + constructor(minisrv_config, service_name) { + this.minisrv_config = minisrv_config; + this.service_name = service_name; + this.client = new this.newsie({ + host: this.minisrv_config.services[service_name].upstream_address, + port: this.minisrv_config.services[service_name].upstream_port + }) + } + + connectUsenet() { + return new Promise((resolve, reject) => { + this.client.connect().then((response) => { + if (response.code == 200) { + resolve(true); + } + }).catch((e) => { + console.error(" * WTVNews Error:", "Command: connect", e); + reject("Could not connect to upstream usenet server"); + }); + }); + } + + listGroup(group) { + return new Promise((resolve, reject) => { + this.client.listGroup(group).then((data) => { + resolve(data); + }).catch((e) => { + console.error(" * WTVNews Error:", "Command: listGroup", e); + reject(`No such group ${group}`); + }); + }) + } + + selectGroup(group) { + return new Promise((resolve, reject) => { + this.client.group(group).then((response) => { + if (response.code == 211) resolve(true); + else reject(`No such group ${group}`); + }).catch((e) => { + console.error(" * WTVNews Error:", "Command: selectGroup", e); + reject(`Error selecting group ${group}`); + }); + }); + } + + getArticle(articleID) { + return new Promise((resolve, reject) => { + this.client.article(articleID).then((data) => { + resolve(data) + }).catch((e) => { + reject(`Error reading article ID ${articleID}`); + console.error(" * WTVNews Error:", "Command: article", e); + }); + }); + } + + getHeader(articleID) { + return new Promise((resolve, reject) => { + this.client.head(articleID).then((data) => { + resolve(data); + }).catch((e) => { + reject(`Error getting header for article ID ${articleID}`); + console.error(" * WTVNews Error:", "Command: head -", "Article ID: " + articleID, e); + }); + }); + } + + quitUsenet() { + return new Promise((resolve, reject) => { + this.client.quit().then((response) => { + if (response.code == 205) resolve(true); + else { + console.error(" * WTVNews Error:", "Command: quit", e); + reject(`Unexpected response code ${response.code}`); + } + }).catch((e) => { + console.error(" * WTVNews Error:", "Command: quit", e); + reject("Error quitting usenet session"); + }) + }); + } + + getHeaderObj(NGArticles) { + return new Promise((resolve, reject) => { + var messages = []; + var failed = false; + for (var article in NGArticles) { + if (failed) continue; + if (article == "getCaseInsensitiveKey") continue; + this.getHeader(NGArticles[article]).then((data) => { + if (data.article) messages.push(data.article) + }).catch((e) => { + console.log(e, article); + failed = e; + }); + } + if (!failed) resolve(messages); + else reject("Could not read message list", failed); + }); + } +} + +module.exports = WTVNews; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/WTVRegister.js b/zefie_wtvp_minisrv/includes/WTVRegister.js similarity index 78% rename from zefie_wtvp_minisrv/WTVRegister.js rename to zefie_wtvp_minisrv/includes/WTVRegister.js index 338bfb09..838b8dd0 100644 --- a/zefie_wtvp_minisrv/WTVRegister.js +++ b/zefie_wtvp_minisrv/includes/WTVRegister.js @@ -3,7 +3,6 @@ class WTVRegister { fs = require('fs'); path = require('path'); minisrv_config = []; - service_owner = "a minisrv user"; session_store_dir = null; @@ -23,28 +22,38 @@ class WTVRegister { } checkUsernameSanity(username) { - var check1 = /^([A-Za-z0-9\-\_]{5,16})$/.test(username); - var check2 = /^[A-Za-z]/.test(username); - return (check1 && check2); + var regex_str = "^([A-Za-z0-9\-\_]{" + this.minisrv_config.config.user_accounts.min_username_length + "," + this.minisrv_config.config.user_accounts.max_username_length + "})$"; + var regex = new RegExp(regex_str); + console.log(username, username.length, regex.test(username)); + return regex.test(username); } - checkUsernameAvailable(username, ssid_sessions) { - var username_match = false; - this.fs.readdirSync(this.session_store_dir).forEach(file => { + + checkUsernameAvailable(username, directory = null) { + // returns the user's ssid, and user_id and userid in an array if true, false if not + var search_dir = this.minisrv_config.config.SessionStore; + var return_val = false; + var self = this; + if (directory) search_dir = directory; + this.fs.readdirSync(search_dir).forEach(file => { + if (self.fs.lstatSync(search_dir + self.path.sep + file).isDirectory() && !return_val) { + return_val = self.checkUsernameAvailable(username, search_dir + self.path.sep + file); + } if (!file.match(/.*\.json/ig)) return; - if (username_match) return; try { - var temp_session_data_file = this.fs.readFileSync(this.session_store_dir + this.path.sep + file, 'Utf8'); + var temp_session_data_file = self.fs.readFileSync(search_dir + self.path.sep + file, 'Utf8'); var temp_session_data = JSON.parse(temp_session_data_file); - if (temp_session_data.subscriber_username == username) username_match = true; + if (temp_session_data.subscriber_username.toLowerCase() == username.toLowerCase()) { + return_val = true; + } } catch (e) { - console.error(" # Error parsing Session Data JSON", file, e); - username_match = true; + console.error(" # Error parsing Session Data JSON", search_dir + self.path.sep + file, e); } }); - return !username_match; + return !return_val; } + /** * Generations regnstration template * @param {string} title HTML Page Title diff --git a/zefie_wtvp_minisrv/WTVSec.js b/zefie_wtvp_minisrv/includes/WTVSec.js similarity index 83% rename from zefie_wtvp_minisrv/WTVSec.js rename to zefie_wtvp_minisrv/includes/WTVSec.js index a73a5c31..935cc034 100644 --- a/zefie_wtvp_minisrv/WTVSec.js +++ b/zefie_wtvp_minisrv/includes/WTVSec.js @@ -32,6 +32,8 @@ class WTVSec { hRC4_Key2 = null; RC4Session = new Array(); minisrv_config = []; + update_ticket = false; + ticket_store = {}; /** * @@ -41,7 +43,7 @@ class WTVSec { * @param {Boolean} minisrv_config.config.debug_flags.debug Enable debugging * */ - constructor(minisrv_config, wtv_incarnation = 1) { + constructor(minisrv_config, wtv_incarnation = 1) { this.minisrv_config = minisrv_config; this.initial_shared_key = CryptoJS.enc.Base64.parse(this.initial_shared_key_b64); @@ -87,11 +89,15 @@ class WTVSec { */ PrepareTicket() { // store last challenge response in ticket - var ticket_data = this.challenge_raw; + if (this.minisrv_config.config.debug_flags.debug) console.log(" * Preparing a new ticket with ticket_store:", this.ticket_store) + var ticket_data_raw = this.challenge_raw; try { - var ticket_data_enc = CryptoJS.DES.encrypt(ticket_data, this.initial_shared_key, { + var ticket_data = ticket_data_raw.toString(CryptoJS.enc.Hex) + CryptoJS.enc.Utf8.parse(JSON.stringify(this.ticket_store)).toString(CryptoJS.enc.Hex); + + ticket_data_raw = CryptoJS.enc.Hex.parse(ticket_data); + var ticket_data_enc = CryptoJS.DES.encrypt(ticket_data_raw, this.initial_shared_key, { mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding + padding: CryptoJS.pad.Pkcs7 }); // create a copy of WordArray since concat modifies the original var challenge_signed_key = this.DuplicateWordArray(this.challenge_signed_key); @@ -103,6 +109,17 @@ class WTVSec { return this.ticket_b64; } + tryDecodeJSON(json_string) { + var out; + try { + out = JSON.parse(json_string); + } catch (e) { + console.log(e); + out = {}; + } + return out; + } + /** * Decodes a wtv-ticket to set up this instance * @@ -112,6 +129,7 @@ class WTVSec { var ticket_hex = CryptoJS.enc.Base64.parse(ticket_b64).toString(CryptoJS.enc.Hex); var challenge_key = CryptoJS.enc.Hex.parse(ticket_hex.substring(0, 16)); var challenge_enc = CryptoJS.enc.Hex.parse(ticket_hex.substring(16)); + var ticket_dec = CryptoJS.DES.decrypt( { ciphertext: challenge_enc @@ -119,11 +137,46 @@ class WTVSec { this.initial_shared_key, { mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding + padding: CryptoJS.pad.Pkcs7 } ); - this.ProcessChallenge(ticket_dec.toString(CryptoJS.enc.Base64), challenge_key); - console.log(" * Decoded session from wtv-ticket"); + var data_offset = 216; // (108 * 2); + var challenge_code = ticket_dec.toString().substring(0, data_offset); + var challenge_code_b64 = CryptoJS.enc.Hex.parse(challenge_code).toString(CryptoJS.enc.Base64); + if ((ticket_dec.sigBytes * 2) >= challenge_code.length) { + var ticket_data_dec = CryptoJS.enc.Hex.parse(ticket_dec.toString().substring(data_offset)).toString(CryptoJS.enc.Utf8); + this.ticket_store = this.tryDecodeJSON(ticket_data_dec); + } else { + this.ticket_store = {}; + } + + this.ProcessChallenge(challenge_code_b64, challenge_key); + if (this.minisrv_config.config.debug_flags.debug) console.log(" * Decoded session from wtv-ticket with ticket_store:", this.ticket_store); + } + + getTicketData(key = null) { + if (typeof (this.ticket_store) === 'session_store') return null; + else if (key === null) return this.ticket_store; + else return null; + } + + setTicketData(key, value) { + if (key === null) throw ("WTVSec.ssetTicketDataet(): invalid key provided"); + if (typeof (this.ticket_store) === 'undefined') this.ticket_store = {}; + this.ticket_store[key] = value; + if (this.ticket_b64) this.PrepareTicket(); + this.update_ticket = true; + } + + deleteTicketData(key) { + if (key === null) throw ("WTVSec.deleteTicketData(): invalid key provided"); + if (typeof (this.ticket_store) === 'undefined') { + this.ticket_store = {}; + return; + } + delete this.ticket_store[key]; + if (this.ticket_b64) this.PrepareTicket(); + this.update_ticket = true; } /** diff --git a/zefie_wtvp_minisrv/includes/WTVShared.js b/zefie_wtvp_minisrv/includes/WTVShared.js new file mode 100644 index 00000000..995e08b9 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/WTVShared.js @@ -0,0 +1,699 @@ +/** + * Shared functions across all classes and apps + */ + + +class WTVShared { + + path = require('path'); + fs = require('fs'); + v8 = require('v8'); + zlib = require('zlib'); + CryptoJS = require('crypto-js'); + html_entities = require('html-entities'); // used externally by service scripts + sanitizeHtml = require('sanitize-html'); + iconv = require('iconv-lite'); + parentDirectory = process.cwd() + + minisrv_config = []; + + constructor(minisrv_config, quiet = false) { + if (minisrv_config == null) this.minisrv_config = this.readMiniSrvConfig(true, !quiet); + else this.minisrv_config = minisrv_config; + + if (!String.prototype.reverse) { + String.prototype.reverse = function () { + var splitString = this.split(""); + var reverseArray = splitString.reverse(); + var joinArray = reverseArray.join(""); + return joinArray; + } + } + if (!String.prototype.hexEncode) { + String.prototype.hexEncode = function () { + var result = ''; + for (var i = 0; i < this.length; i++) { + result += this.charCodeAt(i).toString(16); + } + return result; + } + } + } + + getServiceString(service, overrides = {}) { + // used externally by service scripts + if (service === "all") { + var out = ""; + Object.keys(minisrv_config.services).forEach(function (k) { + if (overrides.exceptions) { + Object.keys(overrides.exceptions).forEach(function (j) { + if (k != overrides.exceptions[j]) out += minisrv_config.services[k].toString(overrides) + "\n"; + }); + } else { + out += minisrv_config.services[k].toString(overrides) + "\n"; + } + }); + return out; + } else { + if (!minisrv_config.services[service]) { + throw ("SERVICE ERROR: Attempted to provision unconfigured service: " + service) + } else { + return minisrv_config.services[service].toString(overrides); + } + } + } + + parseBool(val) { + if (typeof val === 'string') + val = val.toLowerCase(); + + return val === true || val === "true" || val === 1; + } + + + getQueryString(query) { + // for easy retrofitting old code to work with the webtvism of allowing multiple of the same query name + // pass it the query, and it will return a string regardless. if its a string it just sends it back + // if its an array we just pull the last object + if (typeof (query) === "object") + return query[(Object.keys(query).length - 1)]; + else + return query + } + + 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; + } + + sanitizeSignature(string) { + var allowedSchemes = ['http', 'https', 'ftp', 'mailto']; + var self = this; + Object.keys(this.minisrv_config.services).forEach(function (k) { + var flags = self.minisrv_config.services[k].flags; + if (flags) { + if (flags == "0x00000004" || flags == "0x00000007") { + allowedSchemes.push(self.minisrv_config.services[k].name); + } + } + }); + + const clean = this.sanitizeHtml(string, { + allowedTags: ['a', 'audioscope', 'b', 'bgsound', 'big', 'blackface', 'blockquote', 'bq', 'br', 'caption', 'center', 'cite', 'c', 'dd', 'dfn', 'div', 'dl', 'dt', 'fn', 'font', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'html', 'i', 'img', 'label', 'li', 'link', 'listing', 'em', 'marquee', 'nobr', 'note', 'ol', 'p', 'plaintext', 'pre', 's', 'samp', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 'tbody', 'table', 'td', 'th', 'tr', 'tt', 'u', 'ul'], + disallowedTagsMode: 'discard', + allowedAttributes: { + a: ['href', 'name', 'target'], + img: ['src', 'alt', 'title', 'width', 'height', 'loading'], + bgsound: ['src', 'loop'], + font: ['size', 'name', 'color'], + marquee: ['speed'], + }, + allowedSchemes: allowedSchemes, + allowedSchemesByTag: {}, + allowedSchemesAppliedToAttributes: ['href', 'src', 'cite'], + allowVulnerableTags: true, + allowProtocolRelative: false + }) + // todo: add missing user open tags (eg if user did not close it) (might be done by sanitize-html?) + // todo: figure out bgcolor and text color voodoo + return clean; + } + + + isASCII(str) { + for (var i = 0, strLen = str.length; i < strLen; ++i) { + if (str.charCodeAt(i) > 127) return false; + } + return true; + } + + isHTML(str) { + return /<[a-z][\s\S]*>/i.test(str); + } + + utf8Decode(utf8String) { + if (typeof utf8String != 'string') throw new TypeError('parameter ‘utf8String’ is not a string'); + // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! + const unicodeString = utf8String.replace( + /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars + function (c) { // (note parentheses for precedence) + var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f); + return String.fromCharCode(cc); + } + ).replace( + /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars + function (c) { // (note parentheses for precedence) + var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f; + return String.fromCharCode(cc); + } + ); + return unicodeString; + } + + decodeBufferText(buf) { + var out = ""; + out = this.utf8Decode(this.iconv.decode(Buffer.from(buf),'ISO-8859-1')); + return out; + } + + returnAbsolutePath(check_path) { + if (check_path.substring(0, 1) != this.path.sep && check_path.substring(1, 1) != ":") { + // non-absolute path, so use current directory as base + check_path = this.parentDirectory + this.path.sep + check_path; + } else { + // already absolute path + } + return check_path; + } + + isMiniBrowser(ssid_session) { + return (ssid_session.get("wtv-need-upgrade") || ssid_session.get("wtv-used-8675309")) ? true : false; + } + + isOldBuild(ssid_session) { + return (this.isMiniBrowser(ssid_session) || parseInt(ssid_session.get("wtv-system-version")) < 3500) ? true : false; + } + + getUserConfig() { + try { + var user_config_filename = this.getAbsolutePath("user_config.json", this.parentDirectory); + if (this.fs.lstatSync(user_config_filename)) { + try { + var minisrv_user_config = JSON.parse(this.fs.readFileSync(user_config_filename)); + } catch (e) { + console.error("ERROR: Could not read user_config.json", e); + var throw_me = true; + } + } else { + var minisrv_user_config = {} + } + return minisrv_user_config; + } catch (e) { + if (minisrv_config.config.debug_flags) { + if (minisrv_config.config.debug_flags.debug) console.error(" * Notice: Could not find user configuration (user_config.json). Using default configuration."); + } + } + } + + + readMiniSrvConfig(user_config = true, notices = true, reload_notice = false) { + if (notices || reload_notice) console.log(" *** Reading global configuration..."); + try { + var minisrv_config = JSON.parse(this.fs.readFileSync(this.getAbsolutePath("config.json", __dirname))); + } catch (e) { + throw ("ERROR: Could not read config.json", e); + } + + var integrateConfig = function(main, user) { + Object.keys(user).forEach(function (k) { + if (typeof (user[k]) == 'object' && user[k] != null) { + // new entry + if (!main[k]) main[k] = new Array(); + // go down the rabbit hole + main[k] = integrateConfig(main[k], user[k]); + } else { + // update main config + main[k] = user[k]; + } + }); + return main; + } + + if (user_config) { + try { + if (notices || reload_notice) console.log(" *** Reading user configuration..."); + var minisrv_user_config = this.getUserConfig() + if (!minisrv_user_config) throw "ERROR: Could not read user_config.json"; + try { + minisrv_config = integrateConfig(minisrv_config, minisrv_user_config) + } catch (e) { + console.error("ERROR: Could not read user_config.json", e); + } + } catch (e) { + if (minisrv_config.config.debug_flags) { + if (minisrv_config.config.debug_flags.debug) console.error(" * Notice: Could not find user configuration (user_config.json). Using default configuration."); + } + } + } + + // defaults + minisrv_config.config.debug_flags = []; + minisrv_config.config.debug_flags.debug = false; + minisrv_config.config.debug_flags.quiet = true; // will squash minisrv_config.config.debug_flags.debug even if its true + minisrv_config.config.debug_flags.show_headers = false; + + if (minisrv_config.config.verbosity) { + switch (minisrv_config.config.verbosity) { + case 0: + minisrv_config.config.debug_flags.debug = false; + minisrv_config.config.debug_flags.quiet = true; + minisrv_config.config.debug_flags.show_headers = false; + if (notices) console.log(" * Console Verbosity level 0 (quietest)") + break; + case 1: + minisrv_config.config.debug_flags.debug = false; + minisrv_config.config.debug_flags.quiet = true; + minisrv_config.config.debug_flags.show_headers = true; + if (notices) console.log(" * Console Verbosity level 1 (headers shown)") + break; + case 2: + minisrv_config.config.debug_flags.debug = true; + minisrv_config.config.debug_flags.quiet = true; + minisrv_config.config.debug_flags.show_headers = false; + if (notices) console.log(" * Console Verbosity level 2 (verbose without headers)") + break; + case 3: + minisrv_config.config.debug_flags.debug = true; + minisrv_config.config.debug_flags.quiet = true; + minisrv_config.config.debug_flags.show_headers = true; + if (notices) console.log(" * Console Verbosity level 3 (verbose with headers)") + break; + default: + minisrv_config.config.debug_flags.debug = true; + minisrv_config.config.debug_flags.quiet = false; + minisrv_config.config.debug_flags.show_headers = true; + if (notices) console.log(" * Console Verbosity level 4 (debug verbosity)") + break; + } + } + + if (notices || reload_notice) console.log(" *** Configuration successfully read."); + this.minisrv_config = minisrv_config; + return this.minisrv_config; + } + + writeToUserConfig(config) { + if (config) { + try { + var minisrv_user_config = this.getUserConfig(); + + // write back + try { + var new_user_config = {}; + Object.assign(new_user_config, minisrv_user_config, config); + if (this.minisrv_config.config.debug_flags.debug) console.log(" * Writing new user configuration..."); + this.fs.writeFileSync(this.getAbsolutePath("user_config.json", parentDirectory), JSON.stringify(new_user_config, null, "\t")); + } + catch (e) { + if (this.minisrv_config.config.debug_flags) { + if (this.minisrv_config.config.debug_flags.debug) console.error(" * WARNING: Could not update user config. Data may have been lost.", e); + } + } + + } catch (e) { + if (this.minisrv_config.config.debug_flags) { + if (this.minisrv_config.config.debug_flags.debug) console.error(" * Notice: Could not find user configuration (user_config.json). Using default configuration."); + } + } + } + } + + getMiniSrvConfig() { + return this.minisrv_config; + } + + + /** + * Returns the Last-Modified date in Unix Timestamp format + * @param {string} file Path to a file + */ + getFileLastModified(file) { + var stats = this.fs.lstatSync(file); + if (stats) return new Date(stats.mtimeMs); + return false; + } + + /** + * Returns the Last-Modified date in a RFC7231 compliant UTC Date String + * @param {string} file Path to a file + */ + getFileLastModifiedUTCString(file) { + return this.getFileLastModified(file).toUTCString(); + } + + /** + * Returns a RFC7231 compliant UTC Date String from the current time + * @param {Number} offset Offset from current time (+/-) + * @returns {string} A RFC7231 compliant UTC Date String from the current time + */ + getUTCTime(offset = 0) { + return new Date((new Date).getTime() + offset).toUTCString(); + } + + urlEncodeBytes = (buf) => { + let encoded = '' + for (let i = 0; i < buf.length; i++) { + const charBuf = Buffer.from('00', 'hex') + charBuf.writeUInt8(buf[i]) + const char = charBuf.toString() + // if the character is safe, then just print it, otherwise encode + if (isUrlSafe(char)) { + encoded += char + } else { + encoded += `%${charBuf.toString('hex').toUpperCase()}` + } + } + return encoded + } + + urlDecodeBytes = (encoded) => { + let decoded = Buffer.from('') + for (let i = 0; i < encoded.length; i++) { + if (encoded[i] === '%') { + const charBuf = Buffer.from(`${encoded[i + 1]}${encoded[i + 2]}`, 'hex') + decoded = Buffer.concat([decoded, charBuf]) + i += 2 + } else { + const charBuf = Buffer.from(encoded[i]) + decoded = Buffer.concat([decoded, charBuf]) + } + + } + return decoded + } + + /** + * Returns a censored SSID + * @param {string|Array} obj SSID String or Headers Object + */ + filterSSID(obj) { + if (this.minisrv_config.config.hide_ssid_in_logs === true) { + if (typeof (obj) == "string") { + if (obj.substr(0, 8) == "MSTVSIMU") { + return obj.substr(0, 10) + ('*').repeat(10) + obj.substr(20); + } else if (obj.substr(0, 5) == "1SEGA") { + return obj.substr(0, 6) + ('*').repeat(6) + obj.substr(13); + } else { + return obj.substr(0, 6) + ('*').repeat(9); + } + } else { + var newobj = Object.assign({}, obj); + if (obj.post_data) newobj.post_data = obj.post_data; + if (newobj["wtv-client-serial-number"]) { + var ssid = newobj["wtv-client-serial-number"]; + if (ssid.substr(0, 8) == "MSTVSIMU") { + newobj["wtv-client-serial-number"] = ssid.substr(0, 10) + ('*').repeat(10) + ssid.substr(20); + } else if (ssid.substr(0, 5) == "1SEGA") { + newobj["wtv-client-serial-number"] = ssid.substr(0, 6) + ('*').repeat(6) + ssid.substr(13); + } else { + newobj["wtv-client-serial-number"] = ssid.substr(0, 6) + ('*').repeat(9); + } + } + return newobj; + } + } else { + return obj; + } + } + + filterRequestLog(obj) { + if (this.minisrv_config.config.filter_passwords_in_logs === true) { + if (obj.query) { + var newobj = Object.assign({}, obj); + if (obj.post_data) newobj.post_data = obj.post_data; + Object.keys(newobj.query).forEach(function (k) { + var key = k.toLowerCase(); + switch (true) { + case /passw(or)?d/.test(key): + case /^pass$/.test(key): + newobj.query[key] = ('*').repeat(newobj.query[key].length); + break; + } + }); + return newobj; + } + } + return obj; + } + + decodePostData(obj) { + if (obj.post_data) { + if (this.minisrv_config.config.filter_passwords_in_logs === true) { + // complex, to filter + var post_obj = {}; + post_obj.query = []; + try { + var post_text = obj.post_data.toString(this.CryptoJS.enc.Utf8); + if (post_text.length > 0) { + post_text = post_text.split("&"); + for (let i = 0; i < post_text.length; i++) { + var qraw_split = post_text[i].split("="); + if (qraw_split.length == 2) { + var k = qraw_split[0]; + post_obj.query[k] = unescape(post_text[i].split("=")[1].replace(/\+/g, "%20")); + } + } + } + var post_obj = this.filterRequestLog(post_obj); + post_text = ""; + Object.keys(post_obj.query).forEach(function (k) { + post_text += k + "=" + post_obj.query[k] + "&"; + }); + post_text = post_text.substring(0, post_text.length - 1); + obj.post_data = post_text.hexEncode(); + } catch (e) { + obj.post_data = obj.post_data.toString(this.CryptoJS.enc.Hex); + } + } else { + // simple, no filter + obj.post_data = obj.post_data.toString(); + } + } + return obj; + } + + unloadModule(moduleName) { + // for handling template classes + var solvedName = require.resolve(moduleName), + nodeModule = require.cache[solvedName]; + if (nodeModule) { + for (var i = 0; i < nodeModule.children.length; i++) { + var child = nodeModule.children[i]; + this.unloadModule(child.filename); + } + delete require.cache[solvedName]; + } + } + + /** + * Returns an absolute path + * @param {string} path + * @param {string} directory Root directory + */ + getAbsolutePath(path, directory = null) { + if (directory) { + if (path.indexOf(directory) == -1) { + directory = this.getAbsolutePath(directory); + try { + if (this.fs.lstatSync(directory).isDirectory()) directory = directory + this.path.sep; + } catch (e) { } + path = directory + path; + } + } + return this.fixPathSlashes(this.path.resolve(path)); + } + + /** + * Returns a percentage + * @param {number} partialValue + * @param {number} totalValue + * @returns {number} percentage + */ + getPercentage = function (partialValue, totalValue) { + return Math.floor((100 * partialValue) / totalValue); + } + + /** + * If the file ends with .gz, remove it + * @param {string} path + * @return {string} path without gz, or unmodified path if it isnt a gz + */ + getFilePath(path) { + var path_split = path.split('/'); + path_split.pop(); + return path_split.join('/'); + } + + /** + * Gets the file extension from a path + * @param {string} path + * @returns {String} File Extension (without dot) + */ + getFileExt(path) { + return path.reverse().split(".")[0].reverse(); + } + + getLineFromFile(filename, line_no, callback) { + var stream = this.fs.createReadStream(filename, { + flags: 'r', + encoding: 'utf-8', + fd: null, + bufferSize: 64 * 1024 + }); + + + var fileData = ''; + stream.on('data', function (data) { + fileData += data; + + // The next lines should be improved + var lines = fileData.split("\n"); + + if (lines.length >= +line_no) { + stream.destroy(); + callback(null, lines[+line_no]); + } + }); + + stream.on('error', function () { + callback('Error', null); + }); + + stream.on('end', function () { + callback('File end reached without finding line', null); + }); + } + + doErrorPage(code, data = null, details = null, pc_mode = false) { + var headers = null; + switch (code) { + case 401: + if (data === null) data = "Authorization Required."; + if (pc_mode) headers = "401 Unauthorized\n"; + else headers = code + " " + data + "\n"; + headers += "Content-Type: text/html\n"; + break; + case 403: + if (data === null) data = "The publisher of that page has not authorized you to view it."; + if (pc_mode) headers = "403 Forbidden\n"; + else headers = code + " " + data + "\n"; + headers += "Content-Type: text/html\n"; + break; + case 404: + if (data === null) data = "The service could not find the requested page."; + if (pc_mode) headers = "404 Not Found\n"; + else headers = code + " " + data + "\n"; + headers += "Content-Type: text/html\n"; + break; + case 400: + case 500: + if (data === null) data = this.minisrv_config.config.service_name + " ran into a technical problem."; + if (details) data += "
      Details:
      " + details; + if (pc_mode) headers = "500 Internal Server Error\n"; + else headers = code + " " + data + "\n"; + headers += "Content-Type: text/html\n"; + break; + default: + headers = code + " " + data + "\n"; + headers += "Content-Type: text/html\n"; + break; + } + console.error(" * doErrorPage Called:", code, data); + return new Array(headers, data); + } + + /** + * Strips bad things from paths + * @param {string} base Base path + * @param {string} target Sub path + */ + makeSafePath(base, target = null, force_forward_slash = false) { + if (target) { + target.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); + var targetPath = this.path.posix.normalize(target) + var output = this.fixPathSlashes(base + this.path.sep + targetPath); + } else { + base.replace(/[\|\&\;\$\%\@\"\<\>\+\,\\]/g, ""); + var targetPath = this.path.posix.normalize(base) + var output = this.fixPathSlashes(targetPath); + } + return (force_forward_slash) ? output.replace(this.path.sep, '/') : output; + } + + makeSafeUsername(username) { + return username.replace(/^([A-Za-z0-9\-\_]{5,16})$/, ''); + } + + /** + * Corrects any / or \ differences, if any for file paths + * @param {string} path + * @returns {string} corrected path + */ + fixPathSlashes(path) { + // fix slashes + if (this.path.sep == '/' && path.indexOf("\\") != -1) path = path.replace(/\\/g, this.path.sep); + else if (this.path.sep == "\\" && path.indexOf("/") != -1) path = path.replace(/\//g, this.path.sep); + + // remove double slashes + while (path.indexOf(this.path.sep + this.path.sep) != -1) path = path.replace(this.path.sep + this.path.sep, this.path.sep); + + return path; + } + /** + * Makes sure an SSID is clean, and doesn't contain any exploitable characters + * @param {string} ssid + * @returns {string} Sanitized SSID + */ + makeSafeSSID(ssid = "") { + ssid = ssid.replace(/[^a-zA-Z0-9]/g, ""); + if (ssid.length == 0) ssid = null; + return ssid; + } + + + unpackCompressedB64(data) { + var data_buf = (typeof data === 'object') ? Buffer.from(data.toString('ascii'), 'base64') : Buffer.from(data, 'base64'); + return this.zlib.inflateSync(data_buf, { finishFlush: this.zlib.Z_SYNC_FLUSH }).toString('ascii'); + } + + packCompressedB64(data) { + return this.zlib.deflateSync(data, { 'level': 9 }).toString('base64'); + } + + +} + +class clientShowAlert { + message = null; + buttonlabel1 = null; + buttonlabel2 = null; + buttonaction1 = null; + buttonaction2 = null; + noback = null; + image = null; + + constructor(image = null, message = null, buttonlabel1 = null, buttonaction1 = null, buttonlabel2 = null, buttonaction2 = null, noback = null) { + this.message = message; + this.buttonlabel1 = buttonlabel1; + this.buttonlabel2 = buttonlabel2; + this.buttonaction1 = buttonaction1; + this.buttonaction2 = buttonaction2; + this.message = message; + this.noback = noback; + if (typeof image === 'object') { + this.image = null; + Object.keys(image).forEach(function (k) { + if (this[k] === null) this[k] = image[k]; + }, this); + } else { + this.image = image; + } + } + + getURL() { + var url = "client:ShowAlert?"; + if (this.message) url += "message=" + escape(this.message) + "&"; + if (this.buttonlabel1) url += "buttonlabel1=" + escape(this.buttonlabel1) + "&"; + if (this.buttonaction1) url += "buttonaction1=" + escape(this.buttonaction1) + "&"; + if (this.buttonlabel2) url += "buttonlabel2=" + escape(this.buttonlabel2) + "&"; + if (this.buttonaction2) url += "buttonaction2=" + escape(this.buttonaction2) + "&"; + if (this.image) url += "image=" + escape(this.image) + "&"; + if (this.noback) url += "noback=true&"; + return url.substring(0, url.length - 1); + } +} + +module.exports.WTVShared = WTVShared; +module.exports.clientShowAlert = clientShowAlert; \ No newline at end of file diff --git a/zefie_wtvp_minisrv/includes/config.json b/zefie_wtvp_minisrv/includes/config.json new file mode 100644 index 00000000..39c2e065 --- /dev/null +++ b/zefie_wtvp_minisrv/includes/config.json @@ -0,0 +1,228 @@ +{ + "config": { + "service_ip": "127.0.0.1", + "bind_ip": "0.0.0.0", + "ServiceVaults": [ + "UserServiceVault", + "ServiceVault" + ], + "ServiceDeps": "ServiceDeps", + "SessionStore": "SessionStore", + "SharedROMCache": "SharedROMCache", + "enable_shared_romcache": true, + "service_owner": "a minisrv user", + "service_owner_account": "minisrvuser", + "service_owner_contact": "someone", + "service_owner_contact_method": "something", + "service_name": "WebTV", + "service_logo": "WebTVLogoJewel.gif", + "service_splash_logo": "file://ROM/images/SplashLogo1.gif", + "hide_ssid_in_logs": true, + "filter_passwords_in_logs": true, + "post_percentages": [ 0, 25, 50, 100 ], + "verbosity": 2, + "socket_timeout": 86400, + "post_data_socket_timeout": 30, + "error_log_file": "errors.log", + "catchall_file_name": "catchall.js", + "hide_incomplete_features": true, + "enable_lzpf_compression": true, + "enable_gzip_compression": true, + "show_detailed_splash": true, + "show_diskmap": false, + "unauthorized_url": "wtv-1800:/unauthorized?", + "allow_guests": true, + "domain_name": "wtv.zefie.com", + "user_accounts": { + "max_users_per_account": 6, + "min_username_length": 5, + "max_username_length": 18 + }, + "passwords": { + "enabled": true, + "min_length": 5, + "max_length": 32, + "form_size": 16 + } + }, + "services": { + "wtv-head-waiter": { + "port": 1601, + "connections": 1 + }, + "wtv-tricks": { + "port": 1602, + "flags": "0x00000004" + }, + "wtv-star": { + "port": 1603, + "flags": "0x00000007" + }, + "wtv-news": { + "port": 1605, + "disabled": true, + "modules": [ + "WTVNews" + ] + }, + "wtv-register": { + "port": 1607, + "privileged": true + }, + "wtv-log": { + "port": 1609, + "connections": 1, + "write_logs_to_disk": false + }, + "wtv-home": { + "port": 1612 + }, + "wtv-1800": { + "port": 1615, + "connections": 1, + "flags": "0x00000004", + "send_tellyscripts": false + }, + "wtv-flashrom": { + "port": 1618, + "flags": "0x00000040", + "debug": false, + "use_zefie_server": true, + "bf0app_default_rom": "content/artemis-webtv-000/build7377/internal-nondebug/bf0app-part000.rom", + "catchall_file_name": "content-serve.js" + }, + "wtv-setup": { + "port": 1613, + "flags": "0x00000010", + "passport_service": "wtv-passport", + "connections": 3, + "privileged": true, + "modules": [ + "WTVBGMusic" + ] + }, + "wtv-music": { + "port": 1656, + "connections": 3 + }, + "wtv-cookie": { + "port": 1619, + "connections": 1 + }, + "wtv-chat": { + "port": 1630, + "connections": 3 + }, + "wtv-disk": { + "port": 1635, + "connections": 3, + "modules": [ + "WTVDisk" + ] + }, + "wtv-guide": { + "port": 1621, + "connections": 3 + }, + "wtv-mail": { + "port": 1608, + "connections": 3 + }, + "wtv-passport": { + "port": 1654 + }, + "wtv-favorite": { + "port": 1611, + "connections": 3, + "enable_multi_query": true, + "max_folders": 14, + "max_favorites_per_folder": 18 + }, + "wtv-admin": { + "port": 1698, + "enable_multi_query": true, + "privileged": true, + "password": "viRak-7" + }, + "http": { + "port": 1650, + "connections": 3, + "use_external_proxy": false, + "external_proxy_is_socks": false, + "external_proxy_host": "127.0.0.1", + "external_proxy_port": 1080, + "flags": "0x00000001" + }, + "https": { + "port": 1650, + "connections": 3, + "use_external_proxy": false, + "external_proxy_is_socks": false, + "external_proxy_host": "127.0.0.1", + "external_proxy_port": 1080, + "flags": "0x00000001" + }, + "pc_services": { + "port": 1699, + "pc_services": true, + "hide_minisrv_version": true, + "disabled": true, + "servicevault_dir": "http_pc", + "drop_connection_on_wrong_port": false, + "show_verbose_errors": false, + "privileged": true, + "allow_https": false, + "force_https": false + } + }, + "favorites": { + "folder_templates": { + "Recommended": [ + { + "title": "DuckDuckGo", + "url": "http://lite.duckduckgo.com/lite", + "image_type": "image/wtv-bitmap", + "image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAABlAAAAAQBkLmAuYC5gLmAt3y5gJ1xsJKUgJeApoCIgLmAuYC5f7mAlG+umaVymJy5gLmAkoCMf5eAl4CigKOAuYC5gLN6sYe5gLmAm4CbgHCAlICdgJ6Ag22jqJ9znZ3YgNiAwIDAgJ54sZKlepmbuYC5gJuCm4CXgJeAo4CjgLmAuYCwebOHtH65gpd0qpmqcaKUmHCwlsWAj4C1gJCAjICMgLmAuYC5gLmAoXa3jZ+Aa4CggJOAl4CVgJuAo4CdgLmAfYC5gHKAbYCXgJaAuYCsgJeAj4CVcpalmW2jnH6AuoB5gLqAj4C7f5WAs3+ib5qcmG6omrmAuYChd7GQZ4B0gJeAloChcKqUl3Gjnbl5uYC5fbmAp3KrkJdxp5uUdZampXGdmbh9uYCWb6uZtX+xhZ54np2XbrmSn3CanotunKigcp2c2IXYgMCCwICqcZqYmnCmmrmAroC5gLmAlHOWpqBwopm0frGFl3Kin7d9uYCTbaubuYC5gKN3rpG4f66FmXOinYqAjIC5gLmAAAAAAAAAAAAAAAAAAAAAAAAAACUtBy4QLCQPHhAvARQDAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAwrKSAnJiMdIgoEGhEhAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAFDQgICAgICAgICAgICAgICAgICAgICBkCBg4WFwAAAIAAAAAcKAsLCwsLCwsLCwsLCwsLCwsLCwsLCxIVGB8JGwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACowExMTAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + }, + { + "title": "Old'aVista", + "url": "http://www.oldavista.com/", + "image_type": "url", + "image": "canned/oldavista.gif" + }, + { + "title": "RetroSite", + "url": "http://retrosite.ga/", + "image_type": "url", + "image": "canned/retrosite.gif" + }, + { + "title": "68k.news", + "url": "http://68k.news/", + "image_type": "url", + "image": "canned/news.gif" + }, + { + "title": "The Old Net", + "url": "http://theoldnet.com/lite", + "image_type": "image/wtv-bitmap", + "image": "AAAAAAAAAQQAJAAAAAAAAAAAAAAAAAA0AAAARgAAAAACBAAAAAQCALmAuYC5gLmAuHy5ga9ftIu2f7iCmHWjoISusnuoj699knKVbK18rnm8gL2AuIC4gISdh3mojKN9uIC4gJudmXyRdJessXywiZdwjq+XdaShkauQebCLsH65gLmAsIG0gLWEt393q555lIKaf7uBlX94gHOAiICGgKtsto+yebiF2IDYgLqAuoCZkJyLp4iqhZmAmYDYgNiAp4CmgHKAfICjgKKAg4CUgLmElYC2gqSAt4CnfoiSnnqPgI+A0IDQgIyAkoCJgIeAk4CTgKGAzICfgHOAe4CHgIqAnX+RgMp/uYC5gJeAmYCOgJGAn4CjgL6AkYC4gJOAdIB4gKCAnICggJ2Ak4CdgI6AhoCggJKAqIS7gLKBtoCTfbt+s3+4gKOAo4CwgK+AjoCMgLeAuICvf6aAtoCygI+YmXyli6p9oICNgJ2AgoCHgI6AjICcgIWAlYC9gLyAuYC5gLKApn+SlIV6rYSrfnWuiXeejq58koOKf6qBo4C3f7mBnnW5kbiAuYCcdaFyzYDNgLOAs4C5gLmAo4CngLmAt4CvgJF/noB1f7aAtYCAgG+AtIC3gG2AiYC1gLKAs4CNgLaAtoCWgJOAeIBtgJGAuYCSgLmAnJSNe6KOoX2kgHiAqoCMgKSApoCBgHqAuYC4gLiAsoCXgJuAcoB3gKaAooCYgHiAAAAAADMMBwcHBwcHAi8BAQEWDAwwMDAwMDACAgICLwAAAAAAAAAAADQKLQMGCgYDCA8PDw8NBgMEBAQEBCMICQkIDwAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAA9CwsLCwsLCwsLCws9HBwcHBwzHBwLAAAAAAAAAAAAAAAeOBQpDS4dISQuGxISEhINKDg+KTsgOBQ5AAAAAAAHAAAAAAAAJgAmBQUFBQUFAAUFBRwgPj4+Pho/PiAjAAAAAAAGAAAAAAAAHiEZEhISEhISEhISDT88Ezw/ExMTIDkAAAAAAABVAAAAAAAANwsFMTExMTExMTExFRQYGBgYGBgYPCMAAAAAAAB5AAAAAAAAHi4lFxcXFxcXFxcXDSgYGCk+GBgYKTkAAAAAAABVAAAAAAAAFSIiEBAQEBAQEBAQHhoODhgODg4OGDkAAAAAAABVAAAAAAAAMxwcHBwcHBwcHBwcHCEdHR0pHSEdHTIAAAAAAABVAAAAAAAAHiojEBAQEBAQEBAQHjsfHx8fDiEfKTkAAAAAAAB6AAAAAAEAAAAAPQAAAAAAAAAAACUlJSUlJSUlJQsLCwsAAABVAAAAPSYkJiYkJiQmJCQkJCMkJiQkJCIkJCYkJCQkJCIAAABVAAAAAAAAAAAAJiYmJCYkJiQkJCQmJCYREQsAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAAAAAAAAAAAAAAKws9Cz0LACsAPQsAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAJAYnLCcnBgYnBiIAAAAAAAAAAAAAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAzMjMcMzIyMjIrHDIyMisyMjILHDIyCzMzMjIyMisLAAB6AAA3NTc2JTY0JTY0NTU1JSU2NTU3NTU1NDUlNjU1NjQqAABVPQAAAD0AAAAAAD0ANzYfDh0fHyEfHwsAPQsAAAAAAAA9AABVFR0pIS4pLjonJzonJzoVJzo6OjoGOicnLjY7ITsoIRg7ITlVAAAAAAAAAAAAAAAAAAAoGBQ/IBQUAAAAAAAAAAAAAAAAAAB6ADMTPD8TPhM/ExM8OD88PzgUExQ8Ez4UPBQTExQ+PD8UOQBV" + } + ], + "Personal": [ + { + "title": "The Midnight Archive", + "url": "http://archive.midnightchannel.net/", + "image_type": "url", + "image": "canned/midnightchannel.gif" + }, + { + "title": "WebTV/MSNTV Secret Pics & Info", + "url": "http://turdinc.kicks-ass.net/Msntv/index2.html", + "image_type": "url", + "image": "canned/mattman69.gif" + } + ] + } + } +} diff --git a/zefie_wtvp_minisrv/package-lock.json b/zefie_wtvp_minisrv/package-lock.json index ebfbb179..5fd8a344 100644 --- a/zefie_wtvp_minisrv/package-lock.json +++ b/zefie_wtvp_minisrv/package-lock.json @@ -1,20 +1,28 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.22", + "version": "0.9.32", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "zefie_wtvp_minisrv", - "version": "0.9.22", + "version": "0.9.32", "license": "GPL3", "dependencies": { + "adm-zip": "^0.5.9", "crypto-js": "^4.1.1", "easy-crc": "0.0.2", "endianness": "^8.0.2", - "mime-types": "^2.1.33", + "express": "^4.18.2", + "html-entities": "^2.3.3", + "iconv-lite": "^0.6.3", + "mime-types": "^2.1.35", + "newsie": "^1.2.1", "proxy-agent": "^5.0.0", - "strftime": "^0.10.0" + "sanitize-html": "^2.7.2", + "socks-proxy-agent": "^6.2.1", + "strftime": "^0.10.1", + "uuid": "^8.3.2" }, "funding": { "type": "patreon", @@ -29,6 +37,45 @@ "node": ">= 6" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -40,6 +87,11 @@ "node": ">= 6.0.0" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", @@ -51,14 +103,105 @@ "node": ">=4" } }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -78,9 +221,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -98,26 +241,94 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/degenerator": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz", - "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", "dependencies": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", - "vm2": "^3.9.3" + "vm2": "^3.9.8" }, "engines": { "node": ">= 6" } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/easy-crc": { @@ -125,6 +336,19 @@ "resolved": "https://registry.npmjs.org/easy-crc/-/easy-crc-0.0.2.tgz", "integrity": "sha512-h6eqIdhJRe0p271/xZJbM/0klCi13mW5IB7ZEzEGH11yV4QXWAkD4yPErz0fXdhFrd6sZ4Q1k5Iky2kMsMNePw==" }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/endianness": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", @@ -133,6 +357,30 @@ "node": ">=8" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/escodegen": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", @@ -182,10 +430,72 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/file-uri-to-path": { "version": "2.0.0", @@ -195,6 +505,52 @@ "node": ">= 6" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -211,7 +567,7 @@ "node_modules/ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", "dependencies": { "readable-stream": "1.1.x", "xregexp": "2.0.0" @@ -220,6 +576,24 @@ "node": ">=0.8.0" } }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", @@ -237,23 +611,68 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/http-proxy-agent": { @@ -270,9 +689,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -282,11 +701,11 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -298,19 +717,35 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -318,7 +753,7 @@ "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -335,20 +770,52 @@ "yallist": "^3.0.2" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -359,6 +826,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -367,6 +853,33 @@ "node": ">= 0.4.0" } }, + "node_modules/newsie": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/newsie/-/newsie-1.2.1.tgz", + "integrity": "sha512-41jhtKmlpSc27oIBkp681fm4aLURPT/AgeBvSRicxNPWDVeHLaq7tSvG/OsEXz7g41thgv9JMV1ZjYSABMiYVA==", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -402,27 +915,98 @@ "node": ">= 8" } }, - "node_modules/pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", "dependencies": { - "degenerator": "^3.0.1", + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pac-resolver": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", + "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", + "dependencies": { + "degenerator": "^3.0.2", "ip": "^1.1.5", - "netmask": "^2.0.1" + "netmask": "^2.0.2" }, "engines": { "node": ">= 8" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/postcss": { + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", @@ -441,69 +1025,7 @@ "node": ">= 8" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { + "node_modules/proxy-agent/node_modules/socks-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", @@ -516,6 +1038,219 @@ "node": ">= 6" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize-html": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.2.tgz", + "integrity": "sha512-DggSTe7MviO+K4YTCwprG6W1vsG+IIX67yp/QY55yQqKCJYSWzCA1rZbaXzkjoKeL9+jqwm56wD6srYLtUNivg==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -525,18 +1260,26 @@ "node": ">=0.10.0" } }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, "node_modules/strftime": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz", - "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM=", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.1.tgz", + "integrity": "sha512-nVvH6JG8KlXFPC0f8lojLgEsPA18lRpLZ+RrJh/NkQV2tqOgZfbas8gcU8SFgnnqR3rWzZPYu6N2A3xzs/8rQg==", "engines": { "node": ">=0.2.0" } @@ -544,25 +1287,25 @@ "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -570,6 +1313,18 @@ "node": ">= 0.8.0" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -581,15 +1336,43 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/vm2": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.5.tgz", - "integrity": "sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng==", + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", + "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, "bin": { "vm2": "bin/vm2" }, @@ -608,7 +1391,7 @@ "node_modules/xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", "engines": { "node": "*" } @@ -625,6 +1408,30 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "adm-zip": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -633,6 +1440,11 @@ "debug": "4" } }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", @@ -641,10 +1453,84 @@ "tslib": "^2.0.1" } }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-util-is": { "version": "1.0.3", @@ -662,9 +1548,9 @@ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -674,32 +1560,100 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, "degenerator": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz", - "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", "requires": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", - "vm2": "^3.9.3" + "vm2": "^3.9.8" } }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } }, "easy-crc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/easy-crc/-/easy-crc-0.0.2.tgz", "integrity": "sha512-h6eqIdhJRe0p271/xZJbM/0klCi13mW5IB7ZEzEGH11yV4QXWAkD4yPErz0fXdhFrd6sZ4Q1k5Iky2kMsMNePw==" }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "endianness": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==" }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "escodegen": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", @@ -727,16 +1681,113 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "file-uri-to-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -750,12 +1801,27 @@ "ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", "requires": { "readable-stream": "1.1.x", "xregexp": "2.0.0" } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", @@ -770,20 +1836,49 @@ } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } }, "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "http-proxy-agent": { @@ -797,20 +1892,20 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "inherits": { @@ -819,19 +1914,29 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } @@ -839,7 +1944,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -853,17 +1958,37 @@ "yallist": "^3.0.2" } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.50.0" + "mime-db": "1.52.0" } }, "ms": { @@ -871,11 +1996,39 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, "netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, + "newsie": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/newsie/-/newsie-1.2.1.tgz", + "integrity": "sha512-41jhtKmlpSc27oIBkp681fm4aLURPT/AgeBvSRicxNPWDVeHLaq7tSvG/OsEXz7g41thgv9JMV1ZjYSABMiYVA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -903,22 +2056,73 @@ "pac-resolver": "^5.0.0", "raw-body": "^2.2.0", "socks-proxy-agent": "5" + }, + "dependencies": { + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + } } }, "pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", + "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", "requires": { - "degenerator": "^3.0.1", + "degenerator": "^3.0.2", "ip": "^1.1.5", - "netmask": "^2.0.1" + "netmask": "^2.0.2" + } + }, + "parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "postcss": { + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } }, "proxy-agent": { "version": "5.0.0", @@ -933,6 +2137,18 @@ "pac-proxy-agent": "^5.0.0", "proxy-from-env": "^1.0.0", "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + } } }, "proxy-from-env": { @@ -940,21 +2156,44 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -962,15 +2201,96 @@ "string_decoder": "~0.10.x" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sanitize-html": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.2.tgz", + "integrity": "sha512-DggSTe7MviO+K4YTCwprG6W1vsG+IIX67yp/QY55yQqKCJYSWzCA1rZbaXzkjoKeL9+jqwm56wD6srYLtUNivg==", + "requires": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, "smart-buffer": { "version": "4.2.0", @@ -978,22 +2298,29 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + } } }, "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "requires": { "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "source-map": { @@ -1002,39 +2329,53 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "strftime": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz", - "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM=" + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.1.tgz", + "integrity": "sha512-nVvH6JG8KlXFPC0f8lojLgEsPA18lRpLZ+RrJh/NkQV2tqOgZfbas8gcU8SFgnnqR3rWzZPYu6N2A3xzs/8rQg==" }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "requires": { "prelude-ls": "~1.1.2" } }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -1043,12 +2384,31 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vm2": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.5.tgz", - "integrity": "sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng==" + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", + "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + } }, "word-wrap": { "version": "1.2.3", @@ -1058,7 +2418,7 @@ "xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==" }, "yallist": { "version": "3.1.1", diff --git a/zefie_wtvp_minisrv/package.json b/zefie_wtvp_minisrv/package.json index 4aabc910..60e5185f 100644 --- a/zefie_wtvp_minisrv/package.json +++ b/zefie_wtvp_minisrv/package.json @@ -1,6 +1,6 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.24", + "version": "0.9.33", "description": "WebTV Service (WTVP) Emulation Server", "main": "app.js", "homepage": "https://github.com/zefie/zefie_wtvp_minisrv", @@ -27,11 +27,19 @@ "url": "https://github.com/zefie/zefie_wtvp_minisrv.git" }, "dependencies": { + "adm-zip": "^0.5.9", "crypto-js": "^4.1.1", "easy-crc": "0.0.2", "endianness": "^8.0.2", - "mime-types": "^2.1.33", + "express": "^4.18.2", + "html-entities": "^2.3.3", + "iconv-lite": "^0.6.3", + "mime-types": "^2.1.35", + "newsie": "^1.2.1", "proxy-agent": "^5.0.0", - "strftime": "^0.10.0" + "sanitize-html": "^2.7.2", + "socks-proxy-agent": "^6.2.1", + "strftime": "^0.10.1", + "uuid": "^8.3.2" } } diff --git a/zefie_wtvp_minisrv/packer.js b/zefie_wtvp_minisrv/packer.js new file mode 100644 index 00000000..8b99a2ee --- /dev/null +++ b/zefie_wtvp_minisrv/packer.js @@ -0,0 +1,52 @@ +const { WTVShared } = require(classPath + "/WTVShared.js"); +var wtvshared = new WTVShared(null, true); +const fs = require('fs'); + +function showUsage() { + console.log(" * Usage:", process.argv[0], process.argv[1], ""); + process.exit(1); +} + +if (process.argv) { + if (process.argv[2]) { + var reverse = false; + var file = process.argv[2]; + if (file == "-d") { + file = process.argv[3]; + reverse = true; + } + if (fs.existsSync(file)) { + console.log(` * Processing ${file} ...`) + if (reverse) { + var outfile = file.replace(/\.cb64\.txt/,'') + ".dec.txt"; + var encodedData = fs.readFileSync(file); + var rawdata = wtvshared.unpackCompressedB64(encodedData); + try { + fs.writeFileSync(outfile, rawdata); + console.log(` * Successfully decoded into ${outfile}`) + } catch (e) { + console.error("Error processing file:", e) + process.exit(1); + } + } else { + var outfile = file + ".cb64.txt"; + var rawdata = fs.readFileSync(file); + var encodedData = wtvshared.packCompressedB64(rawdata); + try { + fs.writeFileSync(outfile, encodedData); + console.log(` * Successfully encoded into ${outfile}`) + } catch (e) { + console.error("Error processing file:", e) + process.exit(1); + } + } + } else { + console.error(` * Could not find file ${file}`) + showUsage(); + } + } else { + showUsage(); + } +} else { + showUsage(); +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/user_config.example.json b/zefie_wtvp_minisrv/user_config.example.json index 48bce41c..e09e29b1 100644 --- a/zefie_wtvp_minisrv/user_config.example.json +++ b/zefie_wtvp_minisrv/user_config.example.json @@ -3,6 +3,10 @@ "service_ip": "192.168.1.8", "service_name": "WebTV", "service_logo": "WebTVLogoJewel.gif", + "service_owner": "A Cool Dude", + "service_owner_account": "CoolDude", + "service_owner_contact": "CoolDudeTweets", + "service_owner_contact_method": "Twitter", "service_splash_logo": "file://ROM/images/SplashLogo1.gif", "ServiceVaults": [ "UserServiceVault", @@ -31,6 +35,15 @@ "8100000000000000" ] }, + "wtv-admin": { + "authorized_ssids": { + "8100000000000000": [ + "192.168.1.0/24", + "127.0.0.1" + ] + }, + "password": "my-secure-password" + }, "wtv-log": { "write_logs_to_disk": true }, @@ -45,6 +58,35 @@ }, "wtv-music": { "disabled": true + }, + "wtv-author": { + "enable_multi_query": true + }, + "wtv-news": { + "disabled": false, + "upstream_address": "192.168.11.8", + "upstream_port": 1699, + "upstream_auth": { + "username": "not_yet", + "password": "implemented" + } } - } -} \ No newline at end of file + }, + "favorites": { + "folder_templates": { + "Personal": [ + { + "title": "The Midnight Archive", + "url": "http://archive.midnightchanne.net/", + "image_type": "url", + "image": "canned/midnightchannel.gif" + }, + { + "title": "WebTV/MSNTV Secrets", + "url": "http://turdinc.kicks-ass.net/Msntv/", + "image_type": "url", + "image": "canned/mattman69.gif" + } + ] + } + } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index 6e2abd2f..6210d4a0 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -31,18 +31,172 @@ - + + Code + + Code - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code + + + Code + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -60,12 +214,84 @@ Code - - Code - Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code @@ -88,9 +314,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code + + + + + + + Code + + + Code + + + Code + + + Code + + + Code + + @@ -219,6 +933,9 @@ Code + + + Code @@ -235,12 +952,20 @@ + + + + + + + + Code @@ -248,12 +973,21 @@ + + + + + + + + + Code @@ -267,21 +1001,29 @@ + + Code + + Code + + Code - - + Code + + Code + Code @@ -304,47 +1046,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + Code - + Code - + Code - + Code - + + Code - + + Code - + Code - + Code - + + Code + + Code - + Code + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -354,10 +1255,11 @@ + + - @@ -366,6 +1268,9 @@ + + + \ No newline at end of file