diff --git a/src/routes/settings.js b/src/routes/settings.js index 5d59df473..f4b2b7962 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -23,7 +23,10 @@ exports = module.exports = { setAppstoreConfig: setAppstoreConfig, getPlatformConfig: getPlatformConfig, - setPlatformConfig: setPlatformConfig + setPlatformConfig: setPlatformConfig, + + setSpacesConfig: setSpacesConfig, + getSpacesConfig: getSpacesConfig }; var assert = require('assert'), @@ -200,6 +203,26 @@ function setPlatformConfig(req, res, next) { }); } +function getSpacesConfig(req, res, next) { + settings.getSpacesConfig(function (error, config) { + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, config)); + }); +} + +function setSpacesConfig(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + settings.setSpacesConfig(req.body, function (error) { + if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); + if (error && error.reason === SettingsError.EXTERNAL_ERROR) return next(new HttpError(402, error.message)); + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, {})); + }); +} + function getAppstoreConfig(req, res, next) { settings.getAppstoreConfig(function (error, result) { if (error) return next(new HttpError(500, error)); diff --git a/src/server.js b/src/server.js index 93ddc64ca..4248ae571 100644 --- a/src/server.js +++ b/src/server.js @@ -226,6 +226,8 @@ function initializeExpressSync() { router.post('/api/v1/settings/backup_config', settingsScope, routes.settings.setBackupConfig); router.get ('/api/v1/settings/platform_config', settingsScope, routes.settings.getPlatformConfig); router.post('/api/v1/settings/platform_config', settingsScope, routes.settings.setPlatformConfig); + router.get ('/api/v1/settings/spaces_config', settingsScope, routes.settings.getSpacesConfig); + router.post('/api/v1/settings/spaces_config', settingsScope, routes.settings.setSpacesConfig); router.get ('/api/v1/settings/time_zone', settingsScope, routes.settings.getTimeZone); router.post('/api/v1/settings/time_zone', settingsScope, routes.settings.setTimeZone); diff --git a/src/settings.js b/src/settings.js index 21551fcf2..3055fc424 100644 --- a/src/settings.js +++ b/src/settings.js @@ -38,6 +38,9 @@ exports = module.exports = { getPlatformConfig: getPlatformConfig, setPlatformConfig: setPlatformConfig, + getSpacesConfig: getSpacesConfig, + setSpacesConfig: setSpacesConfig, + getAll: getAll, // booleans. if you add an entry here, be sure to fix getAll @@ -50,6 +53,7 @@ exports = module.exports = { APPSTORE_CONFIG_KEY: 'appstore_config', CAAS_CONFIG_KEY: 'caas_config', PLATFORM_CONFIG_KEY: 'platform_config', + SPACES_CONFIG_KEY: 'spaces_config', // strings APP_AUTOUPDATE_PATTERN_KEY: 'app_autoupdate_pattern', @@ -93,6 +97,7 @@ var gDefaults = (function () { result[exports.CAAS_CONFIG_KEY] = {}; result[exports.EMAIL_DIGEST] = true; result[exports.PLATFORM_CONFIG_KEY] = {}; + result[exports.SPACES_CONFIG_KEY] = { enabled: false }; return result; })(); @@ -352,6 +357,32 @@ function setEmailDigest(enabled, callback) { }); } +function getSpacesConfig(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.SPACES_CONFIG_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.SPACES_CONFIG_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, JSON.parse(value)); + }); +} + +function setSpacesConfig(value, callback) { + assert.strictEqual(typeof value, 'object'); + assert.strictEqual(typeof callback, 'function'); + + if ('enabled' in value && typeof value.enabled !== 'boolean') return callback(new SettingsError(SettingsError.BAD_FIELD, 'enabled must be a boolean')); + + settingsdb.set(exports.SPACES_CONFIG_KEY, JSON.stringify(value), function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + exports.events.emit(exports.SPACES_CONFIG_KEY, value); + + callback(null); + }); +} + function getCaasConfig(callback) { assert.strictEqual(typeof callback, 'function'); @@ -474,7 +505,7 @@ function getAll(callback) { result[exports.DYNAMIC_DNS_KEY] = !!result[exports.DYNAMIC_DNS_KEY]; // convert JSON objects - [exports.BACKUP_CONFIG_KEY, exports.UPDATE_CONFIG_KEY, exports.APPSTORE_CONFIG_KEY, exports.PLATFORM_CONFIG_KEY ].forEach(function (key) { + [exports.BACKUP_CONFIG_KEY, exports.UPDATE_CONFIG_KEY, exports.APPSTORE_CONFIG_KEY, exports.PLATFORM_CONFIG_KEY, exports.SPACES_CONFIG_KEY ].forEach(function (key) { result[key] = typeof result[key] === 'object' ? result[key] : safe.JSON.parse(result[key]); });