From b062394a485350f180b8d39b5896bb6d55b6e3db Mon Sep 17 00:00:00 2001 From: caryzxy Date: Fri, 7 Feb 2025 17:41:30 -0500 Subject: [PATCH] This one merge the changes from HW1 --- src/install.js | 77 ++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/src/install.js b/src/install.js index 89b40d7b39..4a426591bb 100644 --- a/src/install.js +++ b/src/install.js @@ -69,56 +69,52 @@ function checkSetupFlagEnv() { // Set setup values from env vars (if set) const envKeys = Object.keys(process.env); - if (Object.keys(envConfMap).some(key => envKeys.includes(key))) { - winston.info('[install/checkSetupFlagEnv] checking env vars for setup info...'); - setupVal = setupVal || {}; - - Object.entries(process.env).forEach(([evName, evValue]) => { // get setup values from env - if (evName.startsWith('NODEBB_DB_')) { - setupVal[`${process.env.NODEBB_DB}:${envConfMap[evName]}`] = evValue; - } else if (evName.startsWith('NODEBB_')) { - setupVal[envConfMap[evName]] = evValue; - } - }); - - setupVal['admin:password:confirm'] = setupVal['admin:password']; + if (!Object.keys(envConfMap).some(key => envKeys.includes(key))) { + return; } + winston.info('[install/checkSetupFlagEnv] checking env vars for setup info...'); + setupVal = setupVal || {}; + + // Process relevant environment variables + const processEnvVariable = (evName, evValue) => { + if (evName.startsWith('NODEBB_DB_')) { + setupVal[`${process.env.NODEBB_DB}:${envConfMap[evName]}`] = evValue; + } else if (evName.startsWith('NODEBB_')) { + setupVal[envConfMap[evName]] = evValue; + } + }; + + Object.entries(process.env).forEach(([evName, evValue]) => { + processEnvVariable(evName, evValue); + }); + + // Confirm admin password setup + setupVal['admin:password:confirm'] = setupVal['admin:password']; + // try to get setup values from json, if successful this overwrites all values set by env // TODO: better behaviour would be to support overrides per value, i.e. in order of priority (generic pattern): // flag, env, config file, default + const setupData = nconf.get('setup'); + if (!setupData) return; + try { - if (nconf.get('setup')) { - const setupJSON = JSON.parse(nconf.get('setup')); - setupVal = { ...setupVal, ...setupJSON }; - } + const setupJSON = JSON.parse(setupData); + setupVal = { ...setupVal, ...setupJSON }; } catch (err) { - winston.error('[install/checkSetupFlagEnv] invalid json in nconf.get(\'setup\'), ignoring setup values from json'); + winston.error('[install/checkSetupFlagEnv] invalid JSON in nconf.get(\'setup\'), ignoring setup values from JSON'); } - if (setupVal && typeof setupVal === 'object') { - if (setupVal['admin:username'] && setupVal['admin:password'] && setupVal['admin:password:confirm'] && setupVal['admin:email']) { - install.values = setupVal; - } else { - winston.error('[install/checkSetupFlagEnv] required values are missing for automated setup:'); - if (!setupVal['admin:username']) { - winston.error(' admin:username'); - } - if (!setupVal['admin:password']) { - winston.error(' admin:password'); - } - if (!setupVal['admin:password:confirm']) { - winston.error(' admin:password:confirm'); - } - if (!setupVal['admin:email']) { - winston.error(' admin:email'); - } + if (!setupVal || typeof setupVal !== 'object') return; - process.exit(); - } - } else if (nconf.get('database')) { - install.values = install.values || {}; - install.values.database = nconf.get('database'); + const requiredFields = ['admin:username', 'admin:password', 'admin:password:confirm', 'admin:email']; + const missingFields = requiredFields.filter(field => !setupVal[field]); + + if (missingFields.length === 0) { + install.values = setupVal; + } else { + winston.error('[install/checkSetupFlagEnv] required values are missing for automated setup:'); + missingFields.forEach(field => winston.error(` ${field}`)); } } @@ -261,6 +257,7 @@ async function enableDefaultTheme() { }); } + async function createDefaultUserGroups() { const groups = require('./groups'); async function createGroup(name) {