settings: initCache and list are now async
This commit is contained in:
+30
-36
@@ -61,7 +61,7 @@ exports = module.exports = {
|
||||
|
||||
getSupportConfig,
|
||||
provider,
|
||||
getAll,
|
||||
list,
|
||||
initCache,
|
||||
|
||||
// these values come from the cache
|
||||
@@ -127,6 +127,7 @@ const assert = require('assert'),
|
||||
constants = require('./constants.js'),
|
||||
cron = require('./cron.js'),
|
||||
CronJob = require('cron').CronJob,
|
||||
database = require('./database.js'),
|
||||
debug = require('debug')('box:settings'),
|
||||
docker = require('./docker.js'),
|
||||
externalLdap = require('./externalldap.js'),
|
||||
@@ -139,6 +140,8 @@ const assert = require('assert'),
|
||||
translation = require('./translation.js'),
|
||||
_ = require('underscore');
|
||||
|
||||
const SETTINGS_FIELDS = [ 'name', 'value' ].join(',');
|
||||
|
||||
let gDefaults = (function () {
|
||||
var result = { };
|
||||
result[exports.AUTOUPDATE_PATTERN_KEY] = cron.DEFAULT_AUTOUPDATE_PATTERN;
|
||||
@@ -802,50 +805,41 @@ function setCloudronToken(token, callback) {
|
||||
});
|
||||
}
|
||||
|
||||
function getAll(callback) {
|
||||
assert.strictEqual(typeof callback, 'function');
|
||||
async function list() {
|
||||
const settings = await database.query(`SELECT ${SETTINGS_FIELDS} FROM settings WHERE value IS NOT NULL ORDER BY name`);
|
||||
|
||||
settingsdb.getAll(function (error, settings) {
|
||||
if (error) return callback(error);
|
||||
const result = _.extend({ }, gDefaults);
|
||||
settings.forEach(function (setting) { result[setting.name] = setting.value; });
|
||||
|
||||
var result = _.extend({ }, gDefaults);
|
||||
settings.forEach(function (setting) { result[setting.name] = setting.value; });
|
||||
// convert booleans
|
||||
result[exports.DYNAMIC_DNS_KEY] = !!result[exports.DYNAMIC_DNS_KEY];
|
||||
result[exports.UNSTABLE_APPS_KEY] = !!result[exports.UNSTABLE_APPS_KEY];
|
||||
result[exports.DEMO_KEY] = !!result[exports.DEMO_KEY];
|
||||
|
||||
// convert booleans
|
||||
result[exports.DYNAMIC_DNS_KEY] = !!result[exports.DYNAMIC_DNS_KEY];
|
||||
result[exports.UNSTABLE_APPS_KEY] = !!result[exports.UNSTABLE_APPS_KEY];
|
||||
result[exports.DEMO_KEY] = !!result[exports.DEMO_KEY];
|
||||
|
||||
// convert JSON objects
|
||||
[exports.BACKUP_CONFIG_KEY, exports.DIRECTORY_CONFIG_KEY, exports.SERVICES_CONFIG_KEY, exports.EXTERNAL_LDAP_KEY, exports.REGISTRY_CONFIG_KEY, exports.SYSINFO_CONFIG_KEY ].forEach(function (key) {
|
||||
result[key] = typeof result[key] === 'object' ? result[key] : safe.JSON.parse(result[key]);
|
||||
});
|
||||
|
||||
callback(null, result);
|
||||
// convert JSON objects
|
||||
[exports.BACKUP_CONFIG_KEY, exports.DIRECTORY_CONFIG_KEY, exports.SERVICES_CONFIG_KEY, exports.EXTERNAL_LDAP_KEY, exports.REGISTRY_CONFIG_KEY, exports.SYSINFO_CONFIG_KEY ].forEach(function (key) {
|
||||
result[key] = typeof result[key] === 'object' ? result[key] : safe.JSON.parse(result[key]);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function initCache(callback) {
|
||||
async function initCache() {
|
||||
debug('initCache: pre-load settings');
|
||||
|
||||
getAll(function (error, allSettings) {
|
||||
if (error) return callback(error);
|
||||
const allSettings = await list();
|
||||
const provider = safe.fs.readFileSync(paths.PROVIDER_FILE, 'utf8');
|
||||
|
||||
const provider = safe.fs.readFileSync(paths.PROVIDER_FILE, 'utf8');
|
||||
|
||||
gCache = {
|
||||
apiServerOrigin: allSettings[exports.API_SERVER_ORIGIN_KEY],
|
||||
webServerOrigin: allSettings[exports.WEB_SERVER_ORIGIN_KEY],
|
||||
dashboardDomain: allSettings[exports.DASHBOARD_DOMAIN_KEY],
|
||||
dashboardFqdn: allSettings[exports.DASHBOARD_FQDN_KEY],
|
||||
mailDomain: allSettings[exports.MAIL_DOMAIN_KEY],
|
||||
mailFqdn: allSettings[exports.MAIL_FQDN_KEY],
|
||||
isDemo: allSettings[exports.DEMO_KEY],
|
||||
provider: provider ? provider.trim() : 'generic'
|
||||
};
|
||||
|
||||
callback();
|
||||
});
|
||||
gCache = {
|
||||
apiServerOrigin: allSettings[exports.API_SERVER_ORIGIN_KEY],
|
||||
webServerOrigin: allSettings[exports.WEB_SERVER_ORIGIN_KEY],
|
||||
dashboardDomain: allSettings[exports.DASHBOARD_DOMAIN_KEY],
|
||||
dashboardFqdn: allSettings[exports.DASHBOARD_FQDN_KEY],
|
||||
mailDomain: allSettings[exports.MAIL_DOMAIN_KEY],
|
||||
mailFqdn: allSettings[exports.MAIL_FQDN_KEY],
|
||||
isDemo: allSettings[exports.DEMO_KEY],
|
||||
provider: provider ? provider.trim() : 'generic'
|
||||
};
|
||||
}
|
||||
|
||||
// this is together so we can do this in a transaction later
|
||||
|
||||
Reference in New Issue
Block a user