diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js index 98af2224..42fab6de 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-home/home.js @@ -47,7 +47,8 @@ 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 (beta) +
  • Usenet (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/sendmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js index a7621110..9f736e54 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js @@ -16,7 +16,7 @@ if (!intro_seen && !request_headers.query.intro_seen) { 'noback': true, }).getURL(); - headers = "300 OK\nwtv-visit: " + clientErrorMsg; + headers = "200 OK\nwtv-visit: " + clientErrorMsg; } if (request_headers.query.clear == "true") { @@ -28,8 +28,16 @@ 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 to_addr = request_headers.query.message_to || null; 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; @@ -47,6 +55,7 @@ Location: wtv-mail:/sendmail`; 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; @@ -71,7 +80,7 @@ Content-Type: audio/wav`; 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.service_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.", @@ -102,19 +111,79 @@ Content-Type: audio/wav`; 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 + }) - 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]; + 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 { - ssid_sessions[socket.ssid].deleteSessionData("mail_draft"); - ssid_sessions[socket.ssid].deleteSessionData("mail_draft_attachments"); - headers = `300 OK + 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) { @@ -124,14 +193,15 @@ Location: wtv-mail:/listmail`; msg_body: msg_body, no_signature: no_signature, msg_url: msg_url, - msg_url_title: msg_url_title + 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 { + } else { headers = `200 OK Content-type: text/html`; @@ -195,7 +265,7 @@ location = "client:submitform?name=sendform&submitname=gabbing&submitvalue=true" location.reload(); } -Write an e-mail message +${pageTitle} @@ -203,6 +273,7 @@ Write an e-mail message + @@ -230,18 +301,22 @@ Write an e-mail message
    Mail list -
    +`; + if (!newsgroup) { + data += ` - +; -
    Address -
    +Address; +`; + } +data += ` @@ -288,7 +363,7 @@ Write an e-mail message
    - +
    @@ -314,7 +389,7 @@ Write an e-mail message -Write an e-mail message +${pageTitle}