diff --git a/src/domaindb.js b/src/domaindb.js index 36a3903a2..d7809fe61 100644 --- a/src/domaindb.js +++ b/src/domaindb.js @@ -54,6 +54,7 @@ function getAll(callback) { function add(name, domain, callback) { assert.strictEqual(typeof name, 'string'); + assert.strictEqual(typeof domain, 'object'); assert.strictEqual(typeof domain.zoneName, 'string'); assert.strictEqual(typeof domain.provider, 'string'); assert.strictEqual(typeof domain.config, 'object'); @@ -67,13 +68,24 @@ function add(name, domain, callback) { }); } -function update(domain, provider, config, callback) { - assert.strictEqual(typeof domain, 'string'); - assert.strictEqual(typeof provider, 'string'); - assert.strictEqual(typeof config, 'object'); +function update(name, domain, callback) { + assert.strictEqual(typeof name, 'string'); + assert.strictEqual(typeof domain, 'object'); assert.strictEqual(typeof callback, 'function'); - database.query('UPDATE domains SET provider=?, configJson=? WHERE domain=?', [ provider, JSON.stringify(config), domain ], function (error) { + var args = [ ], fields = [ ]; + for (var k in domain) { + if (k === 'config') { + fields.push('configJson = ?'); + args.push(JSON.stringify(domain[k])); + } else { + fields.push(k + ' = ?'); + args.push(domain[k]); + } + } + args.push(name); + + database.query('UPDATE domains SET ' + fields.join(', ') + ' WHERE domain=?', args, function (error) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); diff --git a/src/domains.js b/src/domains.js index 458574280..5f0f1d798 100644 --- a/src/domains.js +++ b/src/domains.js @@ -197,7 +197,7 @@ function update(domain, provider, config, fallbackCertificate, callback) { if (error && error.reason === DomainError.INVALID_PROVIDER) return callback(new DomainError(DomainError.BAD_FIELD, error.message)); if (error) return callback(new DomainError(DomainError.INTERNAL_ERROR, error)); - domaindb.update(domain, provider, result, function (error) { + domaindb.update(domain, { provider: provider, config: result }, function (error) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new DomainError(DomainError.NOT_FOUND)); if (error) return callback(new DomainError(DomainError.INTERNAL_ERROR, error)); diff --git a/src/test/database-test.js b/src/test/database-test.js index 1d3b0a8d3..6ab6b0600 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -19,7 +19,6 @@ var appdb = require('../appdb.js'), groupdb = require('../groupdb.js'), hat = require('hat'), mailboxdb = require('../mailboxdb.js'), - path = require('path'), settingsdb = require('../settingsdb.js'), tokendb = require('../tokendb.js'), userdb = require('../userdb.js'), @@ -133,7 +132,7 @@ describe('database', function () { it('can update domain', function (done) { const newConfig = { provider: 'manual' }; - domaindb.update(DOMAIN_1.domain, DOMAIN_1.provider, newConfig, function (error) { + domaindb.update(DOMAIN_1.domain, { provider: DOMAIN_1.provider, config: newConfig }, function (error) { expect(error).to.equal(null); domaindb.get(DOMAIN_1.domain, function (error, result) { @@ -359,7 +358,7 @@ describe('database', function () { }); }); - it('can update the user', function (done) { + it('can update the user', function (done) { userdb.update(USER_0.id, { email: 'some@thing.com', displayName: 'Heiter' }, function (error) { expect(error).to.not.be.ok(); userdb.get(USER_0.id, function (error, user) { @@ -1409,7 +1408,7 @@ describe('database', function () { eventlogdb.getAllPaged(null, null, 1, 100, function (error, results) { expect(error).to.be(null); expect(results.length).to.be(2); - results = results.sort(function (x, y) { return x.action > y.action }); // because equal timestamp gives random ordering + results = results.sort(function (x, y) { return x.action > y.action; }); // because equal timestamp gives random ordering expect(results[1].action).to.be.eql('persistent.event'); expect(results[0].action).to.be.eql('anotherpersistent.event');