diff --git a/SettingsHelper.js b/SettingsHelper.js index 2f130d18..37122714 100644 --- a/SettingsHelper.js +++ b/SettingsHelper.js @@ -79,6 +79,67 @@ module.exports = function () { // console.log(`Settings: '${settings[setting.local]}'; '${setting.default}'`); output[setting.local] = args[setting.env] || args[setting.local] || process.env[setting.env] || process.env[setting.local] || settings[setting.env] || settings[setting.local] || setting.default; + // Make sure these settings are properly formatted + if(output[setting.local]) { + // Make sure these settings are properly formatted to JSON + let jsonSettings = ['authentication', 'customServer']; + if(jsonSettings.includes(setting.local) && output[setting.local]) { + if(typeof output[setting.local] !== "object") { + console.log(`${setting.local}/${setting.env} must be a JSON object. Attempting to convert it for you.`); + try { + let parsed = JSON.parse(output[setting.local]); + output[setting.local] = parsed; + } + catch(e) { + console.log(`- Unable to parse '${output[setting.local]}'`); + console.log(`- Please check your syntax. Reverting to default.`); + } + console.log(`- Done.`); + } + } + // Make sure these settings are properly formatted to an Array + // This currently is only coded to handle the servers setting which is an Array of JSON objects + let arraySettings = ['servers']; + if(arraySettings.includes(setting.local)) { + if(!Array.isArray(output[setting.local])) { + console.log(`${setting.local}/${setting.env} must be an Array of JSON objects. Attempting to convert it for you.`); + + let temp = output[setting.local].trim(); + + temp = temp.replace("[", ""); + temp = temp.replace("]", ""); + let tempArr = temp.split("},"); + + if(tempArr.length > 0) { + let tempOutArr = []; + tempArr.forEach(element => { + try { + if(!element.endsWith('}')) { + element = element + '}'; + } + let parsed = JSON.parse(element); + + tempOutArr.push(parsed); + } + catch(e) { + console.log(`- Unable to parse '${element}'`); + console.log(`- Please check your syntax. Skipping...`); + } + }); + + if(tempOutArr.length == 0) { + console.log(`- No elements to use. Reverting to default.`); + } + output[setting.local] = tempOutArr; + } + else { + console.log(`No array elements found =(. Reverting to default.`); + output[setting.local] = setting.default; + } + console.log(`- Done.`); + } + } + } // Backwards compatibilty for PORT ENV setting if(setting.local == 'webapp_port' && output[setting.local] == 8088) { let port = args['PORT'] || process.env['PORT'] || settings['PORT']; @@ -92,17 +153,20 @@ module.exports = function () { if ((setting.local == 'webroot' || setting.local == 'accessUrl') && output[setting.local].endsWith("/")) { console.log(`${setting.local}/${setting.env} should not end in '/'. Removing trailing slash(es) for you.`); output[setting.local] = output[setting.local].replace(/\/+$/, ""); + console.log(`- Done.`); } // Add leading slash, if not provided if (setting.local == 'webroot' && output[setting.local].length > 1 && !output[setting.local].startsWith("/")) { console.log(`${setting.local}/${setting.env} should always start with '/'. Adding the leading slash for you.`); // Make sure it starts with one leading slash output[setting.local] = `/${output[setting.local]}`; + console.log(`- Done.`); } // Make sure 'webroot' and 'serverroot' aren't set to '/'. Revert to default if they do. if ((setting.local == 'webroot' || setting.local == 'serverroot') && output[setting.local] == '/') { console.log(`${setting.local}/${setting.env} cannot be set to '/'. Reverting to default: '${setting.default}'`); output[setting.local] = setting.default; + console.log(`- Done.`); } process.env[setting.env] = output[setting.local]; }