Work on banlist
This commit is contained in:
parent
501a22556a
commit
637ece4044
4 changed files with 273 additions and 184 deletions
|
|
@ -27,11 +27,12 @@ function createLibraryTable(name, callback) {
|
|||
|
||||
function createBansTable(name, callback) {
|
||||
db.query("CREATE TABLE `chan_" + name + "_bans` (" +
|
||||
"`id` INT NOT NULL AUTO_INCREMENT," +
|
||||
"`ip` VARCHAR(39) NOT NULL," +
|
||||
"`name` VARCHAR(20) NOT NULL," +
|
||||
"`bannedby` VARCHAR(20) NOT NULL," +
|
||||
"`reason` VARCHAR(255) NOT NULL," +
|
||||
"PRIMARY KEY (`ip`, `name`))" +
|
||||
"PRIMARY KEY (`id`), UNIQUE (`name`, `ip`))" +
|
||||
"CHARACTER SET utf8", callback);
|
||||
}
|
||||
|
||||
|
|
@ -311,31 +312,8 @@ module.exports = {
|
|||
chan.name = res[0].name;
|
||||
chan.canonical_name = chan.name.toLowerCase();
|
||||
chan.registered = true;
|
||||
|
||||
// Load bans
|
||||
db.query("SELECT * FROM `chan_" + chan.name + "_bans`", function (err, rows) {
|
||||
if (chan.dead) {
|
||||
callback("Channel is dead", null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (err) {
|
||||
callback(err, null);
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var r = rows[i];
|
||||
if (r.ip === "*") {
|
||||
chan.namebans[r.name] = r;
|
||||
} else {
|
||||
chan.ipbans[r.ip] = r;
|
||||
}
|
||||
}
|
||||
|
||||
chan.logger.log("*** Loaded channel from database");
|
||||
callback(null, true);
|
||||
});
|
||||
chan.logger.log("*** Loaded channel from database");
|
||||
callback(null, true);
|
||||
});
|
||||
},
|
||||
|
||||
|
|
@ -557,6 +535,60 @@ module.exports = {
|
|||
"VALUES (?, ?, ?, ?)", [ip, name, note, bannedby], callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Check if an IP address or range is banned
|
||||
*/
|
||||
isIPBanned: function (chan, ip, callback) {
|
||||
if (typeof callback !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valid(chan)) {
|
||||
callback("Invalid channel name", null);
|
||||
return;
|
||||
}
|
||||
|
||||
db.query("SELECT * FROM `chan_" + chan + "_bans` WHERE ip LIKE ?", [ip+"%"],
|
||||
function (err, rows) {
|
||||
callback(err, err ? false : rows.length > 0);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Check if a username is banned
|
||||
*/
|
||||
isNameBanned: function (chan, name, callback) {
|
||||
if (typeof callback !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valid(chan)) {
|
||||
callback("Invalid channel name", null);
|
||||
return;
|
||||
}
|
||||
|
||||
db.query("SELECT * FROM `chan_" + chan + "_bans` WHERE name=?", [name],
|
||||
function (err, rows) {
|
||||
callback(err, err ? false : rows.length > 0);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Lists all bans
|
||||
*/
|
||||
listBans: function (chan, callback) {
|
||||
if (typeof callback !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valid(chan)) {
|
||||
callback("Invalid channel name", null);
|
||||
return;
|
||||
}
|
||||
|
||||
db.query("SELECT * FROM `chan_" + chan + "_bans` WHERE 1", callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes a ban from the banlist
|
||||
*/
|
||||
|
|
@ -589,5 +621,22 @@ module.exports = {
|
|||
|
||||
db.query("DELETE FROM `chan_" + chan + "_bans` WHERE ip=?",
|
||||
[ip], callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes a ban from the banlist
|
||||
*/
|
||||
unbanId: function (chan, id, callback) {
|
||||
if (typeof callback !== "function") {
|
||||
callback = blackHole;
|
||||
}
|
||||
|
||||
if (!valid(chan)) {
|
||||
callback("Invalid channel name", null);
|
||||
return;
|
||||
}
|
||||
|
||||
db.query("DELETE FROM `chan_" + chan + "_bans` WHERE id=?",
|
||||
[id], callback);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue