From 7a083e7ce4064f0185fe1ac8b5d3ef4c35d19d2b Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Tue, 10 Jun 2025 12:54:08 +0200 Subject: [PATCH] dashboard: check if new location conflicts with all possible app locations --- src/dashboard.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/dashboard.js b/src/dashboard.js index 81b74c751..1b93f9496 100644 --- a/src/dashboard.js +++ b/src/dashboard.js @@ -91,8 +91,13 @@ async function startPrepareLocation(domain, auditSource) { if (constants.DEMO) throw new BoxError(BoxError.BAD_STATE, 'Not allowed in demo mode'); const fqdn = dns.fqdn(constants.DASHBOARD_SUBDOMAIN, domain); - const result = await apps.list(); - if (result.some(app => app.fqdn === fqdn)) throw new BoxError(BoxError.BAD_STATE, 'Dashboard location conflicts with an existing app'); + for (const app of await apps.list()) { + const appName = `${app.label || app.fqdn} (${app.id})`; + if (app.fqdn === fqdn) throw new BoxError(BoxError.BAD_STATE, `Dashboard location conflicts with primary location of app '${appName}'`); + if (app.secondaryDomains.some(sd => sd.fqdn === fqdn)) throw new BoxError(BoxError.BAD_STATE, `Dashboard location conflicts with second location of app '${appName}'`); + if (app.redirectDomains.some(rd => rd.fqdn === fqdn)) throw new BoxError(BoxError.BAD_STATE, `Dashboard location conflicts with redirect location of app '${appName}'`); + if (app.aliasDomains.some(ad => ad.fqdn === fqdn)) throw new BoxError(BoxError.BAD_STATE, `Dashboard location conflicts with alias location of app '${appName}'`); + } const taskId = await tasks.add(tasks.TASK_PREPARE_DASHBOARD_LOCATION, [ constants.DASHBOARD_SUBDOMAIN, domain, auditSource ]); tasks.startTask(taskId, {});