fix turn passwords when auth is enabled

This commit is contained in:
Elijah R
2024-08-09 22:38:32 -04:00
parent dbb0e92559
commit 2b50d4c834
3 changed files with 21 additions and 16 deletions

View File

@@ -355,7 +355,7 @@ export default class CollabVMServer {
client.onMsgSent(); client.onMsgSent();
break; break;
case 'turn': case 'turn':
if ((!this.turnsAllowed || this.Config.collabvm.turnwhitelist) && client.rank !== Rank.Admin && client.rank !== Rank.Moderator && client.rank !== Rank.Turn) return; if ((!this.turnsAllowed || this.Config.collabvm.turnwhitelist) && client.rank !== Rank.Admin && client.rank !== Rank.Moderator && !client.turnWhitelist) return;
if (this.Config.auth.enabled && client.rank === Rank.Unregistered && !this.Config.auth.guestPermissions.turn) { if (this.Config.auth.enabled && client.rank === Rank.Unregistered && !this.Config.auth.guestPermissions.turn) {
client.sendMsg(cvm.guacEncode('chat', '', 'You need to login to do that.')); client.sendMsg(cvm.guacEncode('chat', '', 'You need to login to do that.'));
return; return;
@@ -419,7 +419,7 @@ export default class CollabVMServer {
break; break;
case 'vote': case 'vote':
if (!this.VM.SnapshotsSupported()) return; if (!this.VM.SnapshotsSupported()) return;
if ((!this.turnsAllowed || this.Config.collabvm.turnwhitelist) && client.rank !== Rank.Admin && client.rank !== Rank.Moderator && client.rank !== Rank.Turn) return; if ((!this.turnsAllowed || this.Config.collabvm.turnwhitelist) && client.rank !== Rank.Admin && client.rank !== Rank.Moderator && !client.turnWhitelist) return;
if (!client.connectedToNode) return; if (!client.connectedToNode) return;
if (msgArr.length !== 2) return; if (msgArr.length !== 2) return;
if (!client.VoteRateLimit.request()) return; if (!client.VoteRateLimit.request()) return;
@@ -481,25 +481,31 @@ export default class CollabVMServer {
switch (msgArr[1]) { switch (msgArr[1]) {
case '2': case '2':
// Login // Login
if (this.Config.auth.enabled) {
client.sendMsg(cvm.guacEncode('chat', '', 'This server does not support staff passwords. Please log in to become staff.'));
return;
}
if (!client.LoginRateLimit.request() || !client.username) return; if (!client.LoginRateLimit.request() || !client.username) return;
if (msgArr.length !== 3) return; if (msgArr.length !== 3) return;
var sha256 = createHash('sha256'); var sha256 = createHash('sha256');
sha256.update(msgArr[2]); sha256.update(msgArr[2]);
var pwdHash = sha256.digest('hex'); var pwdHash = sha256.digest('hex');
sha256.destroy(); sha256.destroy();
if (this.Config.collabvm.turnwhitelist && pwdHash === this.Config.collabvm.turnpass) {
client.turnWhitelist = true;
client.sendMsg(cvm.guacEncode('chat', '', 'You may now take turns.'));
return;
}
if (this.Config.auth.enabled) {
client.sendMsg(cvm.guacEncode('chat', '', 'This server does not support staff passwords. Please log in to become staff.'));
return;
}
if (pwdHash === this.Config.collabvm.adminpass) { if (pwdHash === this.Config.collabvm.adminpass) {
client.rank = Rank.Admin; client.rank = Rank.Admin;
client.sendMsg(cvm.guacEncode('admin', '0', '1')); client.sendMsg(cvm.guacEncode('admin', '0', '1'));
} else if (this.Config.collabvm.moderatorEnabled && pwdHash === this.Config.collabvm.modpass) { } else if (this.Config.collabvm.moderatorEnabled && pwdHash === this.Config.collabvm.modpass) {
client.rank = Rank.Moderator; client.rank = Rank.Moderator;
client.sendMsg(cvm.guacEncode('admin', '0', '3', this.ModPerms.toString())); client.sendMsg(cvm.guacEncode('admin', '0', '3', this.ModPerms.toString()));
} else if (this.Config.collabvm.turnwhitelist && pwdHash === this.Config.collabvm.turnpass) {
client.rank = Rank.Turn;
client.sendMsg(cvm.guacEncode('chat', '', 'You may now take turns.'));
} else { } else {
client.sendMsg(cvm.guacEncode('admin', '0', '0')); client.sendMsg(cvm.guacEncode('admin', '0', '0'));
return; return;

View File

@@ -22,6 +22,7 @@ export class User {
Config: IConfig; Config: IConfig;
IP: IPData; IP: IPData;
Capabilities: CollabVMCapabilities; Capabilities: CollabVMCapabilities;
turnWhitelist: boolean = false;
// Hide flag. Only takes effect if the user is logged in. // Hide flag. Only takes effect if the user is logged in.
noFlag: boolean = false; noFlag: boolean = false;
countryCode: string | null = null; countryCode: string | null = null;
@@ -153,6 +154,4 @@ export enum Rank {
Registered = 1, Registered = 1,
Admin = 2, Admin = 2,
Moderator = 3, Moderator = 3,
// Giving a good gap between server only internal ranks just in case
Turn = 10
} }

View File

@@ -41,14 +41,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@computernewb/superqemu@npm:^0.2.2": "@computernewb/superqemu@npm:^0.2.3":
version: 0.2.2 version: 0.2.3
resolution: "@computernewb/superqemu@npm:0.2.2" resolution: "@computernewb/superqemu@npm:0.2.3"
dependencies: dependencies:
"@computernewb/nodejs-rfb": "npm:^0.3.0" "@computernewb/nodejs-rfb": "npm:^0.3.0"
execa: "npm:^8.0.1" execa: "npm:^8.0.1"
pino: "npm:^9.3.1" pino: "npm:^9.3.1"
checksum: 10c0/db4bfed554661544028e4fa41f1869adf64292ffe2864a807e8dc0c0f1c3538cfef72292d202a8dad8ab2c066b54b3296c9456e64ea685b07a981fed89d8d6c5 checksum: 10c0/70d63278f4cdd6e5521a9bf62b9492380c96a94dcbb2e719e7396a4139c4238560ad7deea86ea163af6fc8c526b9f658e7f5e7586391fe4b57f5257467a16eb1
languageName: node languageName: node
linkType: hard linkType: hard
@@ -76,7 +76,7 @@ __metadata:
resolution: "@cvmts/cvmts@workspace:cvmts" resolution: "@cvmts/cvmts@workspace:cvmts"
dependencies: dependencies:
"@computernewb/nodejs-rfb": "npm:^0.3.0" "@computernewb/nodejs-rfb": "npm:^0.3.0"
"@computernewb/superqemu": "npm:^0.2.2" "@computernewb/superqemu": "npm:^0.2.3"
"@cvmts/cvm-rs": "npm:*" "@cvmts/cvm-rs": "npm:*"
"@maxmind/geoip2-node": "npm:^5.0.0" "@maxmind/geoip2-node": "npm:^5.0.0"
"@types/node": "npm:^20.12.5" "@types/node": "npm:^20.12.5"