diff --git a/src/routes/settings.js b/src/routes/settings.js index 5c3c4ad4b..67062b798 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -225,6 +225,26 @@ function setDynamicDnsConfig(req, res, next) { }); } +function getUnstableAppsConfig(req, res, next) { + settings.getUnstableAppsConfig(function (error, enabled) { + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, { enabled: enabled })); + }); +} + +function setUnstableAppsConfig(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + if (typeof req.body.enabled !== 'boolean') return next(new HttpError(400, 'enabled boolean is required')); + + settings.setUnstableAppsConfig(req.body.enabled, function (error) { + if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, {})); + }); +} function getAppstoreConfig(req, res, next) { settings.getAppstoreConfig(function (error, result) { @@ -281,6 +301,7 @@ function get(req, res, next) { case settings.BACKUP_CONFIG_KEY: return getBackupConfig(req, res, next); case settings.PLATFORM_CONFIG_KEY: return getPlatformConfig(req, res, next); case settings.APPSTORE_CONFIG_KEY: return getAppstoreConfig(req, res, next); + case settings.UNSTABLE_APPS_KEY: return getUnstableAppsConfig(req, res, next); case settings.APP_AUTOUPDATE_PATTERN_KEY: return getAppAutoupdatePattern(req, res, next); case settings.BOX_AUTOUPDATE_PATTERN_KEY: return getBoxAutoupdatePattern(req, res, next); @@ -301,6 +322,7 @@ function set(req, res, next) { case settings.BACKUP_CONFIG_KEY: return setBackupConfig(req, res, next); case settings.PLATFORM_CONFIG_KEY: return setPlatformConfig(req, res, next); case settings.APPSTORE_CONFIG_KEY: return setAppstoreConfig(req, res, next); + case settings.UNSTABLE_APPS_KEY: return setUnstableAppsConfig(req, res, next); case settings.APP_AUTOUPDATE_PATTERN_KEY: return setAppAutoupdatePattern(req, res, next); case settings.BOX_AUTOUPDATE_PATTERN_KEY: return setBoxAutoupdatePattern(req, res, next); diff --git a/src/settings.js b/src/settings.js index a2144c035..6e376e4b5 100644 --- a/src/settings.js +++ b/src/settings.js @@ -21,6 +21,9 @@ exports = module.exports = { getDynamicDnsConfig: getDynamicDnsConfig, setDynamicDnsConfig: setDynamicDnsConfig, + getUnstableAppsConfig: getUnstableAppsConfig, + setUnstableAppsConfig: setUnstableAppsConfig, + getBackupConfig: getBackupConfig, setBackupConfig: setBackupConfig, @@ -41,6 +44,7 @@ exports = module.exports = { // booleans. if you add an entry here, be sure to fix getAll DYNAMIC_DNS_KEY: 'dynamic_dns', EMAIL_DIGEST: 'email_digest', + UNSTABLE_APPS_KEY: 'unstable_apps', // json. if you add an entry here, be sure to fix getAll BACKUP_CONFIG_KEY: 'backup_config', @@ -291,6 +295,31 @@ function setDynamicDnsConfig(enabled, callback) { }); } +function getUnstableAppsConfig(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.UNSTABLE_APPS_KEY, function (error, enabled) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.UNSTABLE_APPS_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, !!enabled); // settingsdb holds string values only + }); +} + +function setUnstableAppsConfig(enabled, callback) { + assert.strictEqual(typeof enabled, 'boolean'); + assert.strictEqual(typeof callback, 'function'); + + // settingsdb takes string values only + settingsdb.set(exports.UNSTABLE_APPS_KEY, enabled ? 'enabled' : '', function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + notifyChange(exports.UNSTABLE_APPS_KEY, enabled); + + return callback(null); + }); +} + function getBackupConfig(callback) { assert.strictEqual(typeof callback, 'function'); @@ -440,6 +469,7 @@ function getAll(callback) { // convert booleans result[exports.DYNAMIC_DNS_KEY] = !!result[exports.DYNAMIC_DNS_KEY]; + result[exports.UNSTABLE_APPS_KEY] = !!result[exports.UNSTABLE_APPS_KEY]; // convert JSON objects [exports.BACKUP_CONFIG_KEY, exports.APPSTORE_CONFIG_KEY, exports.PLATFORM_CONFIG_KEY ].forEach(function (key) {