diff options
author | marzavec <admin@marzavec.com> | 2018-03-14 07:22:23 +0100 |
---|---|---|
committer | marzavec <admin@marzavec.com> | 2018-03-14 07:22:23 +0100 |
commit | aa33c86af09afc524833e4ff5f5764c2c3be553c (patch) | |
tree | bb00af3dd44a97f33002fb9a9db28f6f28ee1cec /server | |
parent | Streamlined modules, server tweaks, better feedback (diff) | |
download | hackchat-aa33c86af09afc524833e4ff5f5764c2c3be553c.tar.gz hackchat-aa33c86af09afc524833e4ff5f5764c2c3be553c.zip |
Added unban by hash
Diffstat (limited to 'server')
-rw-r--r-- | server/src/commands/mod/ban.js | 5 | ||||
-rw-r--r-- | server/src/commands/mod/unban.js | 38 | ||||
-rw-r--r-- | server/src/core/rateLimiter.js | 22 |
3 files changed, 34 insertions, 31 deletions
diff --git a/server/src/commands/mod/ban.js b/server/src/commands/mod/ban.js index 5ee77b6..19f297a 100644 --- a/server/src/commands/mod/ban.js +++ b/server/src/commands/mod/ban.js @@ -38,7 +38,8 @@ exports.run = async (core, server, socket, data) => { } // TODO unban by hash - server._police.arrest(badClient.remoteAddress); + let clientHash = server.getSocketHash(badClient); + server._police.arrest(badClient.remoteAddress, clientHash); console.log(`${socket.nick} [${socket.trip}] banned ${targetNick} in ${socket.channel}`); @@ -49,7 +50,7 @@ exports.run = async (core, server, socket, data) => { server.broadcast({ cmd: 'info', - text: `${socket.nick} banned ${targetNick} in ${socket.channel}, userhash: ${server.getSocketHash(badClient)}` + text: `${socket.nick} banned ${targetNick} in ${socket.channel}, userhash: ${clientHash}` }, { uType: 'mod' }); badClient.close(); diff --git a/server/src/commands/mod/unban.js b/server/src/commands/mod/unban.js index ee028d2..2406644 100644 --- a/server/src/commands/mod/unban.js +++ b/server/src/commands/mod/unban.js @@ -10,44 +10,48 @@ exports.run = async (core, server, socket, data) => { return; } - if (typeof data.ip !== 'string') { + if (typeof data.ip !== 'string' && typeof data.hash !== 'string') { + server.reply({ + cmd: 'warn', + text: "hash:'targethash' or ip:'1.2.3.4' is required" + }, socket); + return; } - let ip = data.ip; - let hash = data.hash; // TODO unban by hash + let mode, target; - // TODO unban by hash - let recordFound = server._police.pardon(data.ip); + if (typeof data.ip === 'string') { + mode = 'ip'; + target = data.ip; + } else { + mode = 'hash'; + target = data.hash; + } - if (!recordFound) { - server.reply({ - cmd: 'warn', - text: 'Could not find target in records' - }, socket); + server._police.pardon(target); - return; + if (mode === 'ip') { + target = server.getSocketHash(target); } - console.log(`${socket.nick} [${socket.trip}] unbanned ${/*hash || */ip} in ${socket.channel}`); + console.log(`${socket.nick} [${socket.trip}] unbanned ${target} in ${socket.channel}`); server.reply({ cmd: 'info', - text: `${socket.nick} unbanned a userhash: ${server.getSocketHash(ip)}` + text: `Unbanned ${target}` }, socket); server.broadcast({ cmd: 'info', - text: `${socket.nick} unbanned a userhash: ${server.getSocketHash(ip)}` + text: `${socket.nick} unbanned: ${target}` }, { uType: 'mod' }); core.managers.stats.decrement('users-banned'); }; -exports.requiredData = ['ip']; - exports.info = { name: 'unban', - usage: 'unban {ip}', + usage: 'unban {[ip || hash]}', description: 'Removes target ip from the ratelimiter' }; diff --git a/server/src/core/rateLimiter.js b/server/src/core/rateLimiter.js index f5c739b..0d94ef2 100644 --- a/server/src/core/rateLimiter.js +++ b/server/src/core/rateLimiter.js @@ -18,6 +18,7 @@ class Police { this._records = {}; this._halflife = 30000; // ms this._threshold = 25; + this._hashes = []; } /** @@ -76,12 +77,11 @@ class Police { * * @memberof Police */ - arrest (id) { - var record = this.search(id); + arrest (id, hash) { + let record = this.search(id); - if (record) { - record.arrested = true; - } + record.arrested = true; + this._hashes[hash] = id; } /** @@ -93,14 +93,12 @@ class Police { * @memberof Police */ pardon (id) { - var record = this.search(id); - - if (record) { - record.arrested = false; - return true; + if (typeof this._hashes[id] !== 'undefined') { + id = this._hashes[id]; } - - return false; + + let record = this.search(id); + record.arrested = false; } } |