diff --git a/src/settings.js b/src/settings.js index b7671b7b1..15c95b850 100644 --- a/src/settings.js +++ b/src/settings.js @@ -17,12 +17,16 @@ exports = module.exports = { getCloudronAvatar: getCloudronAvatar, setCloudronAvatar: setCloudronAvatar, + getDeveloperMode: getDeveloperMode, + setDeveloperMode: setDeveloperMode, + getDefaultSync: getDefaultSync, getAll: getAll, AUTOUPDATE_PATTERN_KEY: 'autoupdate_pattern', TIME_ZONE_KEY: 'time_zone', CLOUDRON_NAME_KEY: 'cloudron_name', + DEVELOPER_MODE_KEY: 'developer_mode', events: new (require('events').EventEmitter)() }; @@ -45,6 +49,7 @@ var gDefaults = (function () { result[exports.AUTOUPDATE_PATTERN_KEY] = '00 00 1,3,5,23 * * *'; result[exports.TIME_ZONE_KEY] = tz; result[exports.CLOUDRON_NAME_KEY] = 'Cloudron'; + result[exports.DEVELOPER_MODE_KEY] = false; return result; })(); @@ -179,6 +184,32 @@ function setCloudronAvatar(avatar, callback) { return callback(null); } +function getDeveloperMode(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.DEVELOPER_MODE_KEY, function (error, enabled) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.DEVELOPER_MODE_KEY]); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + // settingsdb holds string values only + callback(null, !!enabled); + }); +} + +function setDeveloperMode(enabled, callback) { + assert.strictEqual(typeof enabled, 'boolean'); + assert.strictEqual(typeof callback, 'function'); + + // settingsdb takes string values only + settingsdb.set(exports.DEVELOPER_MODE_KEY, enabled ? 'enabled' : '', function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + exports.events.emit(exports.DEVELOPER_MODE_KEY, enabled); + + return callback(null); + }); +} + function getDefaultSync(name) { assert.strictEqual(typeof name, 'string'); diff --git a/src/test/settings-test.js b/src/test/settings-test.js index 0a9859aee..24e1cee0c 100644 --- a/src/test/settings-test.js +++ b/src/test/settings-test.js @@ -33,6 +33,7 @@ describe('Settings', function () { done(); }); }); + it('can get default autoupdate_pattern', function (done) { settings.getAutoupdatePattern(function (error, pattern) { expect(error).to.be(null); @@ -40,6 +41,7 @@ describe('Settings', function () { done(); }); }); + it ('can get default cloudron name', function (done) { settings.getCloudronName(function (error, name) { expect(error).to.be(null); @@ -47,6 +49,7 @@ describe('Settings', function () { done(); }); }); + it('can get default cloudron avatar', function (done) { settings.getCloudronAvatar(function (error, gravatar) { expect(error).to.be(null); @@ -54,6 +57,30 @@ describe('Settings', function () { done(); }); }); + + it('can get default developer mode', function (done) { + settings.getDeveloperMode(function (error, enabled) { + expect(error).to.be(null); + expect(enabled).to.equal(false); + done(); + }); + }); + + it('can set developer mode', function (done) { + settings.setDeveloperMode(true, function (error) { + expect(error).to.be(null); + done(); + }); + }); + + it('can get developer mode', function (done) { + settings.getDeveloperMode(function (error, enabled) { + expect(error).to.be(null); + expect(enabled).to.equal(true); + done(); + }); + }); + it('can get all values', function (done) { settings.getAll(function (error, allSettings) { expect(error).to.be(null);