Start working on room passwords
This commit is contained in:
parent
0945fc0d7b
commit
d006099fc7
6 changed files with 120 additions and 36 deletions
|
|
@ -99,6 +99,7 @@ var Channel = function(name) {
|
|||
},
|
||||
show_public: false,
|
||||
enable_link_regex: true,
|
||||
password: "tomato74"
|
||||
};
|
||||
self.filters = [
|
||||
new Filter("monospace", "`([^`]+)`", "g", "<code>$1</code>"),
|
||||
|
|
@ -803,20 +804,40 @@ Channel.prototype.search = function(query, callback) {
|
|||
Channel.prototype.handlePendingJoins = function () {
|
||||
var self = this;
|
||||
self.pendingJoins.forEach(function (u) {
|
||||
self.userJoin(u);
|
||||
self.userJoin(u.user, u.pw);
|
||||
});
|
||||
delete self["pendingJoins"];
|
||||
};
|
||||
|
||||
Channel.prototype.userJoin = function(user) {
|
||||
Channel.prototype.userJoin = function(user, password) {
|
||||
var self = this;
|
||||
if (!self.ready) {
|
||||
if (!("pendingJoins" in self)) {
|
||||
self.pendingJoins = [];
|
||||
}
|
||||
self.pendingJoins.push(user);
|
||||
if (self.pendingJoins.indexOf(user) === -1) {
|
||||
self.pendingJoins.push({
|
||||
user: user,
|
||||
pw: password
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.opts.password !== false &&
|
||||
this.opts.password !== password &&
|
||||
user.rank < 2) {
|
||||
user.socket.emit("needPassword", password !== undefined &&
|
||||
this.opts.password !== password);
|
||||
return;
|
||||
}
|
||||
|
||||
user.channel = this;
|
||||
if (("pendingChannel" in user)) {
|
||||
user.socket.emit("cancelNeedPassword");
|
||||
delete user["pendingChannel"];
|
||||
}
|
||||
|
||||
var parts = user.ip.split(".");
|
||||
var slash24 = parts[0] + "." + parts[1] + "." + parts[2];
|
||||
// GTFO
|
||||
|
|
@ -2117,7 +2138,8 @@ Channel.prototype.tryUpdateOptions = function(user, data) {
|
|||
pagetitle: true,
|
||||
externalcss: true,
|
||||
externaljs: true,
|
||||
show_public: true
|
||||
show_public: true,
|
||||
password: true
|
||||
};
|
||||
|
||||
if ("afk_timeout" in data) {
|
||||
|
|
@ -2126,6 +2148,10 @@ Channel.prototype.tryUpdateOptions = function(user, data) {
|
|||
data.afk_timeout = 0;
|
||||
}
|
||||
|
||||
if ("password" in data) {
|
||||
data.password = data.password === "" ? false : ""+data.password;
|
||||
}
|
||||
|
||||
for(var key in this.opts) {
|
||||
if(key in data) {
|
||||
if(key in adminonly && user.rank < 3) {
|
||||
|
|
|
|||
27
lib/user.js
27
lib/user.js
|
|
@ -28,6 +28,7 @@ var User = function (socket) {
|
|||
this.rank = -1
|
||||
this.global_rank = -1;
|
||||
this.channel = null;
|
||||
this.pendingChannel = null;
|
||||
this.name = "";
|
||||
this.meta = {
|
||||
afk: false,
|
||||
|
|
@ -54,6 +55,10 @@ User.prototype.inChannel = function () {
|
|||
return this.channel !== null && !this.channel.dead;
|
||||
};
|
||||
|
||||
User.prototype.inPendingChannel = function () {
|
||||
return this.pendingChannel != null && !this.pendingChannel.dead;
|
||||
};
|
||||
|
||||
// Throttling/cooldown
|
||||
User.prototype.noflood = function (name, hz) {
|
||||
var time = new Date().getTime();
|
||||
|
|
@ -134,7 +139,7 @@ User.prototype.initCallbacks = function () {
|
|||
|
||||
self.socket.on("joinChannel", function (data) {
|
||||
data = (typeof data !== "object") ? {} : data;
|
||||
if (self.inChannel())
|
||||
if (self.inChannel() || self.inPendingChannel())
|
||||
return;
|
||||
if (typeof data.name != "string") {
|
||||
return;
|
||||
|
|
@ -148,14 +153,21 @@ User.prototype.initCallbacks = function () {
|
|||
return;
|
||||
}
|
||||
data.name = data.name.toLowerCase();
|
||||
self.channel = self.server.getChannel(data.name);
|
||||
self.pendingChannel = self.server.getChannel(data.name);
|
||||
if (self.loggedIn) {
|
||||
self.channel.getRank(self.name, function (err, rank) {
|
||||
// TODO fix
|
||||
self.pendingChannel.getRank(self.name, function (err, rank) {
|
||||
if (!err && rank > self.rank)
|
||||
self.rank = rank;
|
||||
});
|
||||
}
|
||||
self.channel.userJoin(self);
|
||||
self.pendingChannel.userJoin(self);
|
||||
});
|
||||
|
||||
self.socket.on("channelPassword", function (pw) {
|
||||
if (!self.inChannel() && self.inPendingChannel()) {
|
||||
self.pendingChannel.userJoin(self, pw);
|
||||
}
|
||||
});
|
||||
|
||||
self.socket.on("login", function (data) {
|
||||
|
|
@ -745,10 +757,13 @@ User.prototype.login = function (name, pw, session) {
|
|||
self.channel.logger.log(self.ip + " logged in as " +
|
||||
name);
|
||||
self.channel.broadcastNewUser(self);
|
||||
} else if (self.inPendingChannel()) {
|
||||
self.pendingChannel.userJoin(self);
|
||||
}
|
||||
};
|
||||
if (self.inChannel()) {
|
||||
self.channel.getRank(name, function (err, rank) {
|
||||
if (self.inChannel() || self.inPendingChannel()) {
|
||||
var chan = self.channel != null ? self.channel : self.pendingChannel;
|
||||
chan.getRank(name, function (err, rank) {
|
||||
if (!err) {
|
||||
self.saverank = true;
|
||||
self.rank = rank;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue