diff --git a/package.json b/package.json index 29bba0d36..46af5fb2f 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "js-yaml": "^3.13.1", "json": "^9.0.6", "ldapjs": "^1.0.2", + "lodash": "^4.17.11", "lodash.chunk": "^4.2.0", "mime": "^2.4.2", "moment-timezone": "^0.5.25", diff --git a/src/cloudron.js b/src/cloudron.js index 8864eb1ba..d69d82c4f 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -174,7 +174,7 @@ function getConfig(callback) { memory: os.totalmem(), provider: config.provider(), cloudronName: allSettings[settings.CLOUDRON_NAME_KEY], - features: custom.features(), + uiSpec: custom.uiSpec(), supportEmail: custom.supportEmail() }); }); diff --git a/src/custom.js b/src/custom.js index 465c85eea..985163142 100644 --- a/src/custom.js +++ b/src/custom.js @@ -1,44 +1,62 @@ 'use strict'; let debug = require('debug')('box:features'), + lodash = require('lodash'), paths = require('./paths.js'), safe = require('safetydance'), yaml = require('js-yaml'); exports = module.exports = { - features: features, + uiSpec: uiSpec, supportEmail: supportEmail, alertsEmail: alertsEmail, sendAlertsToCloudronAdmins: sendAlertsToCloudronAdmins }; +const DEFAULT = { + features: { + configureBackup: true, + dynamicDns: true, + subscription: true, + remoteSupport: true + }, + support: { + email: 'support@cloudron.io' + }, + alerts: { + email: '', + notifyCloudronAdmins: false + } +}; + const gCustom = (function () { try { - if (!safe.fs.existsSync(paths.CUSTOM_FILE)) return {}; - return yaml.safeLoad(safe.fs.readFileSync(paths.CUSTOM_FILE, 'utf8')); + if (!safe.fs.existsSync(paths.CUSTOM_FILE)) return DEFAULT; + const c = yaml.safeLoad(safe.fs.readFileSync(paths.CUSTOM_FILE, 'utf8')); + return lodash.merge({}, DEFAULT, c); } catch (e) { debug(`Error loading features file from ${paths.CUSTOM_FILE} : ${e.message}`); - return {}; + return DEFAULT; } })(); -function features() { +function uiSpec() { return { - dynamicDns: safe.query(gCustom, 'features.dynamicDns', true), - remoteSupport: safe.query(gCustom, 'features.remoteSupport', true), - subscription: safe.query(gCustom, 'features.subscription', true), - configureBackup: safe.query(gCustom, 'features.configureBackup', true) + dynamicDns: gCustom.features.dynamicDns, + remoteSupport: gCustom.features.remoteSupport, + subscription: gCustom.features.subscription, + configureBackup: gCustom.features.configureBackup }; } function supportEmail() { - return safe.query(gCustom, 'support.email', 'support@cloudron.io'); + return gCustom.support.email; } function alertsEmail() { - return safe.query(gCustom, 'alerts.email', ''); + return gCustom.alerts.email; } function sendAlertsToCloudronAdmins() { - return safe.query(gCustom, 'alerts.notifyCloudronAdmins', true); + return gCustom.alerts.notifyCloudronAdmins; }