lots of changes:

- change how we handle modules for services in the VM
- fixed wtv-disk:/sync always failed the first time
- implement production-like wtv-star handling (when a service port becomes unavailable, it requests the url over the wtv-star port to show an error page)
- renamed WTVDownloadList.js to WTVDisk.js
- a bit more work on WTVNews (created class)
- probably more stuff I can't remember
This commit is contained in:
zefie
2022-10-11 13:51:20 -04:00
parent bf50e6e9e9
commit a887a36104
14 changed files with 314 additions and 271 deletions

View File

@@ -1,7 +1,7 @@
var minisrv_service_file = true;
var diskmap = Object.getCaseInsensitiveKey(request_headers.query, "DiskMap");
var wtvdl = new WTVDownloadList(minisrv_config, service_name);
var wtvdl = new WTVDisk(minisrv_config, service_name);
var force_update = (request_headers.query.force == "true") ? true : false;
var no_delete = (request_headers.query.dont_delete_files == "true") ? true : false;
@@ -318,6 +318,6 @@ if (request_headers['wtv-request-type'] == 'download') {
} else if (request_headers.query.group && diskmap) {
var message = request_headers.query.message || "Retrieving files...";
var main_message = request_headers.query.main_message || "Your receiver is downloading files.";
headers = "200 OK\nwtv-connection-close: close\nConnection: close\nContent-Type: text/html";
headers = "200 OK\nContent-Type: text/html\nwtv-expire-all: wtv-disk:";
data = wtvdl.getSyncPage(message, request_headers.query.group, diskmap, main_message, message, force_update, no_delete);
}

View File

