Update admin messages that change user data to skip rate limit checks
This commit is contained in:
parent
c970faa928
commit
2a73ac0af2
|
@ -18,6 +18,7 @@ lobbyRegexes:
|
|||
- ^lobby[0-9][0-9]$
|
||||
- ^lobby[0-9]$
|
||||
- ^lobby$
|
||||
- ^lobbyNaN$
|
||||
- ^test/.+$
|
||||
lobbyBackdoor: lolwutsecretlobbybackdoor
|
||||
fullChannel: test/awkward
|
||||
|
|
|
@ -8,7 +8,7 @@ import {
|
|||
ServerEvents,
|
||||
IChannelInfo,
|
||||
Notification,
|
||||
UserFlags
|
||||
UserFlags,
|
||||
} from "../util/types";
|
||||
import type { Socket } from "../ws/Socket";
|
||||
import { validateChannelSettings } from "./settings";
|
||||
|
@ -18,7 +18,7 @@ import { ChannelList } from "./ChannelList";
|
|||
import { config } from "./config";
|
||||
import { saveChatHistory, getChatHistory } from "../data/history";
|
||||
import { mixin } from "../util/helpers";
|
||||
import { readUser } from "../data/user";
|
||||
import { User } from "@prisma/client";
|
||||
|
||||
interface CachedKickban {
|
||||
userId: string;
|
||||
|
@ -45,6 +45,7 @@ export class Channel extends EventEmitter {
|
|||
|
||||
public logger: Logger;
|
||||
public bans = new Array<CachedKickban>();
|
||||
public cursorCache = new Array<{ x: string | number; y: string | number; id: string }>();
|
||||
|
||||
public crown?: Crown;
|
||||
|
||||
|
@ -66,8 +67,6 @@ export class Channel extends EventEmitter {
|
|||
// Validate settings in set
|
||||
// Set the verified settings
|
||||
|
||||
this.logger.debug("lobby me?", this.isLobby());
|
||||
|
||||
if (!this.isLobby()) {
|
||||
if (set) {
|
||||
//this.logger.debug("Passed settings:", set);
|
||||
|
@ -172,6 +171,101 @@ export class Channel extends EventEmitter {
|
|||
this.on("command", (msg, socket) => {
|
||||
// TODO commands
|
||||
});
|
||||
|
||||
this.on("user data update", (user: User) => {
|
||||
try {
|
||||
if (typeof user.name !== "string") return;
|
||||
if (typeof user.color !== "string") return;
|
||||
if (typeof user.id !== "string") return;
|
||||
if (typeof user.tag !== "undefined" && typeof user.tag !== "string") return;
|
||||
if (typeof user.flags !== "undefined" && typeof user.flags !== "string") return;
|
||||
|
||||
let tag;
|
||||
let flags;
|
||||
|
||||
try {
|
||||
tag = JSON.parse(user.tag);
|
||||
} catch (err) { }
|
||||
|
||||
try {
|
||||
flags = JSON.parse(user.flags);
|
||||
} catch (err) { }
|
||||
|
||||
for (const p of this.ppl) {
|
||||
if (p._id !== user.id) continue;
|
||||
|
||||
p._id = user.id;
|
||||
p.name = user.name;
|
||||
p.color = user.color;
|
||||
p.tag = tag;
|
||||
p.flags = flags;
|
||||
|
||||
let found;
|
||||
|
||||
for (const cursor of this.cursorCache) {
|
||||
if (cursor.id == p.id) {
|
||||
found = cursor
|
||||
}
|
||||
}
|
||||
|
||||
let x: string | number = "0.00";
|
||||
let y: string | number = "-10.00";
|
||||
|
||||
if (found) {
|
||||
x = found.x;
|
||||
y = found.y;
|
||||
}
|
||||
|
||||
this.sendArray(
|
||||
[
|
||||
{
|
||||
m: "p",
|
||||
_id: p._id,
|
||||
name: p.name,
|
||||
color: p.color,
|
||||
id: p.id,
|
||||
x: x,
|
||||
y: y
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
this.emit("update", this);
|
||||
} catch (err) {
|
||||
this.logger.error(err);
|
||||
this.logger.warn("Unable to update user");
|
||||
}
|
||||
});
|
||||
|
||||
this.on("cursor", (pos: { x: string | number; y: string | number; id: string }) => {
|
||||
let found;
|
||||
|
||||
for (const cursor of this.cursorCache) {
|
||||
if (cursor.id == pos.id) {
|
||||
found = cursor;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
// Cache the cursor pos
|
||||
this.cursorCache.push(pos);
|
||||
} else {
|
||||
// Edit the cache
|
||||
found.x = pos.x;
|
||||
found.y = pos.y;
|
||||
}
|
||||
|
||||
this.sendArray([
|
||||
{
|
||||
m: "m",
|
||||
id: pos.id,
|
||||
// not type safe
|
||||
x: pos.x as string,
|
||||
y: pos.y as string
|
||||
}
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -202,7 +296,7 @@ export class Channel extends EventEmitter {
|
|||
* Determine whether this channel is a lobby with the name "lobby" in it
|
||||
*/
|
||||
public isTrueLobby() {
|
||||
if (this.getID().match("^lobby[0-9][0-9]$") && this.getID().match("^lobby[1-9]$")) return true;
|
||||
if (this.getID().match("^lobby[0-9][0-9]$") && this.getID().match("^lobby[0-9]$") && this.getID().match("^lobby$"), "^lobbyNaN$") return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ export const config = loadConfig<ChannelConfig>("config/channels.yml", {
|
|||
visible: true
|
||||
},
|
||||
// Here's a terrifying fact: Brandon used parseInt to check lobby names
|
||||
lobbyRegexes: ["^lobby[0-9][0-9]$", "^lobby[0-9]$", "^lobby$", "^test/.+$"],
|
||||
lobbyRegexes: ["^lobby[0-9][0-9]$", "^lobby[0-9]$", "^lobby$", "^lobbyNaN$", "^test/.+$"],
|
||||
lobbyBackdoor: "lolwutsecretlobbybackdoor",
|
||||
fullChannel: "test/awkward",
|
||||
sendLimit: false,
|
||||
|
|
|
@ -318,14 +318,13 @@ export class Socket extends EventEmitter {
|
|||
const part = this.getParticipant();
|
||||
if (!part) return;
|
||||
|
||||
ch.sendArray([
|
||||
{
|
||||
m: "m",
|
||||
id: part.id,
|
||||
let pos = {
|
||||
x: this.cursorPos.x,
|
||||
y: this.cursorPos.y
|
||||
}
|
||||
]);
|
||||
y: this.cursorPos.y,
|
||||
id: this.getParticipantID()
|
||||
};
|
||||
|
||||
ch.emit("cursor", pos);
|
||||
}
|
||||
|
||||
public getCurrentChannel() {
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
import { ChannelList } from "../../../../channel/ChannelList";
|
||||
import { readUser, updateUser } from "../../../../data/user";
|
||||
import { ServerEventListener } from "../../../../util/types";
|
||||
import { findSocketsByUserID } from "../../../Socket";
|
||||
import { Logger } from "../../../../util/Logger";
|
||||
|
||||
export const color: ServerEventListener<"color"> = {
|
||||
id: "color",
|
||||
callback: async (msg, socket) => {
|
||||
// I'm not allowed to use this feature on MPP.net for a really stupid reason
|
||||
// Nevermind, fishing bot has color again
|
||||
const id = msg._id;
|
||||
const color = msg.color;
|
||||
|
||||
|
@ -19,9 +18,8 @@ export const color: ServerEventListener<"color"> = {
|
|||
user.color = color;
|
||||
await updateUser(id, user);
|
||||
|
||||
const toUpdate = findSocketsByUserID(id);
|
||||
toUpdate.forEach(s => {
|
||||
s.userset(undefined, msg.color, true);
|
||||
});
|
||||
for (const ch of ChannelList.getList()) {
|
||||
ch.emit("user data update", user);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { ChannelList } from "../../../../channel/ChannelList";
|
||||
import { readUser, updateUser } from "../../../../data/user";
|
||||
import { ServerEventListener } from "../../../../util/types";
|
||||
import { findSocketsByUserID } from "../../../Socket";
|
||||
|
@ -18,9 +19,8 @@ export const name: ServerEventListener<"name"> = {
|
|||
user.name = name;
|
||||
await updateUser(id, user);
|
||||
|
||||
const toUpdate = findSocketsByUserID(id);
|
||||
toUpdate.forEach(s => {
|
||||
s.userset(msg.name, undefined, true);
|
||||
});
|
||||
for (const ch of ChannelList.getList()) {
|
||||
ch.emit("user data update", user);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { ChannelList } from "../../../../channel/ChannelList";
|
||||
import { readUser, updateUser } from "../../../../data/user";
|
||||
import { Logger } from "../../../../util/Logger";
|
||||
import { ServerEventListener } from "../../../../util/types";
|
||||
|
@ -39,6 +40,10 @@ export const user_flag: ServerEventListener<"user_flag"> = {
|
|||
sock.setUserFlag(msg.key, msg.value);
|
||||
});
|
||||
|
||||
for (const ch of ChannelList.getList()) {
|
||||
ch.emit("user data update", user);
|
||||
}
|
||||
|
||||
// socket.getCurrentChannel()?.logger.debug("socks:", socks);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue