From ee76fd51908a311616d582f240ba7b24cd588b38 Mon Sep 17 00:00:00 2001 From: zefie Date: Mon, 15 Nov 2021 00:51:31 -0500 Subject: [PATCH] more mail stuff - todo: alot, but mainly track new/read and get local working --- .../ServiceVault/wtv-1800/unauthorized.js | 2 + .../ServiceVault/wtv-home/home.js | 2 +- .../ServiceVault/wtv-mail/DiplomaMail.js | 9 +- .../content/images/sendmail_panel_dots.gif | Bin 0 -> 98 bytes .../ServiceVault/wtv-mail/listmail.js | 172 ++++----- .../ServiceVault/wtv-mail/readmail.js | 273 ++++++++++++++ .../ServiceVault/wtv-mail/sendmail.js | 338 ++++++++++++++++++ .../ServiceVault/wtv-setup/get-playlist.js | 2 + .../ServiceVault/wtv-setup/keyboard.js | 1 + .../ServiceVault/wtv-setup/reset-musicobj.js | 2 + .../ServiceVault/wtv-setup/set.js | 1 + .../wtv-setup/validate-bg-song-category.js | 2 + .../wtv-setup/validate-mail-signature.js | 2 + .../wtv-setup/validate-screen-border.js | 2 + zefie_wtvp_minisrv/WTVClientSessionData.js | 4 + zefie_wtvp_minisrv/WTVMail.js | 137 ++++++- zefie_wtvp_minisrv/WTVRegister.js | 2 +- zefie_wtvp_minisrv/WTVShared.js | 4 + zefie_wtvp_minisrv/app.js | 13 +- zefie_wtvp_minisrv/package-lock.json | 11 + zefie_wtvp_minisrv/package.json | 1 + zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj | 6 + 22 files changed, 882 insertions(+), 104 deletions(-) create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-mail/content/images/sendmail_panel_dots.gif create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js index 7e3fe89d..b1f0349f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js @@ -1,3 +1,5 @@ +var minisrv_service_file = true; + headers = `200 OK Content-type: text/html`; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js index 2d017998..98af2224 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js @@ -47,7 +47,7 @@ minisrv v${minisrv_config.version}${(minisrv_config.config.git_commit) ? ' git-'
  • client:relog (direct)
  • Ultra Willies ~ Tricks
  • Setup (Including BG Music)
  • -
  • Mail (not ready) +
  • Mail (not ready) `; if (ssid_sessions[socket.ssid].hasCap("client-can-do-chat")) { data += "
  • IRC Chat Test
  • \n" diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js index 5a8c0c3d..b88a4142 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/DiplomaMail.js @@ -54,8 +54,7 @@ Welcome to Mail  In Mail, you can exchange typed messages—called -e-mail—with anyone in the world who has an e-mail -address. This is your e-mail address: +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:
    ${ssid_sessions[socket.ssid].getSessionData("subscriber_username")}@${minisrv_config.config.service_name}
    @@ -79,10 +78,10 @@ choose this link: -
    + + - 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 0000000000000000000000000000000000000000..be321dfeb9b8815b123fca92daa8f6060c2761fe GIT binary patch literal 98 zcmZ?wbhEHbY-D6&X!y_I8Juw7zyZadEQ|~cj0`#qKmd|qV6tQpYMXWa^^6{oTkX%U z?)>()Fv+9oS$p5|S<~LW+EnCo_*?h+gt?!q>VI?A9!U`Fkdc~xa`C2 -
    @@ -107,7 +116,7 @@ label="View saved e-mail messages">
    -
    @@ -178,33 +187,23 @@ label="View saved e-mail messages"> `; - var icon_image = null; - switch (mailbox_name) { - case "Inbox": - switch (total_message_count) { - case 0: - icon_image = "OpenMailbox0.gif"; - break; - case 1: - icon_image = "OpenMailbox1.gif"; - break; - default: - icon_image = "OpenMailbox2.gif"; - break; - } - break; - case "Sent": - icon_image = "MailboxSent.gif"; - break; - case "Trash": - icon_image = "MailboxDiscard.gif"; - break; - default: - icon_image = "MailboxStorage.gif"; - break; - } + var icon_image = null; + switch (mailbox_name) { + case "Inbox": + icon_image = ssid_sessions[socket.ssid].mailstore.getMailboxIcon(); + break; + case "Sent": + icon_image = "MailboxSent.gif"; + break; + case "Trash": + icon_image = "MailboxDiscard.gif"; + break; + default: + icon_image = "MailboxStorage.gif"; + break; + } - data += ` + data += `
    @@ -243,9 +242,9 @@ label="View saved e-mail messages">

    `; - if (message_list) { + if (message_list) { - data += ` + data += ` ${total_message_count} e-mail message${(total_message_count != 1) ? 's' : ''} for
    @@ -266,10 +265,10 @@ ${username}@${minisrv_config.config.service_name}
    `; - Object.keys(message_list).forEach(function (k) { - var message = message_list[k]; - console.log(message); - data += ` + Object.keys(message_list).forEach(function (k) { + var message = message_list[k]; + console.log(message); + data += `
    @@ -289,25 +288,25 @@ ${(message.subject) ? message.subject : "(No Subject)"} `; - var message_date = new Date(message.date * 1000); - data += (message_date.getMonth() + 1) + "/" + message_date.getDate() + "\n"; - data += ` + var message_date = new Date(message.date * 1000); + data += (message_date.getMonth() + 1) + "/" + message_date.getDate() + "\n"; + data += `
    `; - }); - } else { - data += ` + }); + } else { + data += ` No ${(mailbox_name == "Inbox") ? `new e-mail messages for -
    ${username}@${minisrv_config.config.service_name}
    ` : 'e-mail messages in mailbox '+mailbox_name} +
    ` : 'e-mail messages in mailbox ' + mailbox_name}

    `; - } -data += ` + } + data += `
    @@ -315,7 +314,8 @@ data += ` `; + } + } else { + mail_end_error("Access Denied"); } -} 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..5ca837df --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js @@ -0,0 +1,273 @@ +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 = ssid_sessions[socket.ssid].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 = ssid_sessions[socket.ssid].mailstore.getMessageByID(messageid); + if (!message) { + mail_end_error("Invalid Message ID"); + } else { + 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 = ` + + + + + +${message.subject} + + + + + + +
    + + + +
    + +
    + + + + + +
    + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    Mail list +
    +
    +
    +
    + + + + +
    +
    Previous +
    +
    +
    +
    + + + + +
    +
    Next +
    +
    +
    +
    + + + + +
    +
    Discard +
    +
    +
    +
    + + + + +
    +
    Save +
    +
    +
    +
    + + + + +
    +
    Reply +
    +
    +
    +
    + + + + +
    +
    Forward +
    +
    +
    +
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + + +
    + + +
    + + + +E-mail message + + + + + +
    +
    +
    + + + +
    + + + +
    + + + + + + +
    +From: + +`; + if (message.from_name != message.from_addr) { + data += `${html_entities.encode(message.from_addr)}(${html_entities.encode(message.from_name)})`; + } else { + data += `${html_entities.encode(message.from_addr)}`; + } + + data += `
    +Date: + + +${strftime("%a, %b %e, %Y, %I:%M %P",new Date(message.date * 1000))} (UTC) +
    +To: + + +${html_entities.encode(message.to_addr)} ${(html_entities.encode(message.to_name)) ? '(' + html_entities.encode(message.to_name) + ')' : ''} +
    +Subject: + +${html_entities.encode(message.subject)} +
    + +
    + + + +
    +

    +${html_entities.encode(message.body).replace("\n", "
    ")} +${(message.signature) ? ' + + + + + + +Write an e-mail message + + + + + + + + + + + +
    + + + +
    + +
    + + + + + +
    + + + + + + + + +
    +
    + + + + +
    +
    Mail list +
    +
    +
    +
    + + + + +
    +
    Address +
    +
    +
    +
    + + + + +
    +
    Photo +
    +
    +
    +
    + + + + + +
    +
    Recording +
    +
    +
    +
    + + + + +
    +
    Erase +
    +
    +
    +
    + +
    + + + + + + +
    + +
    + +
    + + +
    + + + + + +
    +
    + + +
    + + +
    + + + +Write an e-mail message + + + + +
    +
    +
    + + + +
    + + +
    + + + + + + +
    +
    + + +
    + + + + + + + + + +
    +From:  + + + +
    +${address} +
    +(${userdisplayname}) +
    + +
    +To:  + + +
    + +
    +Subject:  + + +
    + +
    + +
    +`; + if (!ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || ssid_sessions[socket.ssid].getSessionData("subscriber_signature") == "") { + data += `
    `; + } else { + data += ` Disable Signature`; + } + data += ` + +
    + + +
    +
    +
    + +
    + + +
    + + + +
    + + +
    + + +`; +} \ 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..a4335b8e 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get-playlist.js @@ -1,3 +1,5 @@ +var minisrv_service_file = true; + var WTVBGMusic = require("./WTVBGMusic.js"); var wtvbgm = new WTVBGMusic(minisrv_config, ssid_sessions[socket.ssid]) var music_obj = wtvbgm.getMusicObj(); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js index 69e48563..d7b77311 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/keyboard.js @@ -1,4 +1,5 @@ var minisrv_service_file = true; + var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup"); if (settings_obj === null) settings_obj = {}; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js index e1e81467..4da20d29 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/reset-musicobj.js @@ -1,3 +1,5 @@ +var minisrv_service_file = true; + var music_obj = {}; ssid_sessions[socket.ssid].setSessionData("wtv-bgmusic", music_obj); ssid_sessions[socket.ssid].saveSessionData(); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js index 4ff62eba..5ee29557 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/set.js @@ -1,4 +1,5 @@ var minisrv_service_file = true; + if (request_headers.query && ssid_sessions[socket.ssid]) { var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup"); if (settings_obj === null) settings_obj = {}; 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..ac99f506 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,3 +1,5 @@ +var minisrv_service_file = true; + if (request_headers.query && ssid_sessions[socket.ssid]) { if (request_headers.request_url.indexOf('?') >= 0) { 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..f138d15c 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/validate-mail-signature.js @@ -1,3 +1,5 @@ +var minisrv_service_file = true; + 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(); 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/WTVClientSessionData.js b/zefie_wtvp_minisrv/WTVClientSessionData.js index 6dea55d8..215458ce 100644 --- a/zefie_wtvp_minisrv/WTVClientSessionData.js +++ b/zefie_wtvp_minisrv/WTVClientSessionData.js @@ -388,11 +388,13 @@ class WTVClientSessionData { 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(); } @@ -407,11 +409,13 @@ class WTVClientSessionData { 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(); } getBoxName() { diff --git a/zefie_wtvp_minisrv/WTVMail.js b/zefie_wtvp_minisrv/WTVMail.js index ac443779..76c4c376 100644 --- a/zefie_wtvp_minisrv/WTVMail.js +++ b/zefie_wtvp_minisrv/WTVMail.js @@ -13,18 +13,20 @@ class WTVMail { wtvshared = null; wtvmime = null; wtvclient = null; + WTVClientSessionData = null; mailstore_dir = null; is_guest = null; mailboxes = null; - constructor(minisrv_config, ssid, WTVClientSessionData) { + constructor(minisrv_config, ssid, wtvclient) { if (!minisrv_config) throw ("minisrv_config required"); var WTVShared = require('./WTVShared.js')['WTVShared']; var WTVMime = require('./WTVMime.js'); + var WTVClientSessionData = require('./WTVClientSessionData.js'); this.minisrv_config = minisrv_config; this.wtvshared = new WTVShared(minisrv_config); this.wtvmime = new WTVMime(minisrv_config); - this.wtvclient = WTVClientSessionData; + this.wtvclient = wtvclient; this.is_guest = !this.wtvclient.isRegistered(); this.ssid = ssid; this.unread_mail = this.wtvclient.getSessionData("subscriber_unread_mail") ? this.wtvclient.getSessionData("subscriber_unread_mail") : 0; @@ -37,6 +39,15 @@ class WTVMail { ]; } + 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) { @@ -102,7 +113,7 @@ class WTVMail { } - createMessage(mailboxid, from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, date = null, known_sender = false) { + createMessage(mailboxid, from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, signature = null, date = null, known_sender = false) { if (this.createMailbox(mailboxid)) { if (!date) date = Math.floor(Date.now() / 1000); @@ -117,7 +128,8 @@ class WTVMail { "date": date, "subject": subject, "body": msgbody, - "known_sender": known_sender + "known_sender": known_sender, + "signature": signature } try { if (this.fs.existsSync(message_file_out)) { @@ -149,7 +161,7 @@ class WTVMail { 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, true); + return this.createMessage(0, from_addr, to_addr, msg, subj, from_name, to_name, null, null, true); } getMessage(mailboxid, messageid) { @@ -174,6 +186,11 @@ class WTVMail { return false; } + 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); @@ -212,6 +229,116 @@ class WTVMail { var messages = this.listMessages(mailboxid, false); return (messages.length) ? messages.length : 0; } + + 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) { + // returns the user's SSID if true, false if not + var username_match = false; + var return_val = false; + this.fs.readdirSync(this.minisrv_config.config.SessionStore).forEach(file => { + if (!file.match(/.*\.json/ig)) return; + if (username_match) return; + try { + var temp_session_data_file = this.fs.readFileSync(this.minisrv_config.config.SessionStore + this.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 = temp_session_data.subscriber_username; + } catch (e) { + console.error(" # Error parsing Session Data JSON", file, e); + } + }); + return return_val; + } + + getUserMailstore(username) { + var ssid = this.checkUserExists(username); + if (ssid) { + var user_wtvsession = new this.WTVClientSessionData(this.minisrv_config, ssid); + var user_mailstore = new WTVMail(this.minisrv_config, ssid, user_wtvsession) + return user_mailstore; + } + return false; + } + + sendMessageToAddr(from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, signature = null) { + if (!to_addr.indexOf('@')) { + return "The m-mail address " + to_addr + " is not a valid m-mail address.

    An m-mail address should look like:
    : zefie@ZefieTV"; + } + var username = to_addr.split("@")[0]; + var dest_minisrv = to_addr.split("@")[1]; + + // 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 = getUserMailstore(to_addr); + // user does not exist + if (!dest_user_mailstore) return "The user " + username + " does not exist on MiniSrv " + dest_minisrv + ""; + + // 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)) createMessage(0, from_addr, to_addr, msgbody, subject, from_name, to_name, signature); + 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"; + } + + getMessageMailboxId(messageid) { + // returns the mailbox id of which the message was found for the current user + var self = this; + var mailboxid = false; + if (this.checkMessageIdSanity(messageid)) { + if (this.mailstoreExists()) { + this.fs.readdirSync(this.mailstore_dir).forEach(mailbox => { + if (mailboxid) return; + this.fs.readdirSync(this.mailstore_dir + self.path.sep + mailbox).forEach(file => { + if (!file.match(/.*\.zmsg/ig)) return; + if (mailboxid) return; + if (file.indexOf(messageid) !== -1) mailboxid = mailbox; + }); + }); + } + } + return mailboxid; + } + + getMessageByID(messageid) { + var mailbox_name = this.getMessageMailboxId(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; + } + } module.exports = WTVMail; diff --git a/zefie_wtvp_minisrv/WTVRegister.js b/zefie_wtvp_minisrv/WTVRegister.js index 338bfb09..3ad670ef 100644 --- a/zefie_wtvp_minisrv/WTVRegister.js +++ b/zefie_wtvp_minisrv/WTVRegister.js @@ -36,7 +36,7 @@ class WTVRegister { try { var temp_session_data_file = this.fs.readFileSync(this.session_store_dir + this.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()) username_match = true; } catch (e) { console.error(" # Error parsing Session Data JSON", file, e); username_match = true; diff --git a/zefie_wtvp_minisrv/WTVShared.js b/zefie_wtvp_minisrv/WTVShared.js index a218e373..beefed44 100644 --- a/zefie_wtvp_minisrv/WTVShared.js +++ b/zefie_wtvp_minisrv/WTVShared.js @@ -273,6 +273,10 @@ class WTVShared { return this.fixPathSlashes(base + this.path.sep + targetPath); } + makeSafeUsername(username) { + return username.replace(/^([A-Za-z0-9\-\_]{5,16})$/, ''); + } + /** * Corrects any / or \ differences, if any for file paths * @param {string} path diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 2e16041f..00032274 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -6,16 +6,17 @@ const zlib = require('zlib'); const http = require('http'); const https = require('https'); const strftime = require('strftime'); // used externally by service scripts +const html_entities = require('html-entities'); // used externally by service scripts const net = require('net'); const CryptoJS = require('crypto-js'); const { crc16 } = require('easy-crc'); 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('./WTVSec.js'); +const WTVLzpf = require('./WTVLzpf.js'); +const WTVClientCapabilities = require('./WTVClientCapabilities.js'); +const WTVClientSessionData = require('./WTVClientSessionData.js'); +const WTVMime = require("./WTVMime.js"); +const { WTVShared, clientShowAlert } = require("./WTVShared.js"); process .on('SIGTERM', shutdown('SIGTERM')) diff --git a/zefie_wtvp_minisrv/package-lock.json b/zefie_wtvp_minisrv/package-lock.json index ee27529b..e89388b1 100644 --- a/zefie_wtvp_minisrv/package-lock.json +++ b/zefie_wtvp_minisrv/package-lock.json @@ -12,6 +12,7 @@ "crypto-js": "^4.1.1", "easy-crc": "0.0.2", "endianness": "^8.0.2", + "html-entities": "^2.3.2", "mime-types": "^2.1.33", "proxy-agent": "^5.0.0", "strftime": "^0.10.0", @@ -242,6 +243,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + }, "node_modules/http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -783,6 +789,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", diff --git a/zefie_wtvp_minisrv/package.json b/zefie_wtvp_minisrv/package.json index 570935ba..380e9ca4 100644 --- a/zefie_wtvp_minisrv/package.json +++ b/zefie_wtvp_minisrv/package.json @@ -30,6 +30,7 @@ "crypto-js": "^4.1.1", "easy-crc": "0.0.2", "endianness": "^8.0.2", + "html-entities": "^2.3.2", "mime-types": "^2.1.33", "proxy-agent": "^5.0.0", "strftime": "^0.10.0", diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index b61ecf89..a909d052 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -95,6 +95,12 @@ Code + + Code + + + Code +