Add banlist interface
This commit is contained in:
parent
3a585cbb60
commit
a5ca7d227e
53
channel.js
53
channel.js
|
@ -280,6 +280,7 @@ Channel.prototype.banIP = function(banner, bannee) {
|
|||
// It is assumed that the banner has permission at this point
|
||||
this.ipbans[bannee.ip] = [bannee.name, banner.name];
|
||||
bannee.socket.disconnect();
|
||||
this.broadcastIpbans();
|
||||
if(!this.registered)
|
||||
return false;
|
||||
var db = mysql.createConnectionSync();
|
||||
|
@ -302,6 +303,33 @@ Channel.prototype.banIP = function(banner, bannee) {
|
|||
return results;
|
||||
}
|
||||
|
||||
Channel.prototype.unbanIP = function(ip) {
|
||||
this.ipbans[ip] = null;
|
||||
this.broadcastIpbans();
|
||||
|
||||
if(!this.registered)
|
||||
return false;
|
||||
var db = mysql.createConnectionSync();
|
||||
db.connectSync(Config.MYSQL_SERVER, Config.MYSQL_USER,
|
||||
Config.MYSQL_PASSWORD, Config.MYSQL_DB);
|
||||
if(!db.connectedSync()) {
|
||||
console.log("MySQL Connection Failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
var query = 'DELETE FROM chan_{1}_bans WHERE `ip` = "{2}"'
|
||||
.replace(/\{1\}/, this.name)
|
||||
.replace(/\{2\}/, ip);
|
||||
|
||||
results = db.querySync(query);
|
||||
if(!results) {
|
||||
console.log("Delete from ban table failed");
|
||||
return;
|
||||
}
|
||||
db.closeSync();
|
||||
return results;
|
||||
}
|
||||
|
||||
// Searches the local library for media titles containing query
|
||||
Channel.prototype.searchLibrary = function(query) {
|
||||
query = query.toLowerCase();
|
||||
|
@ -362,6 +390,17 @@ Channel.prototype.userJoin = function(user) {
|
|||
user.socket.emit('newPoll', this.poll.packUpdate());
|
||||
}
|
||||
user.socket.emit('channelOpts', this.opts);
|
||||
var ents = [];
|
||||
for(var ip in this.ipbans) {
|
||||
if(this.ipbans[ip] != null) {
|
||||
ents.push({
|
||||
ip: ip,
|
||||
name: this.ipbans[ip][0],
|
||||
banner: this.ipbans[ip][1]
|
||||
});
|
||||
}
|
||||
}
|
||||
user.socket.emit('banlist', {entries: ents});
|
||||
if(user.playerReady)
|
||||
this.sendMediaUpdate(user);
|
||||
console.log("/" + user.ip + " joined channel " + this.name);
|
||||
|
@ -780,6 +819,20 @@ Channel.prototype.broadcastOpts = function() {
|
|||
this.sendAll('channelOpts', this.opts);
|
||||
}
|
||||
|
||||
Channel.prototype.broadcastIpbans = function() {
|
||||
var ents = [];
|
||||
for(var ip in this.ipbans) {
|
||||
if(this.ipbans[ip] != null) {
|
||||
ents.push({
|
||||
ip: ip,
|
||||
name: this.ipbans[ip][0],
|
||||
banner: this.ipbans[ip][1]
|
||||
});
|
||||
}
|
||||
}
|
||||
this.sendAll('banlist', {entries: ents});
|
||||
}
|
||||
|
||||
// Send to ALL the clients!
|
||||
Channel.prototype.sendAll = function(message, data) {
|
||||
io.sockets.in(this.name).emit(message, data);
|
||||
|
|
|
@ -28,6 +28,9 @@ function handle(chan, user, msg) {
|
|||
else if(msg.indexOf("/ban ") == 0) {
|
||||
handleBan(chan, user, msg.substring(5).split(' '));
|
||||
}
|
||||
else if(msg.indexOf("/unban ") == 0) {
|
||||
handleUnban(chan, user, msg.substring(7).split(' '));
|
||||
}
|
||||
else if(msg.indexOf("/poll ") == 0) {
|
||||
handlePoll(chan, user, msg.substring(6));
|
||||
}
|
||||
|
@ -63,6 +66,12 @@ function handleBan(chan, user, args) {
|
|||
}
|
||||
}
|
||||
|
||||
function handleUnban(chan, user, args) {
|
||||
if(Rank.hasPermission(user, "ipban") && args.length > 0) {
|
||||
chan.unbanIP(args[0]);
|
||||
}
|
||||
}
|
||||
|
||||
function handlePoll(chan, user, msg) {
|
||||
if(Rank.hasPermission(user, "poll")) {
|
||||
var args = msg.split(',');
|
||||
|
|
|
@ -55,6 +55,7 @@ function initCallbacks() {
|
|||
addUserDropdown(users[i], users[i].children[1].innerHTML);
|
||||
}
|
||||
|
||||
$('#modnav').show();
|
||||
$('#chancontrols').show();
|
||||
}
|
||||
RANK = data.rank;
|
||||
|
@ -105,6 +106,10 @@ function initCallbacks() {
|
|||
rebuildPlaylist();
|
||||
});
|
||||
|
||||
socket.on('banlist', function(data) {
|
||||
updateBanlist(data.entries);
|
||||
});
|
||||
|
||||
socket.on('usercount', function(data) {
|
||||
$('#usercount').text(data.count + " connected users");
|
||||
});
|
||||
|
|
|
@ -235,6 +235,19 @@ $('#opt_submit').click(function() {
|
|||
socket.emit('channelOpts', opts);
|
||||
});
|
||||
|
||||
$('#show_chancontrols').click(function() {
|
||||
$('#show_chancontrols').parent().addClass("active");
|
||||
$('#show_banlist').parent().removeClass("active");
|
||||
$('#banlist').hide();
|
||||
$('#chancontrols').show();
|
||||
});
|
||||
|
||||
$('#show_banlist').click(function() {
|
||||
$('#show_chancontrols').parent().removeClass("active");
|
||||
$('#show_banlist').parent().addClass("active");
|
||||
$('#banlist').show();
|
||||
$('#chancontrols').hide();
|
||||
});
|
||||
|
||||
function searchLibrary() {
|
||||
socket.emit('searchLibrary', {
|
||||
|
|
|
@ -599,3 +599,26 @@ function showAnnouncement(title, text) {
|
|||
$('<h3/>').text(title).appendTo(div);
|
||||
$('<p/>').html(text).appendTo(div);
|
||||
}
|
||||
|
||||
function updateBanlist(entries) {
|
||||
var tbl = $('#banlist table');
|
||||
if(tbl.children().length > 1) {
|
||||
$(tbl.children()[1]).remove();
|
||||
}
|
||||
for(var i = 0; i < entries.length; i++) {
|
||||
var tr = $('<tr/>').appendTo(tbl);
|
||||
var remove = $('<button/>').addClass("btn btn-mini btn-danger")
|
||||
.appendTo($('<td/>').appendTo(tr));
|
||||
$('<i/>').addClass("icon-remove-circle").appendTo(remove);
|
||||
var ip = $('<td/>').text(entries[i].ip).appendTo(tr);
|
||||
var name = $('<td/>').text(entries[i].name).appendTo(tr);
|
||||
var banner = $('<td/>').text(entries[i].banner).appendTo(tr);
|
||||
|
||||
var callback = (function(ip) { return function() {
|
||||
socket.emit('chatMsg', {
|
||||
msg: "/unban " + ip
|
||||
});
|
||||
} })(entries[i].ip);
|
||||
remove.click(callback);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,8 +93,20 @@
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-top: 20px; display: none" id="chancontrols">
|
||||
<div class="span10 offset1 well">
|
||||
<div class="row" style="display: none;" id="modnav">
|
||||
<div class="span10 offset1">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active">
|
||||
<a href="javascript:void(0)" id="show_chancontrols">Channel Controls</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:void(0)" id="show_banlist">Ban List</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="display: none" id="chancontrols">
|
||||
<div class="span10 offset1">
|
||||
<form action="javascript:void(0)">
|
||||
<fieldset>
|
||||
<legend>Channel Options</legend>
|
||||
|
@ -134,6 +146,18 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" id="banlist" style="display: none;">
|
||||
<div class="span10 offset1">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th></th>
|
||||
<th>IP</th>
|
||||
<th>Name</th>
|
||||
<th>Banned By</th>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /container -->
|
||||
|
||||
<script src="https://w.soundcloud.com/player/api.js"></script>
|
||||
|
|
Loading…
Reference in a new issue