diff options
| -rw-r--r-- | webAO/encoding.js | 4 | ||||
| -rw-r--r-- | webAO/index.html | 6 | ||||
| -rw-r--r-- | webAO/master.js | 62 |
3 files changed, 48 insertions, 24 deletions
diff --git a/webAO/encoding.js b/webAO/encoding.js index 71ebe53..04a44e7 100644 --- a/webAO/encoding.js +++ b/webAO/encoding.js @@ -31,8 +31,8 @@ export function unescapeChat(estring) { export function safe_tags(unsafe) { if (unsafe) { return unsafe - .replace(/>/g, "&rt;") - .replace(/</g, "<"); + .replace(/>/g, '>') + .replace(/</g, '<'); } else { return ""; } diff --git a/webAO/index.html b/webAO/index.html index dda9e0a..d3fc05f 100644 --- a/webAO/index.html +++ b/webAO/index.html @@ -19,11 +19,11 @@ <meta property="twitter:image" content="https://repository-images.githubusercontent.com/78860508/89fcba80-aafd-11e9-80db-c5b10c01aba9"> <meta http-equiv="Content-Security-Policy" - content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> + content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> <meta http-equiv="X-Content-Security-Policy" - content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> + content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> <meta http-equiv="X-WebKit-CSP" - content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> + content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;"> <meta name="viewport" content="width=700, initial-scale=1"> diff --git a/webAO/master.js b/webAO/master.js index be3478e..c1543f3 100644 --- a/webAO/master.js +++ b/webAO/master.js @@ -3,6 +3,7 @@ import { version } from '../package.json'; import Fingerprint2 from 'fingerprintjs2'; import { unescapeChat } from './encoding.js'; +import { safe_tags } from './encoding.js'; let masterserver; @@ -11,9 +12,11 @@ const options = { fonts: { extendedJsFonts: true, userDefinedFonts: ["Ace Attorn let lowMemory = false; -const server_description = []; -server_description[-1] = "This is your computer on port 50001"; -const online_counter = []; +let selectedServer = -1; + +let servers = []; +servers[-2] = { name: "Singleplayer", description: "Build cases, try out new things", ip: "127.0.0.1", port: 50001, assets: "", online: "" }; +servers[-1] = { name: "Localhost", description: "This is your computer on port 50001", ip: "127.0.0.1", port: 50001, assets: "", online: "Online: ?/?" }; if (window.requestIdleCallback) { requestIdleCallback(function () { @@ -64,9 +67,13 @@ export function check_https() { } export function setServ(ID) { - console.log(server_description[ID]); - if (server_description[ID] !== undefined) { - document.getElementById("serverdescription_content").innerHTML = "<b>" + online_counter[ID] + "</b><br>" + server_description[ID]; + selectedServer = ID; + + if (!lowMemory && document.getElementById(`server${ID}`).className === "") + checkOnline(ID, servers[ID].ip + ":" + servers[ID].port); + + if (servers[ID].description !== undefined) { + document.getElementById("serverdescription_content").innerHTML = "<b>" + servers[ID].online + "</b><br>" + safe_tags(servers[ID].description); } else { document.getElementById("serverdescription_content").innerHTML = ""; @@ -89,10 +96,20 @@ function onOpen(_e) { function onError(evt) { document.getElementById("ms_error").style.display = "block"; document.getElementById("ms_error_code").innerText = `A network error occurred: ${evt.reason} (${evt.code})`; + return; } function checkOnline(serverID, coIP) { - let oserv = new WebSocket("ws://" + coIP); + let oserv; + if (serverID !== -2) { + try { + oserv = new WebSocket("ws://" + coIP); + } catch (SecurityError) { + document.getElementById(`server${serverID}`).className = "unavailable"; + return; + } + + } // define what the callbacks do function onCOOpen(_e) { @@ -106,14 +123,18 @@ function checkOnline(serverID, coIP) { const coheader = comsg.split("#", 2)[0]; const coarguments = comsg.split("#").slice(1); if (coheader === "PN") { - online_counter[serverID] = `Online: ${coarguments[0]}/${coarguments[1]}`; + servers[serverID].online = `Online: ${Number(coarguments[0])}/${Number(coarguments[1])}`; oserv.close(); + return; } else if (coheader === "BD") { - online_counter[serverID] = "Banned"; - server_description[serverID] = coarguments[0]; + servers[serverID].online = "Banned"; + servers[serverID].description = coarguments[0]; oserv.close(); + return; } + if (serverID === selectedServer) + document.getElementById("serverdescription_content").innerHTML = "<b>" + servers[serverID].online + "</b><br>" + safe_tags(servers[serverID].description); } // assign the callbacks @@ -127,6 +148,8 @@ function checkOnline(serverID, coIP) { oserv.onerror = function (_evt) { console.warn(coIP + " threw an error."); + document.getElementById(`server${serverID}`).className = "unavailable"; + return; }; } @@ -137,23 +160,24 @@ function onMessage(e) { console.debug(msg); if (header === "ALL") { - const servers = msg.split("#").slice(1); - for (let i = 0; i < servers.length - 1; i++) { - const serverEntry = servers[i]; + const allservers = msg.split("#").slice(1); + for (let i = 0; i < allservers.length - 1; i++) { + const serverEntry = allservers[i]; const args = serverEntry.split("&"); + + let thisserver = { name: args[0], description: args[1], ip: args[2], port: Number(args[3]), assets: args[4], online: "Online: ?/?" }; + servers[i] = thisserver; + const ipport = args[2] + ":" + args[3]; const asset = args[4] ? `&asset=${args[4]}` : ""; - const liclass = lowMemory ? "" : "unavailable"; // don't hide the entries if we're not checking them document.getElementById("masterlist").innerHTML += - `<li id="server${i}" class="${liclass}" onmouseover="setServ(${i})"><p>${args[0]}</p>` + `<li id="server${i}" onmouseover="setServ(${i})"><p>${safe_tags(servers[i].name)}</p>` + `<a class="button" href="client.html?mode=watch&ip=${ipport}${asset}">Watch</a>` - + `<a class="button" href="client.html?mode=join&ip=${ipport}${asset}">Join</a></li>`; - server_description[i] = args[1]; - if (!lowMemory) - setTimeout(() => checkOnline(i, ipport), 0); + + `<a class="button" href="client.html?mode=join&ip=${ipport}${asset}">Join</a></li>`; } masterserver.close(); + return; } else if (header === "servercheok") { const args = msg.split("#").slice(1); |
