diff --git a/src/routes/settings.js b/src/routes/settings.js index 23adad6d9..b3818b330 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -17,6 +17,7 @@ exports = module.exports = { setBackupConfig: setBackupConfig, getTimeZone: getTimeZone, + setTimeZone: setTimeZone, setCertificate: setCertificate, setAdminCertificate: setAdminCertificate @@ -81,6 +82,19 @@ function getTimeZone(req, res, next) { }); } +function setTimeZone(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + if (typeof req.body.timeZone !== 'string') return next(new HttpError(400, 'timeZone is required')); + + settings.setTimeZone(req.body.timeZone, 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 e6784b98c..2d24a3882 100644 --- a/src/server.js +++ b/src/server.js @@ -185,6 +185,7 @@ function initializeExpressSync() { router.post('/api/v1/settings/certificate', settingsScope, routes.user.requireAdmin, routes.settings.setCertificate); router.post('/api/v1/settings/admin_certificate', settingsScope, routes.user.requireAdmin, routes.settings.setAdminCertificate); router.get ('/api/v1/settings/time_zone', settingsScope, routes.user.requireAdmin, routes.settings.getTimeZone); + router.post('/api/v1/settings/time_zone', settingsScope, routes.user.requireAdmin, routes.settings.setTimeZone); // 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 0c1adbccd..ebd4bcfcc 100644 --- a/src/settings.js +++ b/src/settings.js @@ -51,6 +51,7 @@ var assert = require('assert'), config = require('./config.js'), CronJob = require('cron').CronJob, DatabaseError = require('./databaseerror.js'), + moment = require('moment-timezone'), paths = require('./paths.js'), safe = require('safetydance'), settingsdb = require('./settingsdb.js'), @@ -132,6 +133,8 @@ function setTimeZone(tz, callback) { assert.strictEqual(typeof tz, 'string'); assert.strictEqual(typeof callback, 'function'); + if (moment.tz.names().indexOf(tz) === -1) return callback(new SettingsError(SettingsError.BAD_FIELD, 'Bad timeZone')); + settingsdb.set(exports.TIME_ZONE_KEY, tz, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));