From a360cd8808ba5e62c9e888e3036db49990a44846 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Tue, 7 Jun 2016 22:47:49 -0700 Subject: [PATCH] Reject joins for channels mapped to other partitions --- src/server.js | 10 +++++++++- src/user.js | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/server.js b/src/server.js index a131e176..95f5d3bd 100644 --- a/src/server.js +++ b/src/server.js @@ -71,6 +71,7 @@ var Server = function () { initModule = new BackendModule(); } else if (Config.get('enable-partition')) { initModule = new PartitionModule(); + self.partitionDecider = initModule.getPartitionDecider(); } else { initModule = new LegacyModule(); } @@ -186,8 +187,15 @@ Server.prototype.isChannelLoaded = function (name) { }; Server.prototype.getChannel = function (name) { - var self = this; var cname = name.toLowerCase(); + if (this.partitionDecider && + !this.partitionDecider.isChannelOnThisPartition(cname)) { + const error = new Error(`Channel '${cname}' is mapped to a different partition`); + error.code = 'EWRONGPART'; + throw error; + } + + var self = this; for (var i = 0; i < self.channels.length; i++) { if (self.channels[i].uniqueName === cname) return self.channels[i]; diff --git a/src/user.js b/src/user.js index b779a672..bbb6d7e9 100644 --- a/src/user.js +++ b/src/user.js @@ -53,7 +53,20 @@ function User(socket) { } self.waitFlag(Flags.U_READY, function () { - var chan = Server.getServer().getChannel(data.name); + var chan; + try { + chan = Server.getServer().getChannel(data.name); + } catch (error) { + if (error.code !== 'EWRONGPART') { + throw error; + } + + self.socket.emit("errorMsg", { + msg: "Channel '" + data.name + "' is hosted on another server. " + + "Try refreshing the page to update the connection URL." + }); + return; + } chan.joinUser(self, data); }); });