update: add 'setIRCNick()' function to WTVClientSessionData for ease of use

update: add primative getMaxUsernameLength() to overcome username limitation in older builds
update: wtv-chat:/home template
This commit is contained in:
zefie
2021-07-26 07:07:05 -04:00
parent 7826891070
commit 012c0114e1
7 changed files with 185 additions and 152 deletions

View File

@@ -1,13 +1,6 @@
headers = `200 OK`; headers = "200 OK";
if (request_headers.query.nick) headers += "\n" + ssid_sessions[socket.ssid].setIRCNick(request_headers.query.nick);
headers += "\nContent-Type: text/html";
if (request_headers.query.nick) headers += `
wtv-irc-nick: ${request_headers.query.nick}
wtv-user-nick: ${request_headers.query.nick}`
;
headers += `
Content-Type: text/html`;
if (request_headers.query.host && request_headers.query.port && request_headers.query.channel) { if (request_headers.query.host && request_headers.query.port && request_headers.query.channel) {
data = `<html> data = `<html>
@@ -46,16 +39,6 @@ ${request_headers.query.channel}
<tr> <tr>
<td width=10 height=26> <td width=10 height=26>
<td width=89 valign=middle> <td width=89 valign=middle>
<td width=5>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
<td width=5>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
<table cellspacing=0 cellpadding=0 href="javascript:void(window.open('newChatChannel.panel'))" > <table cellspacing=0 cellpadding=0 href="javascript:void(window.open('newChatChannel.panel'))" >
<tr> <tr>
<td height=1> <td height=1>
@@ -120,12 +103,9 @@ ${request_headers.query.channel}
<tr> <tr>
<td><img src="wtv-chat:/images/widget.gif" width=16 height=16> <td><img src="wtv-chat:/images/widget.gif" width=16 height=16>
<td width=3> <td width=3>
<td width=54> <td width=84>
<spacer type=vertical size=1><br> <spacer type=vertical size=1><br>
<a href="wtv-chat:/type"><font size=-1 color=#E7CE4A><b> Go to</b></font></a> <a href="wtv-chat:/home"><font size=-1 color=#E7CE4A><b> Home</b></font></a>
<td width=21>
<img src="wtv-chat:/images/widget.gif" width=16 height=16>
<td width=34>
</table> </table>
</table> </table>
</table> </table>

View File

@@ -1,123 +0,0 @@
<html>
<head>
<title>
Chat Home
</title>
</head>
<body bgcolor="#101C1E" text="#A2ACB5" link="#CFC382" vlink="#E1EOE3" fontsize="medium" vspace=0 hspace=0>
<sidebar width=109>
<table cellspacing=0 cellpadding=0>
<tr>
<td width=104 height=420 bgcolor=#777896 valign=top>
<table cellspacing=0 cellpadding=0>
<tr>
<td height=7 colspan=3>
<spacer type=vertical size=7>
<tr>
<td width=7>
<spacer type=horizontal size=7>
<td width=87 href="wtv-home:/home">
<img src="images/htv_chat.gif" width=87 height=67>
<td width=10>
<spacer type=horizontal size=10>
</table>
<spacer type=vertical size=6>
<table cellspacing=0 cellpadding=0 border=0>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
<td width=5>
</table>
<td width=5 bgcolor=#2E3A54>
</table>
</sidebar>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=451 colspan=2 align=center bgcolor=#2E3A54>
<spacer type=vertical size=13>
<tr>
<td><img src="wtv-chat:/images/top_corner_dark.jpg" width=8 height=8>
<td width=60>
<tr>
<td bgcolor=#101C1E width=13>
<spacer type=horizontal size=13>
<td bgcolor=#101C1E width=438 valign=top>
<table cellspacing=0 cellpadding=0>
<tr>
<td width=105 height=9><spacer type=vertical size=9>
<td>
</table>
<tr>
<td colspan=2>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=375 height=25 bgcolor=#101C1E gradcolor=#3C4652 gradangle=90>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=366 valign=middle>&nbsp;&nbsp;
<blackface><font color=#D6D6D6>
</font></blackface><td>
<table cellspacing=0 cellpadding=0 border=0 bgcolor=#3C4652 gradcolor=#2E3A54 gradangle=90>
<tr>
<td height=16>
<td width=3>
<td width=100>
<spacer type=vertical size=2><br>
<font size=2 color=#E7CE4A><b>Chat Home</b></font>
<td width=21>
<td width=34>
</table>
</table>
</table>
<spacer type=vertical size=12> <table cellspacing=0 cellpadding=0>
<tr>
<td colspan=3 height=12>
<spacer type=vertical size=12> <tr>
<td abswidth=14>
<td>
yo yo yo yo
enter your nick...
<td abswidth=20>
<tr>
<td height=10>
<td>
<td colspan=2 height=2>
<spacer>
<tr>
<td height=1>
<tr>
<td>
<td colspan=2 height=2>
<spacer>
<tr>
<td height=230><!--yo yo yo Change this if needed-->
</table>
<table cellspacing=0 cellpadding=0 width=100%>
<tr>
<form action="wtv-chat:/MakeChatPage?host=chat.irchat.tv&port=6667&channel=WebTV" ONSUBMIT="this.chatinput.focus()">
<td abswidth=14>
<td>
<input id="chatinput" name="nick" type="text" value="" size=32 bgcolor=262626 text=ffc342 cursor=cc9933 font=proportional selected autoactivate nohighlight>
<td align=right>
<font color=e7ce4a><shadow>
<input type=submit borderimage="file://ROM/Borders/ButtonBorder2.bif" value="Join" usestyle width=80>
<td abswidth=9>
</form>
<tr> <TD HEIGHT=8>
</table>
</body>
</html>

View File

@@ -0,0 +1,144 @@
var irc_nick = "";
headers = "200 OK";
if (request_headers.query.nick) headers += "\n" + ssid_sessions[socket.ssid].setIRCNick(request_headers.query.nick);
else if (!ssid_sessions[socket.ssid].get("wtv-irc-nick")) ssid_sessions[socket.ssid].setIRCNick(minisrv_config.config.service_name + '_' + Math.floor(Math.random() * 100000)).substring(0, 16);
headers += "\nContent-Type: text/html";
var irc_nick = ssid_sessions[socket.ssid].get("wtv-irc-nick");
data = `<html>
<head>
<title>
Chat Home (Testing)
</title>
</head>
<body bgcolor="#101C1E" text="#A2ACB5" link="#CFC382" vlink="#E1EOE3" fontsize="medium" vspace=0 hspace=0>
<display noscroll>
<sidebar width=109>
<table cellspacing=0 cellpadding=0>
<tr>
<td width=104 height=420 bgcolor=#69758B valign=top>
<table cellspacing=0 cellpadding=0>
<tr>
<td height=7 colspan=3>
<spacer type=vertical size=7>
<tr>
<td width=7>
<spacer type=horizontal size=7>
<td width=87 href="wtv-home:/home">
<img src="${minisrv_config.config.service_logo}" width=87 height=67>
<td width=10>
<spacer type=horizontal size=10>
</table>
<spacer type=vertical size=6>
<table cellspacing=0 cellpadding=0 border=0>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
<table cellspacing=0 cellpadding=0 href="client:relog" >
<tr>
<td height=1>
<tr>
<td><shadow><font sizerange=medium color=#E1EOE3>Relogin</font></shadow>
</table>
<td width=5>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
<table cellspacing=0 cellpadding=0 href="wtv-home:/home" >
<tr>
<td height=1>
<tr>
<td><shadow><font sizerange=medium color=#E1EOE3>Home</font></shadow>
</table>
<td width=5>
<tr> <td bgcolor=#2E3A54 height=2 width=104 colspan=3>
<tr>
<td width=10 height=26>
<td width=89 valign=middle>
</table>
<td width=5 bgcolor=#2E3A54>
</table>
</sidebar>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=451 colspan=2 align=center bgcolor=#2E3A54>
<spacer type=vertical size=13>
<tr>
<td><img src="wtv-chat:/images/top_corner_dark.jpg" width=8 height=8>
<td width=60>
<tr>
<td bgcolor=#101C1E width=13>
<spacer type=horizontal size=13>
<td bgcolor=#101C1E width=438 valign=top>
<table cellspacing=0 cellpadding=0>
<tr>
<td width=105 height=9><spacer type=vertical size=9>
<td>
</table>
<tr>
<td colspan=2>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=375 height=25 bgcolor=#101C1E gradcolor=#3C4652 gradangle=90>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=366 valign=middle>&nbsp;&nbsp;
<blackface><font color=#D6D6D6>
</font></blackface><td>
<table cellspacing=0 cellpadding=0 border=0 bgcolor=#3C4652 gradcolor=#2E3A54 gradangle=90>
<tr>
<td width=21>
<td width=400>
<td width=34>
</table>
</table>
</table>
<spacer type=vertical size=12> <table cellspacing=0 cellpadding=0>
<tr>
<td colspan=3 height=12>
<spacer type=vertical size=22> <tr>
<td abswidth=14>
<td abswidth=400>
<form action="wtv-chat:/MakeChatPage" method="get">
<table>
<tr>
<td abswidth="120">Server:</td>
<td><input width="240" bgcolor=262626 text=ffc342 cursor=cc9933 font=proportional usestyle type="text" name="host" value="${request_headers.query.host || "chat.irchat.tv"}"></td>
</tr>
<tr>
<td>Port:</td>
<td><input width="240" bgcolor=262626 text=ffc342 cursor=cc9933 font=proportional usestyle type="text" name="port" value="${request_headers.query.port || 6667}"></td>
</tr>
<tr>
<td>Channel:</td>
<td><input width="240" bgcolor=262626 text=ffc342 cursor=cc9933 font=proportional usestyle type="text" name="channel" value="${request_headers.query.channel || "WebTV"}"></td>
</tr>
<tr>
<td>IRC Nick<sup>*</sup>:</td>
<td><input width="240" bgcolor=262626 text=ffc342 cursor=cc9933 font=proportional usestyle maxlength=16 type="text" name="nick" value="${irc_nick}"></td>
</tr>
<tr>
<td colspan="2" align="right">
<input type=submit borderimage="file://ROM/Borders/ButtonBorder2.bif" value="Connect" usestyle width=100>
</td>
</tr>
</table>
<br>
<small><sup>*</sup>Note: Once you are connected to the IRC Server, you cannot change your nickname until you disconnect.
What triggers the WebTV to disconnect from the chat server is not yet known,
it does maintain a connection to the IRC server, but leaves the channel, when you leave the chat page.
The connection times out after some time. Only then will any future attempts to change your name work.</small>
<td abswidth=9>
</form>
<tr> <TD HEIGHT=8>
</table>
</body>
</html>`;

View File

@@ -47,8 +47,8 @@ Content-type: text/html`;
} }
else { else {
var namerand = Math.floor(Math.random() * 100000); var namerand = Math.floor(Math.random() * 100000);
var nickname = (minisrv_config.config.service_name + '_' + namerand).substring(0, 16); var nickname = (minisrv_config.config.service_name + '_' + namerand)
var userid = '1'+ Math.floor(Math.random() * 1000000000000000000); var userid = '1' + Math.floor(Math.random() * 1000000000000000000);
var offline_user_list = CryptoJS.enc.Latin1.parse("<user-list>\n\t<user userid=\"" + userid + " user-name=\"" + nickname + "\" first-name=\"" + minisrv_config.config.service_name + "User \" last-name=\\" + namerand + "\" password=\"\" mail-enabled=\"true\" />\n</user-list>").toString(CryptoJS.enc.Base64); var offline_user_list = CryptoJS.enc.Latin1.parse("<user-list>\n\t<user userid=\"" + userid + " user-name=\"" + nickname + "\" first-name=\"" + minisrv_config.config.service_name + "User \" last-name=\\" + namerand + "\" password=\"\" mail-enabled=\"true\" />\n</user-list>").toString(CryptoJS.enc.Base64);
data = ''; data = '';
headers = `200 OK headers = `200 OK
@@ -77,9 +77,8 @@ wtv-noback-all: wtv-
wtv-service: reset wtv-service: reset
`+ getServiceString('all') + ` `+ getServiceString('all') + `
wtv-boot-url: wtv-1800:/preregister?relogin=true wtv-boot-url: wtv-1800:/preregister?relogin=true
wtv-user-name: ${nickname}
wtv-human-name: ${nickname} wtv-human-name: ${nickname}
wtv-irc-nick: ${nickname} ${ssid_sessions[socket.ssid].setIRCNick(nickname)}
wtv-home-url: wtv-home:/home? wtv-home-url: wtv-home:/home?
wtv-domain: wtv.zefie.com wtv-domain: wtv.zefie.com
wtv-inactive-timeout: 0 wtv-inactive-timeout: 0

View File

@@ -32,6 +32,9 @@ function go() {
<li><a href="wtv-flashrom:/willie" selected>Ultra Willies</a> ~ <a href="wtv-tricks:/info">Tricks Info</a></li> <li><a href="wtv-flashrom:/willie" selected>Ultra Willies</a> ~ <a href="wtv-tricks:/info">Tricks Info</a></li>
<li><a href="wtv-music:/demo/index">MIDI Music Demo</a></li> <li><a href="wtv-music:/demo/index">MIDI Music Demo</a></li>
`; `;
if (ssid_sessions[socket.ssid].hasCap("client-can-do-chat")) {
data += "<li><a href=\"wtv-chat:/home\">IRC Chat Test</a></li>\n"
}
if (ssid_sessions[socket.ssid].hasCap("client-has-disk")) { if (ssid_sessions[socket.ssid].hasCap("client-has-disk")) {
// only show disk stuff if 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"; data += "<li><a href=\"client:diskhax\">DiskHax</a> ~ <a href=\"client:vfathax\">VFatHax</a></li>\n";

View File

@@ -22,6 +22,30 @@ class WTVClientSessionData {
return false; return false;
} }
getMaxUsernameLength() {
if (parseInt(this.data_store['wtv-system-version'] < 4000)) {
// older builds may crash with nicknames longer than 16 chars.
// actual build where support started is yet unknown
return 16;
} else {
// newer builds supported up to 32 chars, I think
return 32;
}
}
setIRCNick(nick) {
// strip out unsupported chars
nick = nick.replace(/[^a-zA-Z0-9\-\_\`\^]/g, "");
// limit nick length based on build support
nick = nick.substring(0, this.getMaxUsernameLength());
// returns headers to send to client, while storing the new data in our session data.
this.data_store['wtv-user-name'] = nick;
this.data_store['wtv-irc-nick'] = nick;
return "wtv-irc-nick: " + nick + "\nwtv-user-nick: " + nick;
}
isMiniBrowser() { isMiniBrowser() {
if (this.data_store['wtv-need-upgrade'] || this.data_store['wtv-used-8675309']) return true; if (this.data_store['wtv-need-upgrade'] || this.data_store['wtv-used-8675309']) return true;
return false; return false;

View File

@@ -32,6 +32,11 @@
<Content Include=".gitignore" /> <Content Include=".gitignore" />
<Content Include="app.js" /> <Content Include="app.js" />
<Content Include="config.json" /> <Content Include="config.json" />
<Content Include="ServiceVault\wtv-chat\home.js" />
<Content Include="ServiceVault\wtv-chat\images\htv_chat.gif" />
<Content Include="ServiceVault\wtv-chat\images\htv_chat.jpg" />
<Content Include="ServiceVault\wtv-chat\images\top_corner_dark.jpg" />
<Content Include="ServiceVault\wtv-chat\images\widget.gif" />
<Content Include="ServiceVault\wtv-chat\MakeChatPage.js" /> <Content Include="ServiceVault\wtv-chat\MakeChatPage.js" />
<Content Include="ServiceVault\wtv-flashrom\get-by-path.js"> <Content Include="ServiceVault\wtv-flashrom\get-by-path.js">
<SubType>Code</SubType> <SubType>Code</SubType>
@@ -219,6 +224,7 @@
<ItemGroup> <ItemGroup>
<Folder Include="ServiceVault\" /> <Folder Include="ServiceVault\" />
<Folder Include="ServiceVault\wtv-chat\" /> <Folder Include="ServiceVault\wtv-chat\" />
<Folder Include="ServiceVault\wtv-chat\images\" />
<Folder Include="ServiceVault\wtv-flashrom\" /> <Folder Include="ServiceVault\wtv-flashrom\" />
<Folder Include="ServiceVault\wtv-flashrom\ROMCache\" /> <Folder Include="ServiceVault\wtv-flashrom\ROMCache\" />
<Folder Include="ServiceVault\wtv-music\" /> <Folder Include="ServiceVault\wtv-music\" />