Add Admin Setting - Block anonymous connections (#740)
This commit is contained in:
parent
ef7bf1a319
commit
953428cad5
37
src/channel/anonymouscheck.js
Normal file
37
src/channel/anonymouscheck.js
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
var ChannelModule = require("./module");
|
||||||
|
var Flags = require("../flags");
|
||||||
|
|
||||||
|
function AnonymousCheck(channel) {
|
||||||
|
ChannelModule.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
AnonymousCheck.prototype = Object.create(ChannelModule.prototype);
|
||||||
|
|
||||||
|
AnonymousCheck.prototype.onUserPreJoin = function (user, data, cb) {
|
||||||
|
var chan = this.channel,
|
||||||
|
opts = this.channel.modules.options;
|
||||||
|
var anonymousBanned = opts.get("block_anonymous_users");
|
||||||
|
|
||||||
|
if (user.socket.disconnected) {
|
||||||
|
return cb("User disconnected", ChannelModule.DENY);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(anonymousBanned && user.isAnonymous()) {
|
||||||
|
user.socket.on("disconnect", function () {
|
||||||
|
if (!user.is(Flags.U_IN_CHANNEL)) {
|
||||||
|
cb("User disconnected", ChannelModule.DENY);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
user.socket.emit("errorMsg", { msg : "This channel has blocked anonymous users. Please provide a user name to join."});
|
||||||
|
user.waitFlag(Flags.U_LOGGED_IN, function () {
|
||||||
|
cb(null, ChannelModule.PASSTHROUGH);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
cb(null, ChannelModule.PASSTHROUGH);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = AnonymousCheck;
|
|
@ -156,7 +156,8 @@ Channel.prototype.initModules = function () {
|
||||||
"./poll" : "poll",
|
"./poll" : "poll",
|
||||||
"./kickban" : "kickban",
|
"./kickban" : "kickban",
|
||||||
"./ranks" : "rank",
|
"./ranks" : "rank",
|
||||||
"./accesscontrol" : "password"
|
"./accesscontrol" : "password",
|
||||||
|
"./anonymouscheck": "anoncheck"
|
||||||
};
|
};
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
@ -418,7 +419,8 @@ Channel.prototype.acceptUser = function (user) {
|
||||||
|
|
||||||
this.logger.log("[login] Accepted connection from Tor exit at " +
|
this.logger.log("[login] Accepted connection from Tor exit at " +
|
||||||
user.displayip);
|
user.displayip);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
this.logger.log("[login] Accepted connection from " + user.displayip);
|
this.logger.log("[login] Accepted connection from " + user.displayip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ function OptionsModule(channel) {
|
||||||
password: false, // Channel password (false -> no password required for entry)
|
password: false, // Channel password (false -> no password required for entry)
|
||||||
allow_dupes: false, // Allow duplicate videos on the playlist
|
allow_dupes: false, // Allow duplicate videos on the playlist
|
||||||
torbanned: false, // Block connections from Tor exit nodes
|
torbanned: false, // Block connections from Tor exit nodes
|
||||||
|
block_anonymous_users: false, //Only allow connections from registered users.
|
||||||
allow_ascii_control: false,// Allow ASCII control characters (\x00-\x1f)
|
allow_ascii_control: false,// Allow ASCII control characters (\x00-\x1f)
|
||||||
playlist_max_per_user: 0, // Maximum number of playlist items per user
|
playlist_max_per_user: 0, // Maximum number of playlist items per user
|
||||||
new_user_chat_delay: 0, // Minimum account/IP age to chat
|
new_user_chat_delay: 0, // Minimum account/IP age to chat
|
||||||
|
@ -328,6 +329,11 @@ OptionsModule.prototype.handleSetOptions = function (user, data) {
|
||||||
sendUpdate = true;
|
sendUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if("block_anonymous_users" in data && user.account.effectiveRank >=3){
|
||||||
|
this.opts.block_anonymous_users = Boolean(data.block_anonymous_users);
|
||||||
|
sendUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
if ("allow_ascii_control" in data && user.account.effectiveRank >= 3) {
|
if ("allow_ascii_control" in data && user.account.effectiveRank >= 3) {
|
||||||
this.opts.allow_ascii_control = Boolean(data.allow_ascii_control);
|
this.opts.allow_ascii_control = Boolean(data.allow_ascii_control);
|
||||||
sendUpdate = true;
|
sendUpdate = true;
|
||||||
|
|
|
@ -286,6 +286,11 @@ User.prototype.kick = function (reason) {
|
||||||
this.socket.disconnect();
|
this.socket.disconnect();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
User.prototype.isAnonymous = function(){
|
||||||
|
var self = this;
|
||||||
|
return !self.is(Flags.U_LOGGED_IN);
|
||||||
|
};
|
||||||
|
|
||||||
User.prototype.initAdminCallbacks = function () {
|
User.prototype.initAdminCallbacks = function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.socket.on("borrow-rank", function (rank) {
|
self.socket.on("borrow-rank", function (rank) {
|
||||||
|
|
|
@ -93,6 +93,7 @@ mixin adminoptions
|
||||||
+textbox-auto("cs-externaljs", "External Javascript", "Script URL")
|
+textbox-auto("cs-externaljs", "External Javascript", "Script URL")
|
||||||
+rcheckbox-auto("cs-show_public", "List channel publicly")
|
+rcheckbox-auto("cs-show_public", "List channel publicly")
|
||||||
+rcheckbox-auto("cs-torbanned", "Block connections from Tor")
|
+rcheckbox-auto("cs-torbanned", "Block connections from Tor")
|
||||||
|
+rcheckbox-auto("cs-block_anonymous_users", "Block anonymous users")
|
||||||
+rcheckbox-auto("cs-allow_ascii_control", "Allow ASCII control characters (e.g. newlines)")
|
+rcheckbox-auto("cs-allow_ascii_control", "Allow ASCII control characters (e.g. newlines)")
|
||||||
+textbox-auto("cs-playlist_max_per_user", "Maximum # of videos per user")
|
+textbox-auto("cs-playlist_max_per_user", "Maximum # of videos per user")
|
||||||
.form-group
|
.form-group
|
||||||
|
|
|
@ -941,6 +941,7 @@ function handleModPermissions() {
|
||||||
$("#cs-voteskip_ratio").val(CHANNEL.opts.voteskip_ratio);
|
$("#cs-voteskip_ratio").val(CHANNEL.opts.voteskip_ratio);
|
||||||
$("#cs-allow_dupes").prop("checked", CHANNEL.opts.allow_dupes);
|
$("#cs-allow_dupes").prop("checked", CHANNEL.opts.allow_dupes);
|
||||||
$("#cs-torbanned").prop("checked", CHANNEL.opts.torbanned);
|
$("#cs-torbanned").prop("checked", CHANNEL.opts.torbanned);
|
||||||
|
$("#cs-block_anonymous_users").prop("checked", CHANNEL.opts.block_anonymous_users);
|
||||||
$("#cs-allow_ascii_control").prop("checked", CHANNEL.opts.allow_ascii_control);
|
$("#cs-allow_ascii_control").prop("checked", CHANNEL.opts.allow_ascii_control);
|
||||||
$("#cs-playlist_max_per_user").val(CHANNEL.opts.playlist_max_per_user || 0);
|
$("#cs-playlist_max_per_user").val(CHANNEL.opts.playlist_max_per_user || 0);
|
||||||
$("#cs-playlist_max_duration_per_user").val(formatTime(CHANNEL.opts.playlist_max_duration_per_user));
|
$("#cs-playlist_max_duration_per_user").val(formatTime(CHANNEL.opts.playlist_max_duration_per_user));
|
||||||
|
|
Loading…
Reference in a new issue