diff --git a/src/apps.js b/src/apps.js index ea8516743..f74a6d935 100644 --- a/src/apps.js +++ b/src/apps.js @@ -126,10 +126,10 @@ exports = module.exports = { HEALTH_DEAD: 'dead', // subdomain table types - SUBDOMAIN_TYPE_PRIMARY: 'primary', - SUBDOMAIN_TYPE_SECONDARY: 'secondary', - SUBDOMAIN_TYPE_REDIRECT: 'redirect', - SUBDOMAIN_TYPE_ALIAS: 'alias', + LOCATION_TYPE_PRIMARY: 'primary', + LOCATION_TYPE_SECONDARY: 'secondary', + LOCATION_TYPE_REDIRECT: 'redirect', + LOCATION_TYPE_ALIAS: 'alias', // exported for testing _validatePortBindings: validatePortBindings, @@ -643,14 +643,14 @@ function postProcess(result) { result.redirectDomains = []; result.aliasDomains = []; for (let i = 0; i < subdomainTypes.length; i++) { - if (subdomainTypes[i] === exports.SUBDOMAIN_TYPE_PRIMARY) { + if (subdomainTypes[i] === exports.LOCATION_TYPE_PRIMARY) { result.subdomain = subdomains[i]; result.domain = domains[i]; - } else if (subdomainTypes[i] === exports.SUBDOMAIN_TYPE_SECONDARY) { + } else if (subdomainTypes[i] === exports.LOCATION_TYPE_SECONDARY) { result.secondaryDomains.push({ domain: domains[i], subdomain: subdomains[i], environmentVariable: subdomainEnvironmentVariables[i] }); - } else if (subdomainTypes[i] === exports.SUBDOMAIN_TYPE_REDIRECT) { + } else if (subdomainTypes[i] === exports.LOCATION_TYPE_REDIRECT) { result.redirectDomains.push({ domain: domains[i], subdomain: subdomains[i] }); - } else if (subdomainTypes[i] === exports.SUBDOMAIN_TYPE_ALIAS) { + } else if (subdomainTypes[i] === exports.LOCATION_TYPE_ALIAS) { result.aliasDomains.push({ domain: domains[i], subdomain: subdomains[i] }); } } @@ -774,7 +774,7 @@ async function add(id, appStoreId, manifest, subdomain, domain, portBindings, da queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', - args: [ id, domain, subdomain, exports.SUBDOMAIN_TYPE_PRIMARY ] + args: [ id, domain, subdomain, exports.LOCATION_TYPE_PRIMARY ] }); Object.keys(portBindings).forEach(function (env) { @@ -795,7 +795,7 @@ async function add(id, appStoreId, manifest, subdomain, domain, portBindings, da data.secondaryDomains.forEach(function (d) { queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type, environmentVariable) VALUES (?, ?, ?, ?, ?)', - args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_SECONDARY, d.environmentVariable ] + args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_SECONDARY, d.environmentVariable ] }); }); } @@ -804,7 +804,7 @@ async function add(id, appStoreId, manifest, subdomain, domain, portBindings, da data.redirectDomains.forEach(function (d) { queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', - args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_REDIRECT ] + args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_REDIRECT ] }); }); } @@ -813,7 +813,7 @@ async function add(id, appStoreId, manifest, subdomain, domain, portBindings, da data.aliasDomains.forEach(function (d) { queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', - args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_ALIAS ] + args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_ALIAS ] }); }); } @@ -869,23 +869,23 @@ async function updateWithConstraints(id, app, constraints) { if ('subdomain' in app && 'domain' in app) { // must be updated together as they are unique together queries.push({ query: 'DELETE FROM subdomains WHERE appId = ?', args: [ id ]}); // all locations of an app must be updated together - queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, app.domain, app.subdomain, exports.SUBDOMAIN_TYPE_PRIMARY ]}); + queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, app.domain, app.subdomain, exports.LOCATION_TYPE_PRIMARY ]}); if ('secondaryDomains' in app) { app.secondaryDomains.forEach(function (d) { - queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type, environmentVariable) VALUES (?, ?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_SECONDARY, d.environmentVariable ]}); + queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type, environmentVariable) VALUES (?, ?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_SECONDARY, d.environmentVariable ]}); }); } if ('redirectDomains' in app) { app.redirectDomains.forEach(function (d) { - queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_REDIRECT ]}); + queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_REDIRECT ]}); }); } if ('aliasDomains' in app) { app.aliasDomains.forEach(function (d) { - queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.SUBDOMAIN_TYPE_ALIAS ]}); + queries.push({ query: 'INSERT INTO subdomains (appId, domain, subdomain, type) VALUES (?, ?, ?, ?)', args: [ id, d.domain, d.subdomain, exports.LOCATION_TYPE_ALIAS ]}); }); } } @@ -1209,7 +1209,7 @@ async function validateLocations(locations) { if (!(location.domain in domainObjectMap)) throw new BoxError(BoxError.BAD_FIELD, `No such domain in ${location.type} location`); let subdomain = location.subdomain; - if (location.type === exports.SUBDOMAIN_TYPE_ALIAS && subdomain.startsWith('*')) { + if (location.type === exports.LOCATION_TYPE_ALIAS && subdomain.startsWith('*')) { if (subdomain === '*') continue; subdomain = subdomain.replace(/^\*\./, ''); // remove *. } @@ -1299,10 +1299,10 @@ async function install(data, auditSource) { icon = Buffer.from(icon, 'base64'); } - const locations = [{ subdomain: subdomain, domain, type: exports.SUBDOMAIN_TYPE_PRIMARY }] - .concat(secondaryDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_SECONDARY }))) - .concat(redirectDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_REDIRECT }))) - .concat(aliasDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_ALIAS }))); + const locations = [{ subdomain: subdomain, domain, type: exports.LOCATION_TYPE_PRIMARY }] + .concat(secondaryDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_SECONDARY }))) + .concat(redirectDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_REDIRECT }))) + .concat(aliasDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_ALIAS }))); const domainObjectMap = await validateLocations(locations); @@ -1732,10 +1732,10 @@ async function setLocation(app, data, auditSource) { values.aliasDomains = data.aliasDomains; } - const locations = [{ subdomain: values.subdomain, domain: values.domain, type: exports.SUBDOMAIN_TYPE_PRIMARY }] - .concat(values.secondaryDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_SECONDARY }))) - .concat(values.redirectDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_REDIRECT }))) - .concat(values.aliasDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_ALIAS }))); + const locations = [{ subdomain: values.subdomain, domain: values.domain, type: exports.LOCATION_TYPE_PRIMARY }] + .concat(values.secondaryDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_SECONDARY }))) + .concat(values.redirectDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_REDIRECT }))) + .concat(values.aliasDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_ALIAS }))); const domainObjectMap = await validateLocations(locations); @@ -2166,8 +2166,8 @@ async function clone(app, data, user, auditSource) { if (error) throw error; const secondaryDomains = translateSecondaryDomains(data.secondaryDomains || {}); - const locations = [{ subdomain: subdomain, domain, type: exports.SUBDOMAIN_TYPE_PRIMARY }] - .concat(secondaryDomains.map(ad => _.extend(ad, { type: exports.SUBDOMAIN_TYPE_SECONDARY }))); + const locations = [{ subdomain: subdomain, domain, type: exports.LOCATION_TYPE_PRIMARY }] + .concat(secondaryDomains.map(ad => _.extend(ad, { type: exports.LOCATION_TYPE_SECONDARY }))); const domainObjectMap = await validateLocations(locations); diff --git a/src/reverseproxy.js b/src/reverseproxy.js index 0fb94a96f..ad84a119c 100644 --- a/src/reverseproxy.js +++ b/src/reverseproxy.js @@ -470,11 +470,11 @@ function getNginxConfigFilename(app, fqdn, type) { let nginxConfigFilenameSuffix = ''; - if (type === apps.SUBDOMAIN_TYPE_ALIAS) { + if (type === apps.LOCATION_TYPE_ALIAS) { nginxConfigFilenameSuffix = `-alias-${fqdn.replace('*', '_')}`; - } else if (type === apps.SUBDOMAIN_TYPE_SECONDARY) { + } else if (type === apps.LOCATION_TYPE_SECONDARY) { nginxConfigFilenameSuffix = `-secondary-${fqdn}`; - } else if (type === apps.SUBDOMAIN_TYPE_REDIRECT) { + } else if (type === apps.LOCATION_TYPE_REDIRECT) { nginxConfigFilenameSuffix = `-redirect-${fqdn}`; } @@ -504,7 +504,7 @@ async function writeAppNginxConfig(app, fqdn, type, bundle) { ocsp: await isOcspEnabled(bundle.certFilePath) }; - if (type === apps.SUBDOMAIN_TYPE_PRIMARY || type === apps.SUBDOMAIN_TYPE_ALIAS || type === apps.SUBDOMAIN_TYPE_SECONDARY) { + if (type === apps.LOCATION_TYPE_PRIMARY || type === apps.LOCATION_TYPE_ALIAS || type === apps.LOCATION_TYPE_SECONDARY) { data.endpoint = 'app'; // maybe these should become per domain at some point const reverseProxyConfig = app.reverseProxyConfig || {}; // some of our code uses fake app objects @@ -514,7 +514,7 @@ async function writeAppNginxConfig(app, fqdn, type, bundle) { data.hideHeaders = [ 'Content-Security-Policy' ]; if (reverseProxyConfig.csp.includes('frame-ancestors ')) data.hideHeaders.push('X-Frame-Options'); } - if (type === apps.SUBDOMAIN_TYPE_PRIMARY || type == apps.SUBDOMAIN_TYPE_ALIAS) { + if (type === apps.LOCATION_TYPE_PRIMARY || type == apps.LOCATION_TYPE_ALIAS) { data.proxyAuth = { enabled: app.sso && app.manifest.addons && app.manifest.addons.proxyAuth, id: app.id, @@ -522,12 +522,12 @@ async function writeAppNginxConfig(app, fqdn, type, bundle) { }; data.ip = app.containerIp; data.port = app.manifest.httpPort; - } else if (type === apps.SUBDOMAIN_TYPE_SECONDARY) { + } else if (type === apps.LOCATION_TYPE_SECONDARY) { data.ip = app.containerIp; const secondaryDomain = app.secondaryDomains.find(sd => sd.fqdn === fqdn); data.port = app.manifest.httpPorts[secondaryDomain.environmentVariable].containerPort; } - } else if (type === apps.SUBDOMAIN_TYPE_REDIRECT) { + } else if (type === apps.LOCATION_TYPE_REDIRECT) { data.proxyAuth = { enabled: false, id: app.id, location: nginxLocation('/') }; data.endpoint = 'redirect'; data.redirectTo = app.fqdn; @@ -547,10 +547,10 @@ async function writeAppNginxConfig(app, fqdn, type, bundle) { async function writeAppConfig(app) { assert.strictEqual(typeof app, 'object'); - const appDomains = [{ domain: app.domain, fqdn: app.fqdn, type: apps.SUBDOMAIN_TYPE_PRIMARY }] - .concat(app.secondaryDomains.map(sd => { return { domain: sd.domain, fqdn: sd.fqdn, type: apps.SUBDOMAIN_TYPE_SECONDARY }; })) - .concat(app.redirectDomains.map(rd => { return { domain: rd.domain, fqdn: rd.fqdn, type: apps.SUBDOMAIN_TYPE_REDIRECT }; })) - .concat(app.aliasDomains.map(ad => { return { domain: ad.domain, fqdn: ad.fqdn, type: apps.SUBDOMAIN_TYPE_ALIAS }; })); + const appDomains = [{ domain: app.domain, fqdn: app.fqdn, type: apps.LOCATION_TYPE_PRIMARY }] + .concat(app.secondaryDomains.map(sd => { return { domain: sd.domain, fqdn: sd.fqdn, type: apps.LOCATION_TYPE_SECONDARY }; })) + .concat(app.redirectDomains.map(rd => { return { domain: rd.domain, fqdn: rd.fqdn, type: apps.LOCATION_TYPE_REDIRECT }; })) + .concat(app.aliasDomains.map(ad => { return { domain: ad.domain, fqdn: ad.fqdn, type: apps.LOCATION_TYPE_ALIAS }; })); for (const appDomain of appDomains) { const bundle = await getCertificatePath(appDomain.fqdn, appDomain.domain); @@ -608,10 +608,10 @@ async function renewCerts(options, auditSource, progressCallback) { for (const app of allApps) { if (app.runState === apps.RSTATE_STOPPED) continue; // do not renew certs of stopped apps - appDomains = appDomains.concat([{ app, domain: app.domain, fqdn: app.fqdn, type: apps.SUBDOMAIN_TYPE_PRIMARY }]) - .concat(app.secondaryDomains.map(sd => { return { app, domain: sd.domain, fqdn: sd.fqdn, type: apps.SUBDOMAIN_TYPE_SECONDARY, nginxConfigFilename: getNginxConfigFilename(app, sd.fqdn, apps.SUBDOMAIN_TYPE_SECONDARY) }; })) - .concat(app.redirectDomains.map(rd => { return { app, domain: rd.domain, fqdn: rd.fqdn, type: apps.SUBDOMAIN_TYPE_REDIRECT, nginxConfigFilename: getNginxConfigFilename(app, rd.fqdn, apps.SUBDOMAIN_TYPE_REDIRECT) }; })) - .concat(app.aliasDomains.map(ad => { return { app, domain: ad.domain, fqdn: ad.fqdn, type: apps.SUBDOMAIN_TYPE_ALIAS, nginxConfigFilename: getNginxConfigFilename(app, ad.fqdn, apps.SUBDOMAIN_TYPE_ALIAS) }; })); + appDomains = appDomains.concat([{ app, domain: app.domain, fqdn: app.fqdn, type: apps.LOCATION_TYPE_PRIMARY }]) + .concat(app.secondaryDomains.map(sd => { return { app, domain: sd.domain, fqdn: sd.fqdn, type: apps.LOCATION_TYPE_SECONDARY, nginxConfigFilename: getNginxConfigFilename(app, sd.fqdn, apps.LOCATION_TYPE_SECONDARY) }; })) + .concat(app.redirectDomains.map(rd => { return { app, domain: rd.domain, fqdn: rd.fqdn, type: apps.LOCATION_TYPE_REDIRECT, nginxConfigFilename: getNginxConfigFilename(app, rd.fqdn, apps.LOCATION_TYPE_REDIRECT) }; })) + .concat(app.aliasDomains.map(ad => { return { app, domain: ad.domain, fqdn: ad.fqdn, type: apps.LOCATION_TYPE_ALIAS, nginxConfigFilename: getNginxConfigFilename(app, ad.fqdn, apps.LOCATION_TYPE_ALIAS) }; })); } if (options.domain) appDomains = appDomains.filter(function (appDomain) { return appDomain.domain === options.domain; });