fix/optimize wtv-mail

This commit is contained in:
zefie
2025-08-12 19:33:00 -04:00
parent 74ec365ae1
commit 8307620004
11 changed files with 110 additions and 118 deletions

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
session_data.mailstore.setMailIntroSeen(true)
headers = `200 OK
Content-type: text/html`;

View File

@@ -1,8 +1,8 @@
var minisrv_service_file = true;
var camefrom = request_headers.query.camefrom;
var action = request_headers.query.action;
const minisrv_service_file = true;
const camefrom = request_headers.query.camefrom;
const action = request_headers.query.action;
var address_book = null
let address_book = null
address_book = session_data.getSessionData("address_book")
if (address_book == null) {
session_data.setSessionData("address_book", [])
@@ -698,10 +698,10 @@ ${(!newaddress) ? `<input type=hidden name="id" value="${request_headers.query.i
break;
case "add":
var nameExists = false;
var addrExists = false;
let nameExists = false;
let addrExists = false;
// dumbass protection for making addresses look proper in the list
var address = request_headers.query.address.split("@")[0];
let address = request_headers.query.address.split("@")[0];
address += `@${minisrv_config.config.service_name}`;
// sanity checks to make sure the user doesn't have duplicate names/addresses
address_book.forEach(user => {
@@ -735,8 +735,8 @@ Location: wtv-mail:/addressbook`;
break;
case "change":
var address = request_headers.query.address
var nickname = request_headers.query.nickname
address = request_headers.query.address
let nickname = request_headers.query.nickname
if (!address) {
address = address_book[request_headers.query.id].address
}
@@ -746,10 +746,10 @@ Location: wtv-mail:/addressbook`;
// dumbass protection for making addresses look proper in the list
address = address.split("@")[0];
address += `@${minisrv_config.config.service_name}`;
var nameExists = false;
var addrExists = false;
nameExists = false;
addrExists = false;
if (address_book.length > 1) {
var otheraddrs = address_book.slice(0)
const otheraddrs = address_book.slice(0)
otheraddrs.splice(request_headers.query.id, 1)
// sanity checks to make sure the user doesn't have duplicate names/addresses
otheraddrs.forEach(user => {

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
headers = `200 OK
Content-Type: x-wtv-addresses

View File

@@ -1,12 +1,11 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
var errpage = null;
var messageid = request_headers.query.message_id;
var attachment_id = request_headers.query.attachment_id;
let errpage, message;
const messageid = request_headers.query.message_id;
const 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);
message = session_data.mailstore.getMessageByID(messageid);
if (!message) errpage = wtvshared.doErrorPage(400, "Invalid Message ID");
else {
if (!message.attachments) message.attachments = []; // backwards compat

View File

@@ -1,21 +1,21 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
var errpage = null;
let errpage = null;
var messageid = request_headers.query.message_id || null;
const 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);
const message = session_data.mailstore.getMessageByID(messageid);
if (!message) errpage = wtvshared.doErrorPage(400, "Invalid Message ID");
data = message.signature;
}
if (request_headers.query.sanitize) {
if (!data) data = '';
var message_colors = session_data.mailstore.getSignatureColors(data)
const message_colors = session_data.mailstore.getSignatureColors(data)
if (data.indexOf("<html>") >= 0) {
data = wtvshared.sanitizeSignature(data).replace("<html>", `<html><body bgcolor=${message_colors.bgcolor} text=${message_colors.text} link=${message_colors.link} vlink=${message_colors.vlink} vspace=0 hspace=0>`);

View File

@@ -1,14 +1,14 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
var mailstore_exists = false;
let mailstore_exists = false;
function mail_end_error(msg) {
var errpage = wtvshared.doErrorPage("400", msg);
const errpage = wtvshared.doErrorPage("400", msg);
headers = errpage[0];
data = errpage[1];
}
var intro_seen = session_data.mailstore.checkMailIntroSeen();
const 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";
@@ -26,14 +26,14 @@ if (!intro_seen && !request_headers.query.intro_seen) {
if (mailstore_exists) {
// mailstore exists
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;
const default_limit = (minisrv_config.services[service_name].messages_per_page) ? minisrv_config.services[service_name].messages_per_page : 25; // user config or 25
const mailbox = (request_headers.query.mailbox) ? parseInt(request_headers.query.mailbox) : 0;
const limit = (request_headers.query.limit) ? parseInt(request_headers.query.limit) : default_limit;
const reverse_sort = (request_headers.query.reverse_sort) ? true : false;
const page = (request_headers.query.page) ? parseInt(request_headers.query.page) : 0;
// get mailbox name
var mailbox_name = session_data.mailstore.getMailboxById(parseInt(mailbox));
const mailbox_name = session_data.mailstore.getMailboxById(parseInt(mailbox));
// if false or null, then mailbox is invalid
if (!mailbox_name) {
@@ -42,7 +42,7 @@ if (!intro_seen && !request_headers.query.intro_seen) {
// mailboxid is ok
if (!session_data.mailstore.mailboxExists(mailbox)) {
// mailbox does not yet exist, create it
var mailbox_exists = session_data.mailstore.createMailbox(mailbox);
const mailbox_exists = session_data.mailstore.createMailbox(mailbox);
if (!mailbox_exists) {
// failed to create mailbox for some reason
mail_end_error();
@@ -53,11 +53,11 @@ if (!intro_seen && !request_headers.query.intro_seen) {
}
}
}
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);
const message_list = session_data.mailstore.listMessages(mailbox, limit, reverse_sort, (page * limit))
const total_message_count = session_data.mailstore.countMessages(mailbox);
const total_unread_message_count = session_data.mailstore.countUnreadMessages(mailbox);
var message_list_string = null;
let message_list_string = null;
if (total_message_count == 0) {
message_list_string = "No new mail messages for ";
} else {
@@ -69,8 +69,8 @@ if (!intro_seen && !request_headers.query.intro_seen) {
}
}
var username = session_data.getSessionData("subscriber_username");
var notImplementedAlert = new clientShowAlert({
const username = session_data.getSessionData("subscriber_username");
const notImplementedAlert = new clientShowAlert({
'image': minisrv_config.config.service_logo,
'message': "This feature is not available.",
'buttonlabel1': "Okay",
@@ -201,7 +201,7 @@ label="View saved e-mail messages">
<td height=80>
<img src="wtv-mail:/content/images/Mail.gif" width=87 height=45>
`;
var icon_image = null;
let icon_image = null;
switch (mailbox_name) {
case "Inbox":
icon_image = session_data.mailstore.getMailboxIcon();
@@ -280,11 +280,11 @@ ${username}@${minisrv_config.config.service_name}
<hr width=422 align=left>
`;
Object.keys(message_list).forEach(function (k) {
var message = message_list[k];
const message = message_list[k];
if (typeof message.subject == "object" && message.subject) message.subject = wtvshared.decodeBufferText(message.subject);
message.known_sender = session_data.isAddressInAddressBook(message.from_addr);
var message_font_open = "<font color=#7A9FCC>";
var message_font_close = "</font>";
let message_font_open = "<font color=#7A9FCC>";
let message_font_close = "</font>";
if (message.unread) {
message_font_open = `<b><font color=#99E6FF>`;
message_font_close = "</font></b>"
@@ -309,7 +309,7 @@ ${message_font_close}
<td abswidth=47 maxlines=1>
${message_font_open}
`;
var message_date = new Date(message.date * 1000);
const message_date = new Date(message.date * 1000);
data += (message_date.getMonth() + 1) + "/" + message_date.getDate() + "\n";
data += `
${message_font_close}

View File

@@ -1,14 +1,12 @@
var minisrv_service_file = true;
var mailstore_exists = false;
const minisrv_service_file = true;
function mail_end_error(msg) {
var errpage = wtvshared.doErrorPage("400", msg);
const errpage = wtvshared.doErrorPage("400", msg);
headers = errpage[0];
data = errpage[1];
}
var intro_seen = session_data.mailstore.checkMailIntroSeen();
const 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";
@@ -16,13 +14,13 @@ if (!intro_seen && !request_headers.query.intro_seen) {
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);
const messageid = request_headers.query.message_id;
const message = session_data.mailstore.getMessageByID(messageid);
if (!message) {
mail_end_error("Invalid Message ID");
} else {
session_data.mailstore.setMessageReadStatus(messageid);
var notImplementedAlert = new clientShowAlert({
const notImplementedAlert = new clientShowAlert({
'image': minisrv_config.config.service_logo,
'message': "This feature is not available.",
'buttonlabel1': "Okay",

View File

@@ -1,13 +1,14 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
var message_snapshot_data = null;
var message_voicemail_data = null;
let message_snapshot_data = null;
let message_voicemail_data = null;
var intro_seen = session_data.mailstore.checkMailIntroSeen();
const 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?came-from=" + encodeURIComponent(request_headers.request_url);
} else if (request_headers.query.clear == "true") {
let gourl;
if (request_headers.Referer)
gourl = request_headers.Referer.replace(/[\?\&]clear\=true/, '');
else
@@ -30,8 +31,8 @@ wtv-expire-all: wtv-mail:/listmail
wtv-expire-all: wtv-mail:/sendmail
Location: ${gourl}`;
} else {
var doClientError = function (msg) {
var clientErrorMsg = new clientShowAlert({
const doClientError = function (msg) {
const clientErrorMsg = new clientShowAlert({
'image': minisrv_config.config.service_logo,
'message': msg,
'buttonlabel1': "Okay",
@@ -42,23 +43,23 @@ Location: ${gourl}`;
return "200 OK\nwtv-visit: " + clientErrorMsg;
}
var newsgroup = null;
let newsgroup = null;
if (wtvshared.parseBool(request_headers.query.discuss)) {
newsgroup = request_headers.query.group || request_headers.query.message_to || null;
}
var gourl = "wtv-mail:/sendmail";
var msg_subject, to_addr, to_name;
let gourl = "wtv-mail:/sendmail";
let msg_subject, to_addr, to_name, pageTitle, article, reply_message;
if (newsgroup !== null) {
var to_addr = newsgroup;
var pageTitle = "Post to " + newsgroup;
var article = request_headers.query.article || null;
var gourl = gourl + "?group=" + newsgroup;
to_addr = newsgroup;
pageTitle = "Post to " + newsgroup;
article = request_headers.query.article || null;
gourl = gourl + "?group=" + newsgroup;
} else {
var to_addr = request_headers.query.message_to || null;
var pageTitle = "Write an e-mail message";
to_addr = request_headers.query.message_to || null;
pageTitle = "Write an e-mail message";
if (request_headers.query.message_reply_id) {
reply_message = session_data.mailstore.getMessageByID(request_headers.query.message_reply_id);
if (reply_message) {
@@ -69,16 +70,16 @@ Location: ${gourl}`;
}
}
var msg_subject = msg_subject || request_headers.query.message_subject || null;
var msg_body = request_headers.query.message_body || null;
var to_name = 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;
msg_subject = msg_subject || request_headers.query.message_subject || null;
let msg_body = request_headers.query.message_body || null;
to_name = to_name || request_headers.query.whatever_webtv_sends_this_as || null;
let msg_url = request_headers.query.message_url || null;
let msg_url_title = request_headers.query.message_title || null;
let no_signature = false;
mail_draft_data = {};
mail_draft_attachments = {};
let mail_draft_data = {};
let mail_draft_attachments = {};
if (!wtvshared.parseBool(request_headers.query.discuss)) {
mail_draft_data = session_data.getSessionData("mail_draft");
mail_draft_attachments = session_data.getSessionData("mail_draft_attachments") || {};
@@ -124,10 +125,10 @@ 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.service_name //minisrv_config.config.domain_name
var notImplementedAlert = new clientShowAlert({
const username = session_data.getSessionData("subscriber_username");
const userdisplayname = wtvshared.htmlEntitize(session_data.getSessionData("subscriber_name"));
const address = username + "@" + minisrv_config.config.service_name //minisrv_config.config.domain_name
const notImplementedAlert = new clientShowAlert({
'image': minisrv_config.config.service_logo,
'message': "This feature is not available.",
'buttonlabel1': "Okay",
@@ -136,14 +137,14 @@ Content-Type: audio/wav`;
}).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;
let from_addr = address;
const signature = session_data.getSessionData("subscriber_signature") || null;
if (typeof request_headers.query.sendoff !== 'undefined' && request_headers.query.sendoff != false) {
var attachments = [];
const attachments = [];
if (message_snapshot_data) {
var attachment = {
const attachment = {
'mime': 'image/jpeg',
'filename': 'snapshot.jpg'
}
@@ -157,7 +158,7 @@ Content-Type: audio/wav`;
}
if (message_voicemail_data) {
var attachment = {
const attachment = {
'mime': 'audio/wav',
'filename': 'voicemail.wav'
}
@@ -171,15 +172,14 @@ Content-Type: audio/wav`;
attachments.push(attachment);
}
console.log("DEBUG sendmail: Before send decision - newsgroup =", newsgroup, "to_addr =", to_addr);
if (newsgroup !== null) {
console.log("DEBUG sendmail: Taking newsgroup path");
var request_is_async = true;
var local_service_name = request_headers.query['discuss-prefix'] || "wtv-news"
request_is_async = true;
const local_service_name = request_headers.query['discuss-prefix'] || "wtv-news"
const wtvnews = new WTVNews(minisrv_config, local_service_name);
var service_config = minisrv_config.services[local_service_name];
const service_config = minisrv_config.services[local_service_name];
let news_headers;
if (wtvnewsserver) {
var tls_options = {
const tls_options = {
ca: this.wtvshared.getServiceDep('wtv-news/localserver_ca.pem'),
key: this.wtvshared.getServiceDep('wtv-news/localserver_key.pem'),
cert: this.wtvshared.getServiceDep('wtv-news/localserver_cert.pem'),
@@ -193,12 +193,10 @@ Content-Type: audio/wav`;
if (service_config.upstream_auth)
wtvnews.initializeUsenet(service_config.upstream_address, service_config.upstream_port, service_config.upstream_tls || null, service_config.upstream_auth.username || null, service_config.upstream_auth.password || null);
else
wtvnews.initializeUsenet(service_config.upstream_address, service_configupstream_port, service_config.upstream_tls || null);
wtvnews.initializeUsenet(service_config.upstream_address, service_config.upstream_port, service_config.upstream_tls || null);
}
from_addr = userdisplayname + " <" + from_addr + ">";
news_headers = null;
if (signature && signature != "" && !no_signature) {
var signature_tuple = null;
if (signature.indexOf('<html>') >= 0) {
attachments.push({
"mime": 'text/html',
@@ -216,7 +214,7 @@ Content-Type: audio/wav`;
if (attachments.length > 0 || msg_body.indexOf('<html>') >= 0) {
// usenet attachments
var tuples = [];
let tuples = [];
if (msg_body.indexOf('<html>') >= 0) {
tuples.push({
"mime": 'text/html',
@@ -231,9 +229,9 @@ Content-Type: audio/wav`;
"use_base64": false
}];
}
if (signature_tuple) tuples.push(signature_tuple);
//if (signature_tuple) tuples.push(signature_tuple);
attachments.forEach((attachment) => {
var tuple = {};
const tuple = {};
tuple.mime = attachment.mime;
tuple.content = attachment.content;
tuple.use_base64 = (typeof attachment.use_base64 === 'boolean') ? attachment.use_base64 : true;
@@ -241,7 +239,7 @@ Content-Type: audio/wav`;
tuple.filename = attachment.filename || null;
tuples.push(tuple);
});
var multipart_data = wtvmime.generateMultipartMIME(tuples);
const multipart_data = wtvmime.generateMultipartMIME(tuples);
news_headers = {
"Content-Type": multipart_data.content_type,
"MIME-Version": multipart_data.mime_version,
@@ -259,16 +257,16 @@ wtv-expire-all wtv-mail:/sendmail
Location: wtv-news:/news?group=${newsgroup}`;
sendToClient(socket, headers, '');
}).catch((e) => {
var err = this.wtvshared.doErrorPage(500, null, e.toString())
const err = this.wtvshared.doErrorPage(500, null, e.toString())
sendToClient(socket, err[0], err[1]);
});
} else {
console.log("DEBUG sendmail: Taking email path with to_addr =", to_addr);
var messagereturn = session_data.mailstore.sendMessageToAddr(from_addr, to_addr, msg_body, msg_subject, userdisplayname, to_name, signature, attachments, msg_url, msg_url_title);
const 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);
const errpage = wtvshared.doErrorPage(400, messagereturn);
headers = errpage[0];
data = errpage[1];
} else {
@@ -282,7 +280,7 @@ Location: wtv-mail:/listmail`;
}
} else if (request_headers.query.saveoff) {
var mail_draft_data = {
mail_draft_data = {
to_addr: to_addr,
msg_subject: msg_subject,
msg_body: msg_body,
@@ -300,7 +298,7 @@ wtv-expire-all: wtv-mail:/sendmail`;
headers = `200 OK
Content-type: text/html`;
var mail_draft_data = session_data.getSessionData((newsgroup) ? "usenet_draft_attachments" : "mail_draft_attachments") || {};
mail_draft_data = session_data.getSessionData((newsgroup) ? "usenet_draft_attachments" : "mail_draft_attachments") || {};
if (request_headers.query.snapping == "false") {
headers += "\nwtv-expire-all: cache:snapshot.jpg";
if (mail_draft_data.message_snapshot_data) mail_draft_data.message_snapshot_data = null;
@@ -322,7 +320,7 @@ Content-type: text/html`;
mail_draft_data.message_voicemail_data = request_headers.query.message_voicemail_data
session_data.setSessionData((newsgroup) ? "usenet_draft_attachments" : "mail_draft_attachments", mail_draft_data);
}
var message_colors = null;
let 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);

View File

@@ -1,20 +1,20 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
headers = `200 OK
Content-type: text/plain
minisrv-no-mail-count: true`
var fail = '0';
var ok = '1';
const fail = '0';
const 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];
const address_split = request_headers.query.address.split("@");
const domain = address_split[1];
if (domain != "escargot.chat" && domain != "escargot.live") data = fail
else data = ok;
} else {

View File

@@ -1,4 +1,4 @@
var minisrv_service_file = true;
const minisrv_service_file = true;
headers = `200 OK
Content-Type: text/html`;

View File

@@ -139,12 +139,6 @@ function checkScopeErrors(file) {
// Check if either service name exists and is privileged
const service = config.services[serviceNameWithPrefix] || config.services[serviceNameWithoutPrefix];
if (serviceName === "wtv-news") {
eslintConfig.globals = {
...eslintConfig.globals,
"wtvnewsserver": "readonly"
};
}
if (service && service.privileged === true) {
// Add additional globals for privileged services
@@ -161,6 +155,9 @@ function checkScopeErrors(file) {
if (service.modules) {
for (const moduleName of service.modules) {
eslintConfig.globals[moduleName] = "readonly";
if (moduleName === "WTVNews") {
eslintConfig.globals["wtvnewsserver"] = "readonly";
}
}
}
}