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..0adb9726
--- /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 (ssid_sessions[socket.ssid].getSessionData("address_book")) {
+ ssid_sessions[socket.ssid].setSessionData("address_book", ssid_sessions[socket.ssid].getSessionData("address_book") + addresstoadd);
+ ssid_sessions[socket.ssid].saveSessionData();
+ } else {
+ ssid_sessions[socket.ssid].setSessionData("address_book", addresstoadd);
+ ssid_sessions[socket.ssid].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
+
+
+
+
+
+
+|
+ |
+ |
|
+ |
+
+
+
+ |
+ |
+ |
+
+ |
+ |
+ |
+ |
|
+ |
+
+ |
+
+ |
+ |
+ |
+ |
|
+ |
+
+
+ |
+
+ |
+ |
+ |
+ |
|
+ |
+
+ |
+
+ |
+ |
+ |
+ |
+ |
|
+ |
+
+
+
+
+
+
+|
+ |
| Buddies for ${ssid_sessions[socket.ssid].getSessionData("subscriber_username") || "You"}
+ |
+
+ | Your address is ${ssid_sessions[socket.ssid].getSessionData("messenger_email") || "unlinked"}@${ssid_sessions[socket.ssid].getSessionData("messenger_domain") || "escargot.chat"}
+ |
+ |
+ |
+
+
+
+ |
|
+ |
+ |
| Name
+ | Options
+ |
+ |
+ |
|
+ |
+ |
|
+ |
+
+
+
+
+`
+ }
+}
\ No newline at end of file
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/WTVShared.js b/zefie_wtvp_minisrv/WTVShared.js
index cb7e11df..11ad80c9 100644
--- a/zefie_wtvp_minisrv/WTVShared.js
+++ b/zefie_wtvp_minisrv/WTVShared.js
@@ -8,6 +8,7 @@ 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');
@@ -15,8 +16,8 @@ class WTVShared {
minisrv_config = [];
- constructor(minisrv_config) {
- if (minisrv_config == null) this.minisrv_config = this.readMiniSrvConfig();
+ 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) {
@@ -579,6 +580,18 @@ class WTVShared {
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 {
diff --git a/zefie_wtvp_minisrv/packer.js b/zefie_wtvp_minisrv/packer.js
new file mode 100644
index 00000000..979dc1a6
--- /dev/null
+++ b/zefie_wtvp_minisrv/packer.js
@@ -0,0 +1,52 @@
+const { WTVShared } = require("./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/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
index 682d9da6..ece15d4e 100644
--- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
+++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
@@ -35,6 +35,7 @@
Code
+
@@ -97,6 +98,7 @@
+
Code