diff --git a/src/apps.js b/src/apps.js index 71e49d6cd..0a56281cd 100644 --- a/src/apps.js +++ b/src/apps.js @@ -507,7 +507,8 @@ function install(data, auditSource, callback) { enableBackup = 'enableBackup' in data ? data.enableBackup : true, backupId = data.backupId || null, backupFormat = data.backupFormat || 'tgz', - ownerId = data.ownerId; + ownerId = data.ownerId, + alternateDomains = data.alternateDomains || []; assert(data.appStoreId || data.manifest); // atleast one of them is required @@ -579,7 +580,8 @@ function install(data, auditSource, callback) { mailboxName: mailboxNameForLocation(location, manifest), restoreConfig: backupId ? { backupId: backupId, backupFormat: backupFormat } : null, enableBackup: enableBackup, - robotsTxt: robotsTxt + robotsTxt: robotsTxt, + alternateDomains: alternateDomains }; appdb.add(appId, appStoreId, manifest, location, domain, ownerId, translatePortBindings(portBindings, manifest), data, function (error) { diff --git a/src/routes/apps.js b/src/routes/apps.js index 031839957..811413148 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -127,6 +127,13 @@ function installApp(req, res, next) { if (data.robotsTxt && typeof data.robotsTxt !== 'string') return next(new HttpError(400, 'robotsTxt must be a string')); + if ('alternateDomains' in data) { + if (!Array.isArray(data.alternateDomains)) return next(new HttpError(400, 'alternateDomains must be an array')); + if (data.alternateDomains.some(function (d) { return (typeof d.domain !== 'string' || typeof d.subdomain !== 'string'); })) return next(new HttpError(400, 'alternateDomains array must contain objects with domain and subdomain strings')); + + data.alternateDomains.forEach(function (ad) { ad.subdomain = addSpacesSuffix(ad.subdomain, req.user); }); + } + debug('Installing app :%j', data); apps.install(data, auditSource(req), function (error, app) {