diff --git a/src/routes/settings.js b/src/routes/settings.js index 40af03e5a..e7b7dea68 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -1,34 +1,15 @@ 'use strict'; exports = module.exports = { - getAppAutoupdatePattern: getAppAutoupdatePattern, - setAppAutoupdatePattern: setAppAutoupdatePattern, - - getBoxAutoupdatePattern: getBoxAutoupdatePattern, - setBoxAutoupdatePattern: setBoxAutoupdatePattern, - - getCloudronName: getCloudronName, - setCloudronName: setCloudronName, + set: set, + get: get, + // specialized routes as they need different scope or some additional middleware getCloudronAvatar: getCloudronAvatar, setCloudronAvatar: setCloudronAvatar, - getBackupConfig: getBackupConfig, - setBackupConfig: setBackupConfig, - - getTimeZone: getTimeZone, - setTimeZone: setTimeZone, - getAppstoreConfig: getAppstoreConfig, - setAppstoreConfig: setAppstoreConfig, - - getPlatformConfig: getPlatformConfig, - setPlatformConfig: setPlatformConfig, - - getDynamicDnsConfig: getDynamicDnsConfig, - setDynamicDnsConfig: setDynamicDnsConfig, - - setRegistryConfig: setRegistryConfig + setAppstoreConfig: setAppstoreConfig }; var assert = require('assert'), @@ -280,3 +261,39 @@ function setRegistryConfig(req, res, next) { next(new HttpSuccess(200)); }); } + +function get(req, res, next) { + assert.strictEqual(typeof req.params.setting, 'string'); + + switch (req.params.setting) { + case settings.DYNAMIC_DNS_KEY: return getDynamicDnsConfig(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.APP_AUTOUPDATE_PATTERN_KEY: return getAppAutoupdatePattern(req, res, next); + case settings.BOX_AUTOUPDATE_PATTERN_KEY: return getBoxAutoupdatePattern(req, res, next); + case settings.TIME_ZONE_KEY: return getTimeZone(req, res, next); + case settings.CLOUDRON_NAME_KEY: return getCloudronName(req, res, next); + + case settings.CLOUDRON_AVATAR_KEY: return getCloudronAvatar(req, res, next); + + default: return next(new HttpError(404, 'No such setting')); + } +} + +function set(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + switch (req.params.setting) { + case settings.DYNAMIC_DNS_KEY: return setDynamicDnsConfig(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.APP_AUTOUPDATE_PATTERN_KEY: return setAppAutoupdatePattern(req, res, next); + case settings.BOX_AUTOUPDATE_PATTERN_KEY: return setBoxAutoupdatePattern(req, res, next); + case settings.TIME_ZONE_KEY: return setTimeZone(req, res, next); + case settings.CLOUDRON_NAME_KEY: return setCloudronName(req, res, next); + + default: return next(new HttpError(404, 'No such setting')); + } +} diff --git a/src/server.js b/src/server.js index e7711fd2d..281144a01 100644 --- a/src/server.js +++ b/src/server.js @@ -235,27 +235,13 @@ function initializeExpressSync() { router.post('/api/v1/apps/:id/owner', appsManageScope, routes.apps.setOwner); // settings routes (these are for the settings tab - avatar & name have public routes for normal users. see above) - router.get ('/api/v1/settings/app_autoupdate_pattern', settingsScope, routes.settings.getAppAutoupdatePattern); - router.post('/api/v1/settings/app_autoupdate_pattern', settingsScope, routes.settings.setAppAutoupdatePattern); - router.get ('/api/v1/settings/box_autoupdate_pattern', settingsScope, routes.settings.getBoxAutoupdatePattern); - router.post('/api/v1/settings/box_autoupdate_pattern', settingsScope, routes.settings.setBoxAutoupdatePattern); - router.get ('/api/v1/settings/cloudron_name', settingsScope, routes.settings.getCloudronName); - router.post('/api/v1/settings/cloudron_name', settingsScope, routes.settings.setCloudronName); - router.get ('/api/v1/settings/cloudron_avatar', settingsScope, routes.settings.getCloudronAvatar); - router.post('/api/v1/settings/cloudron_avatar', settingsScope, multipart, routes.settings.setCloudronAvatar); - router.get ('/api/v1/settings/backup_config', settingsScope, isUnmanaged, routes.settings.getBackupConfig); - router.post('/api/v1/settings/backup_config', settingsScope, isUnmanaged, routes.settings.setBackupConfig); - router.get ('/api/v1/settings/platform_config', settingsScope, isUnmanaged, routes.settings.getPlatformConfig); - router.post('/api/v1/settings/platform_config', settingsScope, isUnmanaged, routes.settings.setPlatformConfig); - router.get ('/api/v1/settings/dynamic_dns', settingsScope, isUnmanaged, routes.settings.getDynamicDnsConfig); - router.post('/api/v1/settings/dynamic_dns', settingsScope, isUnmanaged, routes.settings.setDynamicDnsConfig); + router.get('/api/v1/settings/cloudron_avatar', settingsScope, routes.settings.getCloudronAvatar); + router.post('/api/v1/settings/cloudron_avatar', settingsScope, multipart, routes.settings.setCloudronAvatar); + router.get ('/api/v1/settings/appstore_config', appstoreScope, routes.settings.getAppstoreConfig); + router.post('/api/v1/settings/appstore_config', appstoreScope, routes.settings.setAppstoreConfig); - router.get ('/api/v1/settings/time_zone', settingsScope, routes.settings.getTimeZone); - router.post('/api/v1/settings/time_zone', settingsScope, routes.settings.setTimeZone); - router.get ('/api/v1/settings/appstore_config', appstoreScope, isUnmanaged, routes.settings.getAppstoreConfig); - router.post('/api/v1/settings/appstore_config', appstoreScope, isUnmanaged, routes.settings.setAppstoreConfig); - - router.post('/api/v1/settings/registry_config', appstoreScope, routes.settings.setRegistryConfig); + router.get ('/api/v1/settings/:setting', settingsScope, routes.settings.get); + router.post('/api/v1/settings/:setting', settingsScope, routes.settings.set); // email routes router.get ('/api/v1/mail/:domain', mailScope, routes.mail.getDomain); diff --git a/src/settings.js b/src/settings.js index 87ab3446b..08fcbeeb4 100644 --- a/src/settings.js +++ b/src/settings.js @@ -53,6 +53,9 @@ exports = module.exports = { TIME_ZONE_KEY: 'time_zone', CLOUDRON_NAME_KEY: 'cloudron_name', + // blobs + CLOUDRON_AVATAR_KEY: 'cloudron_avatar', // not stored in db + on: on, removeListener: removeListener };