From e1937aea0272d6d903467e5499ad333bb89d9f6a Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Tue, 9 Jul 2024 10:47:28 -0400 Subject: [PATCH] Fix chown, add remove parameter to user flags --- src/util/types.d.ts | 3 ++- src/ws/events/admin/handlers/user_flag.ts | 13 +++++++++++-- src/ws/events/user/handlers/chown.ts | 12 ++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/util/types.d.ts b/src/util/types.d.ts index 6a14b0a..5fba8b7 100644 --- a/src/util/types.d.ts +++ b/src/util/types.d.ts @@ -234,7 +234,8 @@ declare interface ServerEvents { m: "user_flag"; _id: string; key: keyof UserFlags; - value: UserFlags[keyof UserFlags]; + value?: UserFlags[keyof UserFlags]; + remove?: true; }; clear_chat: { diff --git a/src/ws/events/admin/handlers/user_flag.ts b/src/ws/events/admin/handlers/user_flag.ts index 1580406..42d186b 100644 --- a/src/ws/events/admin/handlers/user_flag.ts +++ b/src/ws/events/admin/handlers/user_flag.ts @@ -1,14 +1,19 @@ import { readUser, updateUser } from "../../../../data/user"; +import { Logger } from "../../../../util/Logger"; import { ServerEventListener } from "../../../../util/types"; import { findSocketsByUserID } from "../../../Socket"; +const logger = new Logger("User flag handler"); + export const user_flag: ServerEventListener<"user_flag"> = { id: "user_flag", callback: async (msg, socket) => { // User flag modification (changing some real specific shit) if (typeof msg._id !== "string") return; if (typeof msg.key !== "string") return; - if (typeof msg.value == "undefined") return; + if (typeof msg.remove !== "boolean" && typeof msg.value == "undefined") { + return + } // socket.getCurrentChannel()?.logger.debug(msg); @@ -18,7 +23,11 @@ export const user_flag: ServerEventListener<"user_flag"> = { // Set the flag const flags = JSON.parse(user.flags); - flags[msg.key] = msg.value; + if (msg.remove === true) { + delete flags[msg.key]; + } else { + flags[msg.key] = msg.value; + } user.flags = JSON.stringify(flags); // Save the user data diff --git a/src/ws/events/user/handlers/chown.ts b/src/ws/events/user/handlers/chown.ts index 9954cd9..54cf4da 100644 --- a/src/ws/events/user/handlers/chown.ts +++ b/src/ws/events/user/handlers/chown.ts @@ -7,22 +7,18 @@ export const chown: ServerEventListener<"chown"> = { id: "chown", callback: (msg, socket) => { // Change channel ownership - if (typeof msg.id == "undefined") return; - - const ch = socket.getCurrentChannel(); if (!ch) return; - if (!socket.isOwner()) return; - if (!ch.crown) { // TODO Crown admin stuff } else { if (!ch.crown.canBeSetBy(socket)) return; - const heir = ch.getParticipantList().find(p => p.id == msg.id); - if (!heir) return; - + // This user may not always exist, + // but sometimes we don't provide a user + // to drop the crown + let heir = ch.getParticipantList().find(p => p.id == msg.id); ch.chown(heir); } }