2017-09-22 12:24:15 +02:00
|
|
|
import Vulcan from './config.js';
|
|
|
|
import flatten from 'flat';
|
2017-09-18 09:09:43 +02:00
|
|
|
|
2018-01-26 18:07:50 -06:00
|
|
|
const getNestedProperty = function (obj, desc) {
|
|
|
|
var arr = desc.split(".");
|
|
|
|
while(arr.length && (obj = obj[arr.shift()]));
|
|
|
|
return obj;
|
|
|
|
};
|
|
|
|
|
2017-09-18 09:09:43 +02:00
|
|
|
export const Settings = {};
|
|
|
|
|
2017-09-22 12:24:15 +02:00
|
|
|
export const getAllSettings = () => {
|
|
|
|
|
|
|
|
const settingsObject = {};
|
|
|
|
|
|
|
|
let rootSettings = _.clone(Meteor.settings);
|
|
|
|
delete rootSettings.public;
|
|
|
|
delete rootSettings.private;
|
|
|
|
|
|
|
|
// root settings & private settings are both private
|
|
|
|
rootSettings = flatten(rootSettings, {safe: true});
|
|
|
|
const privateSettings = flatten(Meteor.settings.private || {}, {safe: true});
|
|
|
|
|
|
|
|
// public settings
|
|
|
|
const publicSettings = flatten(Meteor.settings.public || {}, {safe: true});
|
|
|
|
|
|
|
|
// registered default values
|
|
|
|
const registeredSettings = Settings;
|
|
|
|
|
|
|
|
const allSettingKeys = _.union(_.keys(rootSettings), _.keys(publicSettings), _.keys(privateSettings), _.keys(registeredSettings));
|
|
|
|
|
|
|
|
allSettingKeys.sort().forEach(key => {
|
|
|
|
|
|
|
|
settingsObject[key] = {};
|
|
|
|
|
2017-10-05 09:14:42 +09:00
|
|
|
if (typeof rootSettings[key] !== 'undefined') {
|
|
|
|
settingsObject[key].value = rootSettings[key];
|
|
|
|
} else if (typeof privateSettings[key] !== 'undefined') {
|
|
|
|
settingsObject[key].value = privateSettings[key];
|
|
|
|
} else if (typeof publicSettings[key] !== 'undefined') {
|
|
|
|
settingsObject[key].value = publicSettings[key];
|
2017-09-22 12:24:15 +02:00
|
|
|
}
|
|
|
|
|
2017-10-05 09:14:42 +09:00
|
|
|
if (typeof publicSettings[key] !== 'undefined'){
|
2018-02-05 10:44:56 +09:00
|
|
|
settingsObject[key].isPublic = true;
|
2017-09-22 12:24:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (registeredSettings[key]) {
|
|
|
|
if (registeredSettings[key].defaultValue !== null || registeredSettings[key].defaultValue !== undefined) settingsObject[key].defaultValue = registeredSettings[key].defaultValue;
|
|
|
|
if (registeredSettings[key].description) settingsObject[key].description = registeredSettings[key].description;
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return _.map(settingsObject, (setting, key) => ({name: key, ...setting}));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Vulcan.showSettings = () => {
|
|
|
|
return getAllSettings();
|
|
|
|
}
|
|
|
|
|
2018-02-05 10:44:56 +09:00
|
|
|
export const registerSetting = (settingName, defaultValue, description, isPublic) => {
|
|
|
|
Settings[settingName] = { defaultValue, description, isPublic };
|
2017-09-22 12:24:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export const getSetting = (settingName, settingDefault) => {
|
2017-09-18 09:09:43 +02:00
|
|
|
|
|
|
|
let setting;
|
2017-05-26 14:48:04 +09:00
|
|
|
|
2017-09-22 12:24:15 +02:00
|
|
|
// if a default value has been registered using registerSetting, use it
|
|
|
|
const defaultValue = settingDefault || Settings[settingName] && Settings[settingName].defaultValue;
|
|
|
|
|
2017-05-26 14:48:04 +09:00
|
|
|
if (Meteor.isServer) {
|
|
|
|
// look in public, private, and root
|
2018-01-26 18:07:50 -06:00
|
|
|
const rootSetting = getNestedProperty(Meteor.settings, settingName);
|
|
|
|
const privateSetting = Meteor.settings.private && getNestedProperty(Meteor.settings.private, settingName);
|
|
|
|
const publicSetting = Meteor.settings.public && getNestedProperty(Meteor.settings.public, settingName);
|
2017-05-26 14:48:04 +09:00
|
|
|
|
|
|
|
// if setting is an object, "collect" properties from all three places
|
|
|
|
if (typeof rootSetting === 'object' || typeof privateSetting === 'object' || typeof publicSetting === 'object') {
|
2017-09-18 09:09:43 +02:00
|
|
|
setting = {
|
2017-08-09 19:20:21 +09:00
|
|
|
...defaultValue,
|
2017-05-26 14:48:04 +09:00
|
|
|
...rootSetting,
|
|
|
|
...privateSetting,
|
|
|
|
...publicSetting,
|
|
|
|
}
|
|
|
|
} else {
|
2017-10-06 07:02:29 +09:00
|
|
|
if (typeof rootSetting !== 'undefined') {
|
|
|
|
setting = rootSetting;
|
|
|
|
} else if (typeof privateSetting !== 'undefined') {
|
|
|
|
setting = privateSetting;
|
|
|
|
} else if (typeof publicSetting !== 'undefined') {
|
|
|
|
setting = publicSetting;
|
|
|
|
} else {
|
|
|
|
setting = defaultValue;
|
|
|
|
}
|
2017-05-26 14:48:04 +09:00
|
|
|
}
|
|
|
|
|
2016-04-15 15:42:14 +09:00
|
|
|
} else {
|
2017-05-26 14:48:04 +09:00
|
|
|
// look only in public
|
2018-01-26 18:07:50 -06:00
|
|
|
const publicSetting = Meteor.settings.public && getNestedProperty(Meteor.settings.public, settingName);
|
2018-08-03 11:14:15 +09:00
|
|
|
setting = typeof publicSetting !== 'undefined' ? publicSetting : defaultValue;
|
2016-04-15 15:42:14 +09:00
|
|
|
}
|
|
|
|
|
2017-09-22 12:24:15 +02:00
|
|
|
// Settings[settingName] = {...Settings[settingName], settingValue: setting};
|
2017-09-18 09:09:43 +02:00
|
|
|
|
|
|
|
return setting;
|
|
|
|
|
2017-05-26 14:48:04 +09:00
|
|
|
}
|
2016-04-15 15:42:14 +09:00
|
|
|
|
2018-01-25 12:12:31 -06:00
|
|
|
registerSetting('debug', false, 'Enable debug mode (more verbose logging)');
|