summaryrefslogtreecommitdiff
path: root/src/renderer/gameserver/TOSCheck.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/gameserver/TOSCheck.ts')
-rw-r--r--src/renderer/gameserver/TOSCheck.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/renderer/gameserver/TOSCheck.ts b/src/renderer/gameserver/TOSCheck.ts
new file mode 100644
index 0000000..8dc29f2
--- /dev/null
+++ b/src/renderer/gameserver/TOSCheck.ts
@@ -0,0 +1,66 @@
+import GameServer from './server';
+import { ipcRenderer } from 'electron';
+
+let LAST_TOS = "";
+
+export default async function CheckNAcceptTOS(server:GameServer):Promise<boolean>{
+ try{
+ let thisVersion = await getTOSVersion(server.TOSLink);
+ console.log(server.TOSLink,thisVersion);
+ LAST_TOS=thisVersion;
+ return (localStorage.getItem(server.TOSLink) == thisVersion);
+
+ } catch (err) {
+ console.log("TOS check Error",err);
+ return true
+ }
+
+}
+
+async function getTOSVersion(address:string):Promise<string>{
+ // Returns date or if not found the hash of the whole page
+ const PageContent = await request(address);
+ const date = PageContent.match(/Last Update: \d\d\d\d-\d\d-\d\d/g);
+ let hash:string;
+ if(!date || date.length > 1){
+ hash = HashString(PageContent.replace(/ |\t|\n/g,"").replace(/<.+?>/g, "r")).toString(16);
+ } else {
+ hash = date[0].replace(/ /g,"");
+ }
+
+ return hash;
+}
+
+function request(url:string):Promise<string>{
+ return new Promise((res, rej)=>{
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url);
+ xhr.onload = function() {
+ if (xhr.status === 200) {
+ res(xhr.responseText);
+ }
+ else {
+ rej(new Error(`xhr.status: ${xhr.status} != 200`));
+ }
+ };
+ xhr.send();
+ });
+}
+
+
+
+// Hash function from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
+function HashString (s:string){
+ let hash = 0;
+ if (s.length == 0) return hash;
+ for (let i = 0; i < s.length; i++) {
+ let char = s.charCodeAt(i);
+ hash = ((hash<<5)-hash)+char;
+ hash = hash & hash; // Convert to 32bit integer
+ }
+ return hash;
+}
+
+export function acceptLastTOS(server:GameServer){
+ localStorage.setItem(server.TOSLink, LAST_TOS);
+}