diff --git a/client/components/Windows/Connect.vue b/client/components/Windows/Connect.vue index aa9957a3..a59bc997 100644 --- a/client/components/Windows/Connect.vue +++ b/client/components/Windows/Connect.vue @@ -34,7 +34,10 @@ export default defineComponent({ }; onMounted(() => { - if (store.state.serverConfiguration?.lockNetwork) { + if ( + store.state.serverConfiguration?.lockNetwork && + store.state.serverConfiguration?.allowMultipleSameHostConnections + ) { if (store.state.networks.length > 0) { disabled.value = true; disabledReason.value = "You have already connected and cannot connect again."; diff --git a/defaults/config.js b/defaults/config.js index 2573c816..8bd81a93 100644 --- a/defaults/config.js +++ b/defaults/config.js @@ -285,6 +285,15 @@ module.exports = { // This value is set to `false` by default. lockNetwork: false, + // ### `sameHostLockedNetworkConnections` + // + // When set to `true`, users will be able to connect to the configured + // network multiple times. This can be useful if you connect to + // a bouncer like ZNC. Requires `lockNetwork` to be set to `true`. + // + // This value is set to `false` by default. + allowMultipleSameHostConnections: false, + // ## User management // ### `messageStorage` diff --git a/server/config.ts b/server/config.ts index 543a8135..5a2fe1f5 100644 --- a/server/config.ts +++ b/server/config.ts @@ -96,6 +96,7 @@ export type ConfigType = { leaveMessage: string; defaults: Defaults; lockNetwork: boolean; + allowMultipleSameHostConnections: boolean; messageStorage: string[]; useHexIp: boolean; webirc?: WebIRC; diff --git a/server/server.ts b/server/server.ts index c620e632..4cac524f 100644 --- a/server/server.ts +++ b/server/server.ts @@ -48,7 +48,12 @@ type IndexTemplateConfiguration = ServerConfiguration & { export type ClientConfiguration = Pick< ConfigType, - "public" | "lockNetwork" | "useHexIp" | "prefetch" | "defaults" + | "public" + | "lockNetwork" + | "useHexIp" + | "prefetch" + | "defaults" + | "allowMultipleSameHostConnections" > & { fileUpload: boolean; ldapEnabled: boolean; @@ -478,7 +483,7 @@ function initializeClient( }); socket.on("network:new", (data) => { - if (Config.values.lockNetwork) { + if (Config.values.lockNetwork && Config.values.allowMultipleSameHostConnections) { if (client.networks.length > 0) { return; } @@ -869,6 +874,8 @@ function getClientConfiguration(): ClientConfiguration { "lockNetwork", "useHexIp", "prefetch", + "allowMultipleSameHostConnections", + // TODO: remove this type cast ]) as ClientConfiguration; config.fileUpload = Config.values.fileUpload.enable; diff --git a/test/server.ts b/test/server.ts index 571a6bcc..89a0341c 100644 --- a/test/server.ts +++ b/test/server.ts @@ -131,6 +131,7 @@ describe("Server", function () { expect(data.defaultTheme).to.equal("default"); expect(data.themes).to.be.an("array"); expect(data.lockNetwork).to.equal(false); + expect(data.useHexIp).to.equal(false); done();