From 887e6f6772ba32c8bb3a2a4bd2e7db05c914f719 Mon Sep 17 00:00:00 2001 From: gnuxie Date: Tue, 9 Jan 2024 12:24:48 +0000 Subject: [PATCH] AppService: resolve `config.adminRoom` correctly. There should really be a dedicated config parser for both appservice and bot config. --- src/appservice/AppService.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/appservice/AppService.ts b/src/appservice/AppService.ts index c0bc8ca7..d604cbd0 100644 --- a/src/appservice/AppService.ts +++ b/src/appservice/AppService.ts @@ -35,7 +35,7 @@ import { AppserviceCommandHandler } from "./bot/AppserviceCommandHandler"; import { SOFTWARE_VERSION } from "../config"; import { Registry } from 'prom-client'; import { DefaultStateTrackingMeta, RoomStateManagerFactory, resolveRoomReferenceSafe } from "matrix-protection-suite-for-matrix-bot-sdk"; -import { ClientsInRoomMap, DefaultEventDecoder, EventDecoder, StandardClientsInRoomMap, StringUserID, isError } from "matrix-protection-suite"; +import { ClientsInRoomMap, DefaultEventDecoder, EventDecoder, MatrixRoomReference, StandardClientsInRoomMap, StringUserID, isError, isStringRoomAlias, isStringRoomID } from "matrix-protection-suite"; import { AppServiceDraupnirManager } from "./AppServiceDraupnirManager"; const log = new Logger("AppService"); @@ -94,7 +94,20 @@ export class MjolnirAppService { disableStores: true, }); await bridge.initialise(); - const accessControlRoom = await resolveRoomReferenceSafe(bridge.getBot().getClient(), config.adminRoom); + const adminRoom = (() => { + if (isStringRoomID(config.adminRoom)) { + return MatrixRoomReference.fromRoomID(config.adminRoom); + } else if (isStringRoomAlias(config.adminRoom)) { + return MatrixRoomReference.fromRoomIDOrAlias(config.adminRoom); + } else { + const parseResult = MatrixRoomReference.fromPermalink(config.adminRoom); + if (isError(parseResult)) { + throw new TypeError(`${config.adminRoom} needs to be a room id, alias or permalink`); + } + return parseResult.ok; + } + })(); + const accessControlRoom = await resolveRoomReferenceSafe(bridge.getBot().getClient(), adminRoom); if (isError(accessControlRoom)) { throw accessControlRoom.error; }