71 lines
3.0 KiB
JavaScript
71 lines
3.0 KiB
JavaScript
'use strict';
|
|
|
|
var async = require('async'),
|
|
safe = require('safetydance');
|
|
|
|
exports.up = function(db, callback) {
|
|
// first check precondtion of domain entry in settings
|
|
db.all('SELECT * FROM settings WHERE name = ?', [ 'domain' ], function (error, result) {
|
|
if (error) return callback(error);
|
|
|
|
var domain = {};
|
|
if (result[0]) domain = safe.JSON.parse(result[0].value) || {};
|
|
|
|
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) {
|
|
if (!domain.fqdn) return done(); // skip for new cloudrons without a domain
|
|
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 removePresetupAdminGroupIfNew(done) {
|
|
// do not delete on update, will update the record in setMailboxesDomain()
|
|
if (domain.fqdn) return done();
|
|
|
|
// this will be finally created once we have a domain when we create the owner in user.js
|
|
const ADMIN_GROUP_ID = 'admin'; // see constants.js
|
|
db.runSql('DELETE FROM userGroups WHERE id = ?', [ ADMIN_GROUP_ID ], function (error) {
|
|
if (error) return done(error);
|
|
|
|
db.runSql('DELETE FROM mailboxes WHERE ownerId = ?', [ ADMIN_GROUP_ID ], done);
|
|
});
|
|
},
|
|
function addMailboxesDomainColumn(done) {
|
|
db.runSql('ALTER TABLE mailboxes ADD COLUMN domain VARCHAR(128)', [], done);
|
|
},
|
|
function setMailboxesDomain(done) {
|
|
if (!domain.fqdn) return done(); // skip for new cloudrons without a domain
|
|
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) {
|
|
db.runSql('ALTER TABLE mailboxes DROP COLUMN domain', [], done);
|
|
},
|
|
function dropLocationDomainUniqueConstraint(done) {
|
|
db.runSql('ALTER TABLE apps DROP INDEX location_domain_unique_index', [], done);
|
|
},
|
|
function dropAppsDomainColumn(done) {
|
|
db.runSql('ALTER TABLE apps DROP COLUMN domain', [], done);
|
|
},
|
|
function addAppsLocationUniqueConstraint(done) {
|
|
db.runSql('ALTER TABLE apps ADD UNIQUE location (location)', [], done);
|
|
},
|
|
db.runSql.bind(db, 'COMMIT')
|
|
], callback);
|
|
};
|