var minisrv_service_file = true; var message_snapshot_data = null; var message_voicemail_data = null; 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 { var doClientError = function (msg) { var clientErrorMsg = new clientShowAlert({ 'image': minisrv_config.config.service_logo, 'message': msg, 'buttonlabel1': "Okay", 'buttonaction1': "client:donothing", 'noback': true, }).getURL(); headers = "200 OK\nwtv-visit: " + clientErrorMsg; } if (request_headers.query.clear == "true") { ssid_sessions[socket.ssid].deleteSessionData("mail_draft"); ssid_sessions[socket.ssid].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 (request_headers.query.discuss) { newsgroup = request_headers.query.group || request_headers.query.message_to || 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 = ssid_sessions[socket.ssid].getSessionData("mail_draft"); var mail_draft_attachments = ssid_sessions[socket.ssid].getSessionData("mail_draft_attachments") || {}; if (mail_draft_data) { ssid_sessions[socket.ssid].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 = ssid_sessions[socket.ssid].getSessionData("subscriber_username"); var userdisplayname = wtvshared.htmlEntitize(ssid_sessions[socket.ssid].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 = ssid_sessions[socket.ssid].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) { 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': "<"+ssid_sessions[socket.ssid].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 { clientErrorMsg("Could not send post. Server returned error " + response.code); sendToClient(socket, headers, ''); return client.quit(); } }) .then(response => { if (response.code !== 240) { clientErrorMsg("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); clientErrorMsg("Could not send post. Server returned unknown error"); sendToClient(socket, headers, ''); }); } } else { var messagereturn = ssid_sessions[socket.ssid].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 { ssid_sessions[socket.ssid].deleteSessionData("mail_draft"); ssid_sessions[socket.ssid].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 } ssid_sessions[socket.ssid].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 = ssid_sessions[socket.ssid].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; ssid_sessions[socket.ssid].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; ssid_sessions[socket.ssid].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 ssid_sessions[socket.ssid].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 ssid_sessions[socket.ssid].setSessionData("mail_draft_attachments", mail_draft_data); } var message_colors = null; if (no_signature) message_colors = ssid_sessions[socket.ssid].mailstore.getSignatureColors(null, true); else message_colors = ssid_sessions[socket.ssid].mailstore.getSignatureColors(ssid_sessions[socket.ssid].getSessionData("subscriber_signature"), true); data = `