mirror of https://github.com/calzoneman/sync.git
Allow channel admins to read channel logs
This commit is contained in:
parent
07249f3589
commit
a371ff629d
60
channel.js
60
channel.js
|
@ -278,6 +278,66 @@ function incrementalDump(chan) {
|
|||
}
|
||||
}
|
||||
|
||||
Channel.prototype.readLog = function (filterIp, callback) {
|
||||
var maxLen = 100000; // Most recent 100KB
|
||||
var file = this.logger.filename;
|
||||
fs.stat(file, function (err, data) {
|
||||
if(err) {
|
||||
callback(err, null);
|
||||
return;
|
||||
}
|
||||
|
||||
var start = data.size - maxLen;
|
||||
if(start < 0) {
|
||||
start = 0;
|
||||
}
|
||||
var end = data.size - 1;
|
||||
|
||||
var rs = fs.createReadStream(file, {
|
||||
start: start,
|
||||
end: end
|
||||
});
|
||||
|
||||
var buffer = "";
|
||||
rs.on("data", function (data) {
|
||||
buffer += data;
|
||||
});
|
||||
|
||||
rs.on("end", function () {
|
||||
if(filterIp) {
|
||||
buffer = buffer.replace(
|
||||
/(\d{1,3}\.){2}(\d{1,3})\.(\d{1,3})/g,
|
||||
"x.x.$2.$3"
|
||||
);
|
||||
}
|
||||
|
||||
callback(false, buffer);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Channel.prototype.tryReadLog = function (user) {
|
||||
if(user.rank < 3)
|
||||
return;
|
||||
|
||||
var filterIp = true;
|
||||
if(user.global_rank >= 255)
|
||||
filterIp = false;
|
||||
|
||||
this.readLog(filterIp, function (err, data) {
|
||||
if(err) {
|
||||
user.socket.emit("readChanLog", {
|
||||
success: false
|
||||
});
|
||||
} else {
|
||||
user.socket.emit("readChanLog", {
|
||||
success: true,
|
||||
data: data
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Channel.prototype.tryRegister = function(user) {
|
||||
if(this.registered) {
|
||||
ActionLog.record(user.ip, user.name, "channel-register-failure", [
|
||||
|
|
6
user.js
6
user.js
|
@ -521,6 +521,12 @@ User.prototype.initCallbacks = function() {
|
|||
});
|
||||
}.bind(this));
|
||||
|
||||
this.socket.on("readChanLog", function () {
|
||||
if(this.channel !== null) {
|
||||
this.channel.tryReadLog(this);
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
this.socket.on("acp-init", function() {
|
||||
if(this.global_rank >= Rank.Siteadmin)
|
||||
this.server.acp.init(this);
|
||||
|
|
|
@ -497,6 +497,19 @@ Callbacks = {
|
|||
);
|
||||
},
|
||||
|
||||
readChanLog: function (data) {
|
||||
var log = $("#chanlog_contents");
|
||||
if(log.length == 0)
|
||||
return;
|
||||
|
||||
if(data.success) {
|
||||
log.text(data.data);
|
||||
} else {
|
||||
log.text("Error reading channel log");
|
||||
}
|
||||
log.scrollTop(log.prop("scrollHeight"));
|
||||
},
|
||||
|
||||
voteskip: function(data) {
|
||||
if(data.count > 0) {
|
||||
$("#voteskip").text("Voteskip ("+data.count+"/"+data.need+")");
|
||||
|
|
|
@ -45,6 +45,10 @@
|
|||
$("#show_channelranks").click(function() {
|
||||
socket.emit("requestChannelRanks");
|
||||
});
|
||||
clickHandler("#show_chanlog", "#chanlog");
|
||||
$("#show_chanlog").click(function () {
|
||||
socket.emit("readChanLog");
|
||||
});
|
||||
|
||||
genPermissionsEditor();
|
||||
|
||||
|
|
|
@ -812,6 +812,7 @@ function handleModPermissions() {
|
|||
setVisible("#jsedit_tab", CLIENT.rank >= 3);
|
||||
setVisible("#filteredit_tab", hasPermission("filteredit"));
|
||||
setVisible("#channelranks_tab", CLIENT.rank >= 3);
|
||||
setVisible("#chanlog_tab", CLIENT.rank >= 3);
|
||||
setVisible("#chanopts_unregister_wrap", CLIENT.rank >= 10);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
<li id="banlist_tab"><a href="javascript:void(0);" id="show_banlist">Ban List</a></li>
|
||||
<li id="channelranks_tab"><a href="javascript:void(0);" id="show_channelranks">Channel Ranks</a></li>
|
||||
<li id="loginhistory_tab"><a href="javascript:void(0);" id="show_loginhistory">Recent Connections</a></li>
|
||||
<li id="chanlog_tab"><a href="javascript:void(0);" id="show_chanlog">Channel Log</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr>
|
||||
|
@ -223,3 +224,6 @@
|
|||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
<div id="chanlog" class="span12">
|
||||
<pre id="chanlog_contents" style="max-height: 400px; overflow-y: scroll"></pre>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue