diff --git a/src/routes/settings.js b/src/routes/settings.js index 1a094fb1f..20a1c425b 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -19,6 +19,9 @@ exports = module.exports = { getTimeZone: getTimeZone, setTimeZone: setTimeZone, + getMailConfig: getMailConfig, + setMailConfig: setMailConfig, + getAppstoreConfig: getAppstoreConfig, setAppstoreConfig: setAppstoreConfig, @@ -98,6 +101,27 @@ function setTimeZone(req, res, next) { }); } +function getMailConfig(req, res, next) { + settings.getMailConfig(function (error, mail) { + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, mail)); + }); +} + +function setMailConfig(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + if (typeof req.body.enabled !== 'boolean') return next(new HttpError(400, 'enabled is required')); + + settings.setMailConfig({ enabled: 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 setCloudronAvatar(req, res, next) { assert.strictEqual(typeof req.files, 'object'); diff --git a/src/server.js b/src/server.js index 179bc297f..fc0dfb338 100644 --- a/src/server.js +++ b/src/server.js @@ -193,6 +193,8 @@ function initializeExpressSync() { router.post('/api/v1/settings/time_zone', settingsScope, routes.user.requireAdmin, routes.settings.setTimeZone); router.get ('/api/v1/settings/appstore_config', settingsScope, routes.user.requireAdmin, routes.settings.getAppstoreConfig); router.post('/api/v1/settings/appstore_config', settingsScope, routes.user.requireAdmin, routes.settings.setAppstoreConfig); + router.get ('/api/v1/settings/mail_config', settingsScope, routes.user.requireAdmin, routes.settings.getMailConfig); + router.post('/api/v1/settings/mail_config', settingsScope, routes.user.requireAdmin, routes.settings.setMailConfig); // eventlog route router.get('/api/v1/eventlog', settingsScope, routes.user.requireAdmin, routes.eventlog.get); diff --git a/src/settings.js b/src/settings.js index eaf418df7..bbabcc015 100644 --- a/src/settings.js +++ b/src/settings.js @@ -33,6 +33,9 @@ exports = module.exports = { getAppstoreConfig: getAppstoreConfig, setAppstoreConfig: setAppstoreConfig, + getMailConfig: getMailConfig, + setMailConfig: setMailConfig, + getDefaultSync: getDefaultSync, getAll: getAll, @@ -45,6 +48,7 @@ exports = module.exports = { TLS_CONFIG_KEY: 'tls_config', UPDATE_CONFIG_KEY: 'update_config', APPSTORE_CONFIG_KEY: 'appstore_config', + MAIL_CONFIG_KEY: 'mail_config', events: new (require('events').EventEmitter)() }; @@ -77,6 +81,7 @@ var gDefaults = (function () { result[exports.TLS_CONFIG_KEY] = { provider: 'caas' }; result[exports.UPDATE_CONFIG_KEY] = { prerelease: false }; result[exports.APPSTORE_CONFIG_KEY] = { }; + result[exports.MAIL_CONFIG_KEY] = { enabled: false }; return result; })(); @@ -412,6 +417,30 @@ function setUpdateConfig(updateConfig, callback) { }); } +function getMailConfig(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.MAIL_CONFIG_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.MAIL_CONFIG_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, JSON.parse(value)); + }); +} + +function setMailConfig(mailConfig, callback) { + assert.strictEqual(typeof mailConfig, 'object'); + assert.strictEqual(typeof callback, 'function'); + + settingsdb.set(exports.MAIL_CONFIG_KEY, JSON.stringify(mailConfig), function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + exports.events.emit(exports.MAIL_CONFIG_KEY, mailConfig); + + callback(null); + }); +} + function getAppstoreConfig(callback) { assert.strictEqual(typeof callback, 'function');