diff --git a/config.example.toml b/config.example.toml index c37c86d..ab7d5a6 100644 --- a/config.example.toml +++ b/config.example.toml @@ -21,6 +21,9 @@ secretKey = "hunter2" [auth.guestPermissions] chat = true turn = false +callForReset = false +vote = true + [vm] qemuArgs = "qemu-system-x86_64" diff --git a/cvmts/src/IConfig.ts b/cvmts/src/IConfig.ts index 5390386..5d0f98a 100644 --- a/cvmts/src/IConfig.ts +++ b/cvmts/src/IConfig.ts @@ -15,6 +15,8 @@ export default interface IConfig { guestPermissions: { chat: boolean; turn: boolean; + callForReset: boolean; + vote: boolean; }; }; vm: { diff --git a/cvmts/src/WSServer.ts b/cvmts/src/WSServer.ts index 78c6d3d..1194ac5 100644 --- a/cvmts/src/WSServer.ts +++ b/cvmts/src/WSServer.ts @@ -36,9 +36,6 @@ type VoteTally = { no: number; }; - - - export default class WSServer { private Config: IConfig; @@ -489,18 +486,35 @@ export default class WSServer { switch (msgArr[1]) { case '1': if (!this.voteInProgress) { + if (this.Config.auth.enabled && client.rank === Rank.Unregistered && !this.Config.auth.guestPermissions.callForReset) { + client.sendMsg(guacutils.encode('chat', '', 'You need to login to do that.')); + return; + } + if (this.voteCooldown !== 0) { client.sendMsg(guacutils.encode('vote', '3', this.voteCooldown.toString())); return; } this.startVote(); this.clients.forEach((c) => c.sendMsg(guacutils.encode('chat', '', `${client.username} has started a vote to reset the VM.`))); - } else if (client.IP.vote !== true) this.clients.forEach((c) => c.sendMsg(guacutils.encode('chat', '', `${client.username} has voted yes.`))); + } + if (this.Config.auth.enabled && client.rank === Rank.Unregistered && !this.Config.auth.guestPermissions.vote) { + client.sendMsg(guacutils.encode('chat', '', 'You need to login to do that.')); + return; + } else if (client.IP.vote !== true) { + this.clients.forEach((c) => c.sendMsg(guacutils.encode('chat', '', `${client.username} has voted yes.`))); + } client.IP.vote = true; break; case '0': if (!this.voteInProgress) return; - if (client.IP.vote !== false) this.clients.forEach((c) => c.sendMsg(guacutils.encode('chat', '', `${client.username} has voted no.`))); + if (this.Config.auth.enabled && client.rank === Rank.Unregistered && !this.Config.auth.guestPermissions.vote) { + client.sendMsg(guacutils.encode('chat', '', 'You need to login to do that.')); + return; + } + if (client.IP.vote !== false) { + this.clients.forEach((c) => c.sendMsg(guacutils.encode('chat', '', `${client.username} has voted no.`))); + } client.IP.vote = false; break; }