Prosody diagnostic: hidden secret keys from the result.

This commit is contained in:
John Livingston 2021-12-07 10:50:28 +01:00
parent 62456aead1
commit 2244ae22c2
No known key found for this signature in database
GPG Key ID: B17B5640CE66CDBC
2 changed files with 27 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import { getProsodyConfig, getWorkingDir } from '../prosody/config' import { getProsodyConfig, getProsodyConfigContentForDiagnostic, getWorkingDir } from '../prosody/config'
import { getProsodyAbout, testProsodyCorrectlyRunning } from '../prosody/ctl' import { getProsodyAbout, testProsodyCorrectlyRunning } from '../prosody/ctl'
import { newResult, TestResult } from './utils' import { newResult, TestResult } from './utils'
import { getAPIKey } from '../apikey' import { getAPIKey } from '../apikey'
@ -62,7 +62,10 @@ export async function diagProsody (test: string, options: RegisterServerOptions)
result.debug.push({ result.debug.push({
title: 'Current prosody configuration', title: 'Current prosody configuration',
message: actualContent // we have to hide secret keys and other values.
// But here, we haven't them for actualContent.
// So we will use values in wantedConfig, hopping it is enough.
message: getProsodyConfigContentForDiagnostic(wantedConfig, actualContent)
}) })
const wantedContent = wantedConfig.content const wantedContent = wantedConfig.content
@ -72,7 +75,8 @@ export async function diagProsody (test: string, options: RegisterServerOptions)
result.messages.push('Prosody configuration file content is not correct.') result.messages.push('Prosody configuration file content is not correct.')
result.debug.push({ result.debug.push({
title: 'Prosody configuration should be', title: 'Prosody configuration should be',
message: wantedContent // we have to hide secret keys and other values:
message: getProsodyConfigContentForDiagnostic(wantedConfig)
}) })
return result return result
} }

View File

@ -77,6 +77,7 @@ interface ProsodyConfig {
logByDefault: boolean logByDefault: boolean
logExpiration: ConfigLogExpiration logExpiration: ConfigLogExpiration
bots: ProsodyConfigBots bots: ProsodyConfigBots
valuesToHideInDiagnostic: {[key: string]: string}
} }
async function getProsodyConfig (options: RegisterServerOptions): Promise<ProsodyConfig> { async function getProsodyConfig (options: RegisterServerOptions): Promise<ProsodyConfig> {
const logger = options.peertubeHelpers.logger const logger = options.peertubeHelpers.logger
@ -84,6 +85,7 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
let useExternalComponents = false let useExternalComponents = false
const bots: ProsodyConfigBots = {} const bots: ProsodyConfigBots = {}
const valuesToHideInDiagnostic: {[key: string]: string} = {}
const settings = await options.settingsManager.getSettings([ const settings = await options.settingsManager.getSettings([
'prosody-port', 'prosody-port',
@ -109,6 +111,8 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
const roomType = (settings['prosody-room-type']) === 'channel' ? 'channel' : 'video' const roomType = (settings['prosody-room-type']) === 'channel' ? 'channel' : 'video'
const apikey = await getAPIKey(options) const apikey = await getAPIKey(options)
valuesToHideInDiagnostic.APIKey = apikey
let baseApiUrl = settings['prosody-peertube-uri'] as string let baseApiUrl = settings['prosody-peertube-uri'] as string
if (baseApiUrl && !/^https?:\/\/[a-z0-9.-_]+(?::\d+)?$/.test(baseApiUrl)) { if (baseApiUrl && !/^https?:\/\/[a-z0-9.-_]+(?::\d+)?$/.test(baseApiUrl)) {
throw new Error('Invalid prosody-peertube-uri') throw new Error('Invalid prosody-peertube-uri')
@ -162,7 +166,9 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
const demoBotUUIDs = parseConfigDemoBotUUIDs((settings['chat-videos-list'] as string) || '') const demoBotUUIDs = parseConfigDemoBotUUIDs((settings['chat-videos-list'] as string) || '')
if (demoBotUUIDs?.length > 0) { if (demoBotUUIDs?.length > 0) {
useExternalComponents = true useExternalComponents = true
config.useDemoBot(await getExternalComponentKey(options, 'DEMOBOT')) const componentSecret = await getExternalComponentKey(options, 'DEMOBOT')
valuesToHideInDiagnostic.ComponentSecret = componentSecret
config.useDemoBot(componentSecret)
bots.demo = demoBotUUIDs bots.demo = demoBotUUIDs
} }
@ -185,7 +191,8 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
roomType, roomType,
logByDefault, logByDefault,
logExpiration, logExpiration,
bots bots,
valuesToHideInDiagnostic
} }
} }
@ -258,10 +265,20 @@ function readLogExpiration (options: RegisterServerOptions, logExpiration: strin
} }
} }
function getProsodyConfigContentForDiagnostic (config: ProsodyConfig, content?: string): string {
let r: string = content ?? config.content
for (const key in config.valuesToHideInDiagnostic) {
// replaceAll not available, using trick:
r = r.split(config.valuesToHideInDiagnostic[key]).join(`***${key}***`)
}
return r
}
export { export {
getProsodyConfig, getProsodyConfig,
getWorkingDir, getWorkingDir,
ensureWorkingDir, ensureWorkingDir,
getProsodyFilePaths, getProsodyFilePaths,
writeProsodyConfig writeProsodyConfig,
getProsodyConfigContentForDiagnostic
} }