82 lines
3.4 KiB
JavaScript
82 lines
3.4 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
var async = require('async'),
|
||
|
|
safe = require('safetydance');
|
||
|
|
|
||
|
|
exports.up = function(db, callback) {
|
||
|
|
function prepareTestSetupIfNeeded(done) {
|
||
|
|
if (process.env.BOX_ENV !== 'test') return done();
|
||
|
|
|
||
|
|
const settings = [
|
||
|
|
[ 'domain', JSON.stringify({ fqdn: 'example.com', zoneName: 'example.com' })],
|
||
|
|
[ 'dns_config', JSON.stringify({ provider: 'manual', wildcard: true })]
|
||
|
|
];
|
||
|
|
|
||
|
|
async.eachSeries(settings, function (setting, callback) {
|
||
|
|
db.runSql('INSERT INTO settings (name, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value=VALUES(value)', setting, callback);
|
||
|
|
}, done);
|
||
|
|
}
|
||
|
|
|
||
|
|
prepareTestSetupIfNeeded(function (error) {
|
||
|
|
if (error) return callback(error);
|
||
|
|
|
||
|
|
// first check precondtion of domain entry in settings
|
||
|
|
db.all('SELECT * FROM settings WHERE name = ?', [ 'domain' ], function (error, result) {
|
||
|
|
if (error) return callback(error);
|
||
|
|
if (result.length === 0 || !result[0].value) return callback(new Error('no domain entry in settings table'));
|
||
|
|
|
||
|
|
var domain = safe.JSON.parse(result[0].value);
|
||
|
|
if (!domain) return callback(new Error('Unable to parse domain entry from settings table. Invalid JSON.'));
|
||
|
|
|
||
|
|
// if no domain has been set we can't continue
|
||
|
|
if (!domain.fqdn) return callback(new Error('no fqdn value in domain settings entry'));
|
||
|
|
|
||
|
|
async.series([
|
||
|
|
db.runSql.bind(db, 'START TRANSACTION;'),
|
||
|
|
function addAppsDomainColumn(done) {
|
||
|
|
db.runSql('ALTER TABLE apps ADD COLUMN domain VARCHAR(128)', [], done);
|
||
|
|
},
|
||
|
|
function setAppDomain(done) {
|
||
|
|
db.runSql('UPDATE apps SET domain = ?', [ domain.fqdn ], done);
|
||
|
|
},
|
||
|
|
function addAppsLocationDomainUniqueConstraint(done) {
|
||
|
|
db.runSql('ALTER TABLE apps ADD UNIQUE location_domain_unique_index (location, domain)', [], done);
|
||
|
|
},
|
||
|
|
function addMailboxesDomainColumn(done) {
|
||
|
|
db.runSql('ALTER TABLE mailboxes ADD COLUMN domain VARCHAR(128)', [], done);
|
||
|
|
},
|
||
|
|
function setMailboxesDomain(done) {
|
||
|
|
db.runSql('UPDATE mailboxes SET domain = ?', [ domain.fqdn ], done);
|
||
|
|
},
|
||
|
|
function dropAppsLocationUniqueConstraint(done) {
|
||
|
|
db.runSql('ALTER TABLE apps DROP INDEX location', [], done);
|
||
|
|
},
|
||
|
|
db.runSql.bind(db, 'COMMIT')
|
||
|
|
], callback);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
exports.down = function(db, callback) {
|
||
|
|
async.series([
|
||
|
|
db.runSql.bind(db, 'START TRANSACTION;'),
|
||
|
|
function dropMailboxesDomainColumn(done) {
|
||
|
|
// done();
|
||
|
|
db.runSql('ALTER TABLE mailboxes DROP COLUMN domain', [], done);
|
||
|
|
},
|
||
|
|
function dropLocationDomainUniqueConstraint(done) {
|
||
|
|
// done();
|
||
|
|
db.runSql('ALTER TABLE apps DROP INDEX location_domain_unique_index', [], done);
|
||
|
|
},
|
||
|
|
function dropAppsDomainColumn(done) {
|
||
|
|
// done();
|
||
|
|
db.runSql('ALTER TABLE apps DROP COLUMN domain', [], done);
|
||
|
|
},
|
||
|
|
function addAppsLocationUniqueConstraint(done) {
|
||
|
|
// done();
|
||
|
|
db.runSql('ALTER TABLE apps ADD UNIQUE location (location)', [], done);
|
||
|
|
},
|
||
|
|
db.runSql.bind(db, 'COMMIT')
|
||
|
|
], callback);
|
||
|
|
};
|