add Permissions#set

This avoids constructing a Permissions just to reset it, when we can just set it to nothing

Also contains some var->let or var->const work
This commit is contained in:
modeco80 2024-03-12 03:02:02 -04:00
parent acd2b949b8
commit 7691b84073
4 changed files with 40 additions and 36 deletions

View File

@ -75,7 +75,7 @@ interface KeyCodeKeysyms {
[key: number]: number[] | null;
}
var keycodeKeysyms: KeyCodeKeysyms = {
const keycodeKeysyms: KeyCodeKeysyms = {
8: [0xff08], // backspace
9: [0xff09], // tab
12: [0xff0b, 0xff0b, 0xff0b, 0xffb5], // clear / KP 5
@ -132,7 +132,7 @@ var keycodeKeysyms: KeyCodeKeysyms = {
225: [0xfe03] // altgraph (iso_level3_shift)
};
var keyidentifier_keysym: KeyIdentifierKeysym = {
const keyidentifier_keysym: KeyIdentifierKeysym = {
Again: [0xff66],
AllCandidates: [0xff3d],
Alphanumeric: [0xff30],

View File

@ -395,7 +395,7 @@ function closeVM() {
users.splice(0, users.length);
elements.userlist.innerHTML = '';
rank = Rank.Unregistered;
perms = new Permissions(0);
perms.set(0);
w.VMName = null;
// Reset admin and vote panels
elements.staffbtns.style.display = 'none';

View File

@ -129,7 +129,7 @@ export default class CollabVMClient {
(e: KeyboardEvent) => {
e.preventDefault();
if (this.users.find((u) => u.username === this.username)?.turn === -1 && this.rank !== Rank.Admin) return;
var keysym = GetKeysym(e.keyCode, e.key, e.location);
let keysym = GetKeysym(e.keyCode, e.key, e.location);
if (keysym === null) return;
this.key(keysym, true);
},
@ -143,7 +143,7 @@ export default class CollabVMClient {
(e: KeyboardEvent) => {
e.preventDefault();
if (this.users.find((u) => u.username === this.username)?.turn === -1 && this.rank !== Rank.Admin) return;
var keysym = GetKeysym(e.keyCode, e.key, e.location);
let keysym = GetKeysym(e.keyCode, e.key, e.location);
if (keysym === null) return;
this.key(keysym, false);
},
@ -188,7 +188,7 @@ export default class CollabVMClient {
// Fires on WebSocket message
private onMessage(event: MessageEvent) {
var msgArr: string[];
let msgArr: string[];
try {
msgArr = Guacutils.decode(event.data);
} catch (e) {
@ -220,7 +220,7 @@ export default class CollabVMClient {
}
case 'png': {
// Despite the opcode name, this is actually JPEG, because old versions of the server used PNG and yknow backwards compatibility
var img = new Image();
let img = new Image();
img.addEventListener('load', () => {
this.ctx.drawImage(img, parseInt(msgArr[3]), parseInt(msgArr[4]));
});
@ -228,14 +228,14 @@ export default class CollabVMClient {
break;
}
case 'chat': {
for (var i = 1; i < msgArr.length; i += 2) {
for (let i = 1; i < msgArr.length; i += 2) {
this.publicEmitter.emit('chat', msgArr[i], msgArr[i + 1]);
}
break;
}
case 'adduser': {
for (var i = 2; i < msgArr.length; i += 2) {
var _user = this.users.find((u) => u.username === msgArr[i]);
for (let i = 2; i < msgArr.length; i += 2) {
let _user = this.users.find((u) => u.username === msgArr[i]);
if (_user !== undefined) {
_user.rank = parseInt(msgArr[i + 1]);
} else {
@ -247,16 +247,16 @@ export default class CollabVMClient {
break;
}
case 'remuser': {
for (var i = 2; i < msgArr.length; i++) {
var _user = this.users.find((u) => u.username === msgArr[i]);
for (let i = 2; i < msgArr.length; i++) {
let _user = this.users.find((u) => u.username === msgArr[i]);
if (_user === undefined) continue;
this.users.splice(this.users.indexOf(_user), 1);
this.publicEmitter.emit('remuser', _user);
}
}
case 'rename': {
var selfrename = false;
var oldusername: string | null = null;
let selfrename = false;
let oldusername: string | null = null;
// We've been renamed
if (msgArr[1] === '0') {
selfrename = true;
@ -279,7 +279,7 @@ export default class CollabVMClient {
}
this.username = msgArr[3];
} else oldusername = msgArr[2];
var _user = this.users.find((u) => u.username === oldusername);
let _user = this.users.find((u) => u.username === oldusername);
if (_user) {
_user.username = msgArr[3];
}
@ -288,8 +288,8 @@ export default class CollabVMClient {
}
case 'turn': {
// Reset all turn data
for (var user of this.users) user.turn = -1;
var queuedUsers = parseInt(msgArr[2]);
for (let user of this.users) user.turn = -1;
let queuedUsers = parseInt(msgArr[2]);
if (queuedUsers === 0) {
this.publicEmitter.emit('turn', {
user: null,
@ -299,12 +299,12 @@ export default class CollabVMClient {
});
return;
}
var currentTurn = this.users.find((u) => u.username === msgArr[3])!;
let currentTurn = this.users.find((u) => u.username === msgArr[3])!;
currentTurn.turn = 0;
var queue: User[] = [];
let queue: User[] = [];
if (queuedUsers > 1) {
for (var i = 1; i < queuedUsers; i++) {
var user = this.users.find((u) => u.username === msgArr[i + 3])!;
for (let i = 1; i < queuedUsers; i++) {
let user = this.users.find((u) => u.username === msgArr[i + 3])!;
queue.push(user);
user.turn = i;
}
@ -323,9 +323,9 @@ export default class CollabVMClient {
// Vote started
case '1':
// Vote updated
var timeToEnd = parseInt(msgArr[2]);
var yesVotes = parseInt(msgArr[3]);
var noVotes = parseInt(msgArr[4]);
let timeToEnd = parseInt(msgArr[2]);
let yesVotes = parseInt(msgArr[3]);
let noVotes = parseInt(msgArr[4]);
// Some server implementations dont send data for status 0, and some do
if (Number.isNaN(timeToEnd) || Number.isNaN(yesVotes) || Number.isNaN(noVotes)) return;
this.voteStatus = {
@ -355,11 +355,11 @@ export default class CollabVMClient {
this.publicEmitter.emit('badpw');
return;
case '1':
this.perms = new Permissions(65535);
this.perms.set(65535);
this.rank = Rank.Admin;
break;
case '3':
this.perms = new Permissions(parseInt(msgArr[3]));
this.perms.set(parseInt(msgArr[3]));
this.rank = Rank.Moderator;
break;
}
@ -395,11 +395,11 @@ export default class CollabVMClient {
// Get a list of all VMs
list(): Promise<VM[]> {
return new Promise((res, rej) => {
var u = this.onInternal('list', (list: string[]) => {
let u = this.onInternal('list', (list: string[]) => {
u();
var vms: VM[] = [];
for (var i = 0; i < list.length; i += 3) {
var th = new Image();
let vms: VM[] = [];
for (let i = 0; i < list.length; i += 3) {
let th = new Image();
th.src = 'data:image/jpeg;base64,' + list[i + 2];
vms.push({
url: this.url,
@ -417,7 +417,7 @@ export default class CollabVMClient {
// Connect to a node
connect(id: string, username: string | null = null): Promise<boolean> {
return new Promise((res) => {
var u = this.onInternal('connect', (success: boolean) => {
let u = this.onInternal('connect', (success: boolean) => {
u();
res(success);
});
@ -535,9 +535,9 @@ export default class CollabVMClient {
getip(user: string) {
if (this.users.find((u) => u.username === user) === undefined) return false;
return new Promise<string>((res) => {
var u = this.onInternal('ip', (username: string, ip: string) => {
let unsubscribe = this.onInternal('ip', (username: string, ip: string) => {
if (username !== user) return;
u();
unsubscribe();
res(ip);
});
this.send('admin', AdminOpcode.GetIP, user);
@ -547,8 +547,8 @@ export default class CollabVMClient {
// QEMU Monitor
qemuMonitor(cmd: string) {
return new Promise<string>((res) => {
var u = this.onInternal('qemu', (output) => {
u();
let unsubscribe = this.onInternal('qemu', (output) => {
unsubscribe();
res(output);
});
this.send('admin', AdminOpcode.MonitorCommand, this.node!, cmd);

View File

@ -11,6 +11,10 @@ export class Permissions {
xss: boolean = false;
constructor(mask: number) {
this.set(mask);
}
set(mask: number) {
this.restore = (mask & 1) !== 0;
this.reboot = (mask & 2) !== 0;
this.ban = (mask & 4) !== 0;
@ -21,7 +25,7 @@ export class Permissions {
this.rename = (mask & 128) !== 0;
this.grabip = (mask & 256) !== 0;
this.xss = (mask & 512) !== 0;
}
}
}
export enum Rank {