@@ -1,34 +1,37 @@
var minisrv_service_file = true;
headers =`200 OK
if (request_headers.query.url) {
headers = `300 OK
Location: ${request_headers.query.url}`;
} else {
headers = `200 OK
Connection: Keep-Alive
wtv-expire-all: wtv-home:/splash
wtv-expire-all: wtv-flashrom:
Content-type: text/html`
var cryptstatus = (wtv_encrypted ? "Encrypted" : "Not Encrypted")
if (request_headers.query.url) headers += "\nwtv-visit: " + request_headers.query.url;
var cryptstatus = (wtv_encrypted ? "Encrypted" : "Not Encrypted")
var comp_type = wtvmime.shouldWeCompress(session_data, 'text/html');
var compstatus = "uncompressed";
switch (comp_type) {
case 1:
compstatus = "wtv-lzpf";
break;
case 2:
compstatus = "gzip (level 9)";
break;
}
var comp_type = wtvmime.shouldWeCompress(session_data,'text/html');
var compstatus = "uncompressed";
switch (comp_type) {
case 1:
compstatus = "wtv-lzpf";
break;
case 2:
compstatus = "gzip (level 9)";
break;
}
var unread_mailcount = session_data.mailstore.countUnreadMessages(0)
var mailbox_gif_num = 0; // no messages
if (unread_mailcount > 0) {
if (unread_mailcount == 1) mailbox_gif_num = 1;
else mailbox_gif_num = 2;
}
var unread_mailcount = session_data.mailstore.countUnreadMessages(0)
var mailbox_gif_num = 0; // no messages
if (unread_mailcount > 0) {
if (unread_mailcount == 1) mailbox_gif_num = 1;
else mailbox_gif_num = 2;
}
data = `<HTML>
data = `<HTML>
<HEAD>
<TITLE>Home for ${session_data.getSessionData("subscriber_username") || "minisrv"}</TITLE>
@@ -46,7 +49,7 @@ data = `<HTML>
<a HREF="client:showservices">
<img src="file://rom/Images/Spacer.gif" width=1 height=2>
<img src="file://rom/Cache/WebTVLogoJewel.gif" width=127 height=98>
<img src="${minisrv_config.config.service_logo}"" width=127 height=98>
</A>
<!-- BEGIN SEPARATOR -->
@@ -334,8 +337,8 @@ data = `<HTML>
<tr>
<td abswidth=100% absheight=18 align=center>
<font size="2"><b>Welcome to ${minisrv_config.config.service_name}`;
if (session_data.getSessionData("registered")) data += ", " + session_data.getSessionData("subscriber_username") + "!";
data += `</font></b>
if (session_data.getSessionData("registered")) data += ", " + session_data.getSessionData("subscriber_username") + "!";
data += `</font></b>
<tr>
<td width=100% align=center absheight=2 bgcolor="000000">
<tr>
@@ -350,23 +353,23 @@ data += `</font></b>
<ul>
<font size="2"><li><a href="wtv-admin:/admin">wtv-admin</a> <sup>new!</sup></li>
`;
if (session_data.hasCap("client-can-do-chat")) {
data += "<li><a href=\"wtv-chat:/home\">IRC Chat Test</a></li>\n"
}
if (session_data.hasCap("client-has-disk")) {
// only show disk stuff if client has disk
data += "<li><a href=\"client:diskhax\">DiskHax</a> ~ <a href=\"client:vfathax\">VFatHax</a></li>\n";
if (session_data.hasCap("client-can-do-macromedia-flash2")) {
// only show demo if client can do flash2
data += "<li>Old DealerDemo: <a href=\"wtv-disk:/sync?group=DealerDemo&diskmap=DealerDemo\">Download</a> ~ <a href=\"file://Disk/Demo/index.html\">Access</a></li>\n";
if (session_data.hasCap("client-can-do-chat")) {
data += "<li><a href=\"wtv-chat:/home\">IRC Chat Test</a></li>\n"
}
}
data += `</ul></font>`;
// for development
if (fs.existsSync(service_vaults[0] + "/" + service_name + "/home.zefie.html")) {
data += fs.readFileSync(service_vaults[0] + "/" + service_name + "/home.zefie.html", { 'encoding': 'utf8' });
}
data += `</table>
if (session_data.hasCap("client-has-disk")) {
// only show disk stuff if client has disk
data += "<li><a href=\"client:diskhax\">DiskHax</a> ~ <a href=\"client:vfathax\">VFatHax</a></li>\n";
if (session_data.hasCap("client-can-do-macromedia-flash2")) {
// only show demo if client can do flash2
data += "<li>Old DealerDemo: <a href=\"wtv-disk:/sync?group=DealerDemo&diskmap=DealerDemo\">Download</a> ~ <a href=\"file://Disk/Demo/index.html\">Access</a></li>\n";
}
}
data += `</ul></font>`;
// for development
if (fs.existsSync(service_vaults[0] + "/" + service_name + "/home.zefie.html")) {
data += fs.readFileSync(service_vaults[0] + "/" + service_name + "/home.zefie.html", { 'encoding': 'utf8' });
}
data += `</table>
<tr>
<td width=100% absheight=28>
<tr>
@@ -386,50 +389,4 @@ data += `</table>
</table>
</body>
</html>`
/*
data = `<html>
<head>
<title>Home for ${session_data.getSessionData("subscriber_username") || "minisrv"}</title>
<DISPLAY NoLogo>
</head>
<body bgcolor="#191919" text="#44cc55" link="#36d5ff" vlink="#36d5ff">
<b>Welcome to ${minisrv_config.config.service_name}`;
if (session_data.getSessionData("registered")) data += ", " + session_data.getSessionData("subscriber_username") + "!";
data += `</b><br>
<div width="540" align="right">
<font size="-4"><i>
minisrv v${minisrv_config.version}${(minisrv_config.config.git_commit) ? ' git-'+minisrv_config.config.git_commit : ''}, hosted by ${minisrv_config.config.service_owner}</i></small></font></div><br>
<hr>
<b>Status</b>: ${cryptstatus} (${compstatus})<br>
<b>Connection Speed</b>: &rate;
<hr>
<ul>
<li><a href="client:relog">client:relog (direct)</a></li>
<li><a href="wtv-flashrom:/willie">Ultra Willies</a> ~ <a href="wtv-tricks:/tricks">Tricks</a></li>
<li><a href="wtv-setup:/setup">Setup (Including BG Music)</a></li>
<li><a href="wtv-favorite:/favorite">Favorites</a> <sup>new!</sup> - <a href="wtv-admin:/admin">wtv-admin</a> <sup>new!</sup></li>
<li><a href="wtv-guide:/help?topic=Index&subtopic=Main&page=1">Guide/Help</a> <sup>(alpha)</sup> - <a href="${session_data.mailstore.checkMailIntroSeen() ? 'wtv-mail:/listmail' : 'wtv-mail:/DiplomaMail'}">Mail</a> <sup>(beta)</sup>
`;
if (session_data.hasCap("client-can-do-chat")) {
data += "<li><a href=\"wtv-chat:/home\">IRC Chat Test</a></li>\n"
}
if (session_data.hasCap("client-has-disk")) {
// only show disk stuff if client has disk
data += "<li><a href=\"client:diskhax\">DiskHax</a> ~ <a href=\"client:vfathax\">VFatHax</a></li>\n";
if (session_data.hasCap("client-can-do-macromedia-flash2")) {
// only show demo if client can do flash2
data += "<li>Old DealerDemo: <a href=\"wtv-disk:/sync?group=DealerDemo&diskmap=DealerDemo\">Download</a> ~ <a href=\"file://Disk/Demo/index.html\">Access</a></li>\n";
}
}
data += `<li><a href="http://duckduckgo.com/lite/">DuckDuckGo Lite</a></li>`
data += "</ul>";
// for development
if (fs.existsSync(service_vaults[0] + "/" + service_name + "/home.zefie.html")) {
data += fs.readFileSync(service_vaults[0] + "/" + service_name + "/home.zefie.html", { 'encoding': 'utf8' });
}
*/
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -21,7 +21,7 @@ data = `<HTML>
<table href="wtv-home:/home" absheight=76 cellspacing=0 cellpadding=0>
<tr>
<td align=right>
<img src="wtv-home:/ROMCache/WebTVLogoJewel.gif" width=87 height=67>
<img src="${minisrv_config.config.service_logo}" width=87 height=67>
</table>
<td abswidth=5>
<tr>

View File

@@ -1,93 +1,28 @@
var minisrv_service_file = true;
async function clientConnect(client) {
response = await client.connect()
if (response.code == 200) {
return true;
}
return false;
}
console.log('f')
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: selectGroup", 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 throwError(e) {
var errpage = wtvshared.doErrorPage(400, null, e.toString());
sendToClient(socket, errpage[0], errpage[1]);
}
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
async function WebTVListGroup(group) {
wtvnews.connectUsenet().then(() => {
wtvnews.selectGroup(group).then(() => {
wtvnews.listGroup(group).then((response) => {
if (response.code == 211) {
NGCount = response.group.number;
NGArticles = response.group.articleNumbers;
wtvnews.getHeaderObj(NGArticles).then((messages) => {
wtvnews.quitUsenet();
headers = `200 OK
Connection: Keep-Alive
Content-Type: text/html
wtv-expire: wtv-news:/news?group=${request_headers.query.group}`
data = `<HTML>
data = `<HTML>
<HEAD>
<script language=javascript>
if (top.frames.length > 1)
@@ -107,7 +42,7 @@ top.location="news:${request_headers.query.group}";
<table href="wtv-home:/home" absheight=76 cellspacing=0 cellpadding=0>
<tr>
<td align=right>
<img src="wtv-home:/ROMCache/WebTVLogoJewel.gif" width=87 height=67>
<img src="${minisrv_config.config.service_logo}" width=87 height=67>
</table>
<td abswidth=5>
<tr>
@@ -202,14 +137,14 @@ Group: ${request_headers.query.group}
<td height=33 width=256 valign=bottom>
<font size=4>
`
if (NGCount == 0) {
data += `This group has no postings`;
} else {
data += NGCount + " posting";
if (NGCount != 1)
data += "s"
}
data += `
if (NGCount == 0) {
data += `This group has no postings`;
} else {
data += NGCount + " posting";
if (NGCount != 1)
data += "s"
}
data += `
</font>
<br>
<img src="wtv-home:/ROMCache/Spacer.gif" width=0 height=8>
@@ -227,12 +162,12 @@ Group: ${request_headers.query.group}
<tr>
<td height=6>
</TABLE>`
if (NGCount > 0) {
if (NGCount > 0) {
Object.keys(messages).forEach(function (k) {
var message = messages[k]
var message_date = message.headers.DATE;
data += `
Object.keys(messages).forEach(function (k) {
var message = messages[k]
var message_date = message.headers.DATE;
data += `
<table cellspacing=0 cellpadding=0>
<tr>
<td abswidth=10>
@@ -249,9 +184,9 @@ ${message.headers.FROM}, ${message.headers.DATE}
</table>
<td abswidth=10>
</table>`;
});
}
data += `
});
}
data += `
<img src="wtv-home:/ROMCache/Spacer.gif" width=1 height=6><br>
<TABLE width=446 cellspacing=0 cellpadding=0>
<tr>
@@ -274,15 +209,14 @@ ${message.headers.FROM}, ${message.headers.DATE}
<td height=33 width=256 valign=bottom>
</BODY>
</HTML>`;
sendToClient(socket, headers, data);
} else {
var errpage = wtvshared.doErrorPage("400", "No such group.");
sendToClient(socket, errpage[0], errpage[1]);
}
}
}
}
sendToClient(socket, headers, data);
}).catch((e) => { throwError(e) });;
}
}).catch((e) => { throwError(e) });;
}).catch((e) => { throwError(e) });;
}).catch((e) => { throwError(e) });
}
async function WebTVShowMessage(client, group, article) {
var connected = await clientConnect(client)
@@ -321,7 +255,7 @@ ${(response.article.headers.SUBJECT) ? wtvshared.htmlEntitize(response.article.h
<td abswidth=6>
<img src="wtv-home:/ROMCache/Spacer.gif" width=1>
<td align=center>
<img src="wtv-mail:/ROMCache/WebTVLogoJewel.gif" width=87 height=67>
<img src="${minisrv_config.config.service_logo}" width=87 height=67>
</table>
<td abswidth=5>
<tr>
@@ -592,33 +526,27 @@ ${wtvshared.htmlEntitize(message_body, true)}
`;
sendToClient(socket, headers, data);
} else {
var errpage = wtvshared.doErrorPage("400", "No such article in group <b>"+group+"</b>");
var errpage = wtvshared.doErrorPage(400, null, "No such article in group <b>"+group+"</b>");
sendToClient(socket, errpage[0], errpage[1]);
}
} else {
var errpage = wtvshared.doErrorPage("400", "No such group: <b>"+group+"</b>");
var errpage = wtvshared.doErrorPage(400, null, "No such group: <b>"+group+"</b>");
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");
var errpage = doErrorPage();
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);
WebTVShowMessage(request_headers.query.group, request_headers.query.article);
} else {
WebTVListGroup(client, request_headers.query.group);
WebTVListGroup(request_headers.query.group);
}
}
}

View File

@@ -1,5 +1,7 @@
var minisrv_service_file = true;
const wtvbgm = new WTVBGMusic(minisrv_config, session_data);
var catsListed = 0;
var categories = wtvbgm.getCategoryList();
var divide = Math.round(categories.length / 2, 0);

View File

@@ -1,5 +1,6 @@
var minisrv_service_file = true;
const wtvbgm = new WTVBGMusic(minisrv_config, session_data);
var music_obj = wtvbgm.getMusicObj();
headers = `

View File

@@ -1,6 +1,7 @@
var minisrv_service_file = true;
if (request_headers.query.category) {
const wtvbgm = new WTVBGMusic(minisrv_config, session_data);
var musicList = wtvbgm.getCategorySongList(request_headers.query.category);
var categoryName = wtvbgm.getCategoryName(request_headers.query.category);