From 9ec7167da11668a1b6282a04a5c66d1c2b467fe4 Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 29 Feb 2024 15:58:41 +0100 Subject: [PATCH] Debug Mode: new option to promote some JIDs as admins on the MUC component. --- CHANGELOG.md | 1 + server/lib/debug.ts | 24 ++++++++++++++++++++++-- server/lib/prosody/config.ts | 6 ++++++ server/lib/prosody/config/content.ts | 6 ++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afae8d33..0dbd94bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## ??? (Not Released Yet) * Fix mod_muc_slow_mode: add min value for slow_mode_duration field. +* Debug Mode: new option to promote some JIDs as admins on the MUC component. ## 8.3.1 diff --git a/server/lib/debug.ts b/server/lib/debug.ts index 1d9da72c..bb4063ed 100644 --- a/server/lib/debug.ts +++ b/server/lib/debug.ts @@ -18,6 +18,7 @@ interface DebugContent { prosodyDebuggerOptions?: ProsodyDebuggerOptions alwaysPublishXMPPRoom?: boolean enablePodcastChatTagForNonLive?: boolean + mucAdmins?: string[] } type DebugNumericValue = 'renewCertCheckInterval' @@ -63,6 +64,7 @@ function _readDebugFile (options: RegisterServerOptions): DebugContent | false { debugContent.remoteServerInfosMaxAge = _getNumericOptions(options, json, 'remote_server_infos_max_age') debugContent.alwaysPublishXMPPRoom = json.always_publish_xmpp_room === true debugContent.enablePodcastChatTagForNonLive = json.enable_podcast_chat_tag_for_nonlive === true + debugContent.mucAdmins = _getJIDs(options, json, 'muc_admins') } catch (err) { logger.error('Failed to read the debug_mode file content:', err) } @@ -101,6 +103,17 @@ function _getNumericOptions (options: RegisterServerOptions, json: any, name: st return json[name] } +function _getJIDs (options: RegisterServerOptions, json: any, name: string): string[] | undefined { + if (!(name in json)) { return undefined } + const v = json[name] + if (!Array.isArray(v)) { return undefined } + return v.filter(jid => { + if (typeof jid !== 'string') { return false } + if (!/^[a-zA-Z0-9_.-]+(?:@[a-zA-Z0-9_.-]+)?$/.test(jid)) { return false } + return true + }) +} + function unloadDebugMode (): void { debugContent = null } @@ -130,7 +143,7 @@ function isDebugMode (options: RegisterServerOptions, feature?: DebugBooleanValu */ function prosodyDebuggerOptions (options: RegisterServerOptions): false | ProsodyDebuggerOptions { // Additional security: testing NODE_ENV. - // It should absolutly not be possible to enable Prosody debugger on production ev. + // It should absolutly not be possible to enable Prosody debugger on production env. if (process.env.NODE_ENV !== 'dev') { return false } const debugContent = _readDebugFile(options) if (debugContent === false) { return false } @@ -198,10 +211,17 @@ function debugNumericParameter ( return defaultDebug } +function debugMucAdmins (options: RegisterServerOptions): string[] | undefined { + const debugContent = _readDebugFile(options) + if (!debugContent) { return undefined } + return debugContent.mucAdmins +} + export { unloadDebugMode, isDebugMode, prosodyDebuggerOptions, disableLuaUnboundIfNeeded, - debugNumericParameter + debugNumericParameter, + debugMucAdmins } diff --git a/server/lib/prosody/config.ts b/server/lib/prosody/config.ts index 2ff81527..de8101f9 100644 --- a/server/lib/prosody/config.ts +++ b/server/lib/prosody/config.ts @@ -12,6 +12,7 @@ import { getAPIKey } from '../apikey' import { parseExternalComponents } from './config/components' import { getRemoteServerInfosDir } from '../federation/storage' import { BotConfiguration } from '../configuration/bot' +import { debugMucAdmins } from '../debug' async function getWorkingDir (options: RegisterServerOptions): Promise { const peertubeHelpers = options.peertubeHelpers @@ -326,6 +327,11 @@ async function getProsodyConfig (options: RegisterServerOptionsV5): Promise