diff --git a/server/helpers.js b/server/helpers.js index 4f7c98c..33cc2a0 100644 --- a/server/helpers.js +++ b/server/helpers.js @@ -129,6 +129,8 @@ function fetchBannedAS(callback) { }); } +const recentBannedIps = new Map(); // Store clientIp -> timestamp + function processConnection(clientIp, locationInfo, currentUsers, ws, callback) { const options = { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit" }; const connectionTime = new Date().toLocaleString([], options); @@ -140,6 +142,14 @@ function processConnection(clientIp, locationInfo, currentUsers, ws, callback) { } if (bannedAS.some((as) => locationInfo.as?.includes(as))) { + const now = Date.now(); + const lastSeen = recentBannedIps.get(normalizedClientIp) || 0; + + if (now - lastSeen > 300 * 1000) { + consoleCmd.logWarn(`Banned AS list client kicked (${normalizedClientIp})`); + recentBannedIps.set(normalizedClientIp, now); + } + return callback("User banned"); } diff --git a/web/js/main.js b/web/js/main.js index 8be0f84..ebed986 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -466,8 +466,6 @@ function initCanvas() { if ((isAndroid || isIOS || isIPadOS) && (document.hidden || !document.hasFocus())) return; const sig = parsedData.sig; - if (signalBuffer.length > 0 && signalBuffer[signalBuffer.length - 1] === sig) return; // skip if data hasn't changed - signalBuffer.push(sig); if (signalBuffer.length > 8) signalBuffer.shift();