From cf3007b744187a8338d8bb395652cfe7bf8b8808 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 23 Mar 2025 09:06:08 -0700 Subject: [PATCH] chore: update config when admin changes their name (#1298) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1298 --- src/controllers/custom/renameAccountController.ts | 13 ++++++++++++- src/index.ts | 10 +++++++--- src/services/configService.ts | 13 +++++++++---- src/services/loginService.ts | 8 +------- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/controllers/custom/renameAccountController.ts b/src/controllers/custom/renameAccountController.ts index c5b733e8..d30b44ae 100644 --- a/src/controllers/custom/renameAccountController.ts +++ b/src/controllers/custom/renameAccountController.ts @@ -1,5 +1,6 @@ import { RequestHandler } from "express"; -import { getAccountForRequest, isNameTaken } from "@/src/services/loginService"; +import { getAccountForRequest, isAdministrator, isNameTaken } from "@/src/services/loginService"; +import { config, saveConfig } from "@/src/services/configService"; export const renameAccountController: RequestHandler = async (req, res) => { const account = await getAccountForRequest(req); @@ -7,8 +8,18 @@ export const renameAccountController: RequestHandler = async (req, res) => { if (await isNameTaken(req.query.newname)) { res.status(409).json("Name already in use"); } else { + if (isAdministrator(account)) { + for (let i = 0; i != config.administratorNames!.length; ++i) { + if (config.administratorNames![i] == account.DisplayName) { + config.administratorNames![i] = req.query.newname; + } + } + await saveConfig(); + } + account.DisplayName = req.query.newname; await account.save(); + res.end(); } } else { diff --git a/src/index.ts b/src/index.ts index 4f7fc939..f540f96e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,9 +19,13 @@ import mongoose from "mongoose"; return "" + this.toString() + ""; }; const og_stringify = JSON.stringify; - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access - (JSON as any).stringify = (obj: any): string => { - return og_stringify(obj).split(`"`).join(``).split(`"`).join(``); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + JSON.stringify = (obj: any, replacer?: any, space?: string | number): string => { + return og_stringify(obj, replacer as string[], space) + .split(`"`) + .join(``) + .split(`"`) + .join(``); }; } diff --git a/src/services/configService.ts b/src/services/configService.ts index 66c50dda..114eccc9 100644 --- a/src/services/configService.ts +++ b/src/services/configService.ts @@ -34,7 +34,7 @@ interface IConfig { httpsPort?: number; myIrcAddresses?: string[]; NRS?: string[]; - administratorNames?: string[] | string; + administratorNames?: string[]; autoCreateAccount?: boolean; skipTutorial?: boolean; skipAllDialogue?: boolean; @@ -83,10 +83,15 @@ export const updateConfig = async (data: string): Promise => { Object.assign(config, JSON.parse(data)); }; +export const saveConfig = async (): Promise => { + amnesia = true; + await fsPromises.writeFile(configPath, JSON.stringify(config, null, 2)); +}; + export const validateConfig = (): void => { if (typeof config.administratorNames == "string") { - logger.warn( - `"administratorNames" should be an array; please add square brackets: ["${config.administratorNames}"]` - ); + logger.info(`Updating config.json to make administratorNames an array.`); + config.administratorNames = [config.administratorNames]; + void saveConfig(); } }; diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 6509d8be..c69e891d 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -93,13 +93,7 @@ export const getAccountIdForRequest = async (req: Request): Promise => { }; export const isAdministrator = (account: TAccountDocument): boolean => { - if (!config.administratorNames) { - return false; - } - if (typeof config.administratorNames == "string") { - return config.administratorNames == account.DisplayName; - } - return !!config.administratorNames.find(x => x == account.DisplayName); + return !!config.administratorNames?.find(x => x == account.DisplayName); }; const platform_magics = [753, 639, 247, 37, 60];