var minisrv_service_file = true; async function clientConnect(client) { response = await client.connect() if (response.code == 200) { return true; } return false; } async function listGroup(client, group) { try { return await client.listGroup(group) } catch (e) { console.log("WTVNews Error -", "Command: listGroup", e); } return null; } async function selectGroup(client, group) { try { response = await client.group(request_headers.query.group) if (response.code == 211) { return true; } return false; } catch (e) { console.log("WTVNews Error -", "Command: grop", e); } return false; } async function getArticle(client, articleID) { try { return await client.article(articleID) } catch (e) { console.log("WTVNews Error -", "Command: article", e); } return null; } async function getHeader(client, articleID) { try { return await client.head(articleID) } catch (e) { console.log("WTVNews Error -", "Command: head -", "Article ID: "+articleID, e); } return null; } async function quitUsenet(client) { response = await client.quit() if (response.code == 205) { return true; } return false; } async function getHeaderObj(client, NGArticles) { var messages = []; for (var article in NGArticles) { if (article == "getCaseInsensitiveKey") continue; try { var data = await getHeader(client, NGArticles[article]); if (data.article) messages.push(data.article) } catch (e) { console.log(e, article); } } return messages; } async function WebTVListGroup(client, group) { var connected = await clientConnect(client) if (connected) { response = await selectGroup(client, group); if (response) { response = await listGroup(client, group); if (response.code == 211) { NGCount = response.group.number; NGArticles = response.group.articleNumbers; messages = await getHeaderObj(client, NGArticles); quitUsenet(client); headers = `200 OK Connection: Keep-Alive Content-Type: text/html wtv-expire: wtv-news:/news?group=${request_headers.query.group}` data = ` ${request_headers.query.group}
Post
Help
Group: ${request_headers.query.group}
` if (NGCount == 0) { data += `This group has no postings`; } else { data += NGCount + " posting"; if (NGCount != 1) data += "s" } data += `
` if (NGCount > 0) { Object.keys(messages).forEach(function (k) { var message = messages[k] var message_date = message.headers.DATE; data += `
${(message.headers.SUBJECT) ? message.headers.SUBJECT : "(No Subject)"}
${message.headers.FROM}, ${message.headers.DATE}
`; }); } data += `
`; sendToClient(socket, headers, data); } else { var errpage = wtvshared.doErrorPage("400", "No such group."); sendToClient(socket, errpage[0], errpage[1]); } } } } async function WebTVShowMessage(client, group, article) { var connected = await clientConnect(client) if (connected) { response = await selectGroup(client, group); if (response) { response = await getArticle(client, article); console.log(response); if (response.code == 220) { headers = `200 OK Content-type: text/html`; var message_colors = ssid_sessions[socket.ssid].mailstore.defaultColors; data = ` ${(response.article.headers.SUBJECT) ? wtvshared.htmlEntitize(response.article.headers.SUBJECT) : '(No subject)'}
Group
Previous
Next
Next New
Mail to
Respond
Help
  
Post
Group: ${wtvshared.htmlEntitize(response.article.headers.NEWSGROUPS)}
Date: ${console.log(Date.parse(response.article.headers.DATE))} ${strftime("%a, %b %e, %Y, %I:%M%P", new Date(Date.parse(response.article.headers.DATE) / 1000))}
From: `; // if (message.from_name != message.from_addr) { // data += `${wtvshared.htmlEntitize(message.from_addr)} `; // } else { data += `${wtvshared.htmlEntitize(response.article.headers.FROM)}`; // } data += `



${(response.article.headers.SUBJECT) ? wtvshared.htmlEntitize(response.article.headers.SUBJECT) : '(No subject)'}

`; var message_body = response.article.body.join("\n"); data += ` ${wtvshared.htmlEntitize(message_body, true)}

`; data += `

`; /* if (message.attachments) { message.attachments.forEach((v, k) => { if (v) { console.log("*****************", v['Content-Type']); switch (v['Content-Type']) { case "image/jpeg": data += `

`; break; case "audio/wav": data += `
  recording.wav (wav attachment)


`; break; } } }); } if (message.url) { data += `Included Page: ${wtvshared.htmlEntitize(message.url_title).replace(/'/gi, "'")}`; } */ data += `

`; sendToClient(socket, headers, data); } else { var errpage = wtvshared.doErrorPage("400", "No such article in group "+group+""); sendToClient(socket, errpage[0], errpage[1]); } } else { var errpage = wtvshared.doErrorPage("400", "No such group: "+group+""); sendToClient(socket, errpage[0], errpage[1]); } } } if (!minisrv_config.services[service_name].upstream_address || !minisrv_config.services[service_name].upstream_port) { var errpage = doErrorPage("400"); headers = errpage[0]; data = errpage[1]; } else { var request_is_async = true; if (request_headers.query.group) { const Client = require('newsie').default const client = new Client({ host: minisrv_config.services[service_name].upstream_address, port: minisrv_config.services[service_name].upstream_port }) if (request_headers.query.article) { WebTVShowMessage(client, request_headers.query.group, request_headers.query.article); } else { WebTVListGroup(client, request_headers.query.group); } } }