diff --git a/src/settings.js b/src/settings.js index 46dc9194f..fe3ee51b6 100644 --- a/src/settings.js +++ b/src/settings.js @@ -20,6 +20,9 @@ exports = module.exports = { getDeveloperMode: getDeveloperMode, setDeveloperMode: setDeveloperMode, + getDnsConfig: getDnsConfig, + setDnsConfig: setDnsConfig, + getDefaultSync: getDefaultSync, getAll: getAll, @@ -27,6 +30,7 @@ exports = module.exports = { TIME_ZONE_KEY: 'time_zone', CLOUDRON_NAME_KEY: 'cloudron_name', DEVELOPER_MODE_KEY: 'developer_mode', + DNS_CREDENTIALS_KEY: 'dns_credentials', events: new (require('events').EventEmitter)() }; @@ -207,6 +211,35 @@ function setDeveloperMode(enabled, callback) { }); } +function getDnsConfig(callback) { + assert.strictEqual(typeof callback, 'function'); + + settingsdb.get(exports.DNS_CREDENTIALS_KEY, function (error, value) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new SettingsError(SettingsError.NOT_FOUND)); + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + callback(null, JSON.parse(value)); // accessKeyId, secretAccessKey, region + }); +} + +function setDnsConfig(dnsConfig, callback) { + assert.strictEqual(typeof dnsConfig, 'object'); + assert.strictEqual(typeof callback, 'function'); + + var credentials = { + provider: dnsConfig.provider, + accessKeyId: dnsConfig.accessKeyId, + secretAccessKey: dnsConfig.secretAccessKey, + region: dnsConfig.region || 'us-east-1' + }; + + settingsdb.set(exports.DNS_CREDENTIALS_KEY, JSON.stringify(credentials), function (error) { + if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + + 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 24e1cee0c..d5f024e1f 100644 --- a/src/test/settings-test.js +++ b/src/test/settings-test.js @@ -81,6 +81,24 @@ describe('Settings', function () { }); }); + it('can set dns config', function (done) { + settings.setDnsConfig({ provider: 'route53', accessKeyId: 'accessKeyId', secretAccessKey: 'secretAccessKey' }, function (error) { + expect(error).to.be(null); + done(); + }); + }); + + it('can get dns config', function (done) { + settings.getDnsConfig(function (error, dnsConfig) { + expect(error).to.be(null); + expect(dnsConfig.provider).to.be('route53'); + expect(dnsConfig.accessKeyId).to.be('accessKeyId'); + expect(dnsConfig.secretAccessKey).to.be('secretAccessKey'); + expect(dnsConfig.region).to.be('us-east-1'); + done(); + }); + }); + it('can get all values', function (done) { settings.getAll(function (error, allSettings) { expect(error).to.be(null);