diff --git a/src/appstore.js b/src/appstore.js index 63833299d..9066f67d5 100644 --- a/src/appstore.js +++ b/src/appstore.js @@ -385,7 +385,7 @@ function registerWithLoginCredentials(options, callback) { login(options.email, options.password, options.totpToken || '', function (error, result) { if (error) return callback(error); - registerCloudron({ domain: settings.adminDomain(), accessToken: result.accessToken, version: constants.VERSION, purpose: options.purpose || '' }, callback); + registerCloudron({ domain: settings.dashboardDomain(), accessToken: result.accessToken, version: constants.VERSION, purpose: options.purpose || '' }, callback); }); }); }); diff --git a/src/cloudron.js b/src/cloudron.js index c82e907fe..8d73d8829 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -133,9 +133,9 @@ function runStartupTasks() { // always generate webadmin config since we have no versioning mechanism for the ejs function (callback) { - if (!settings.adminDomain()) return callback(); + if (!settings.dashboardDomain()) return callback(); - reverseProxy.writeDashboardConfig(settings.adminDomain(), callback); + reverseProxy.writeDashboardConfig(settings.dashboardDomain(), callback); }, // check activation state and start the platform @@ -174,8 +174,8 @@ function getConfig(callback) { callback(null, { apiServerOrigin: settings.apiServerOrigin(), webServerOrigin: settings.webServerOrigin(), - adminDomain: settings.adminDomain(), - adminFqdn: settings.adminFqdn(), + adminDomain: settings.dashboardDomain(), + adminFqdn: settings.dashboardFqdn(), mailFqdn: settings.mailFqdn(), version: constants.VERSION, isDemo: settings.isDemo(), @@ -295,7 +295,7 @@ function prepareDashboardDomain(domain, auditSource, callback) { domains.get(domain, function (error, domainObject) { if (error) return callback(error); - const fqdn = domains.fqdn(constants.ADMIN_LOCATION, domainObject); + const fqdn = domains.fqdn(constants.DASHBOARD_LOCATION, domainObject); apps.getAll(function (error, result) { if (error) return callback(error); @@ -303,7 +303,7 @@ function prepareDashboardDomain(domain, auditSource, callback) { const conflict = result.filter(app => app.fqdn === fqdn); if (conflict.length) return callback(new BoxError(BoxError.BAD_STATE, 'Dashboard location conflicts with an existing app')); - tasks.add(tasks.TASK_SETUP_DNS_AND_CERT, [ constants.ADMIN_LOCATION, domain, auditSource ], function (error, taskId) { + tasks.add(tasks.TASK_SETUP_DNS_AND_CERT, [ constants.DASHBOARD_LOCATION, domain, auditSource ], function (error, taskId) { if (error) return callback(error); tasks.startTask(taskId, {}, NOOP_CALLBACK); @@ -328,9 +328,9 @@ function setDashboardDomain(domain, auditSource, callback) { reverseProxy.writeDashboardConfig(domain, function (error) { if (error) return callback(error); - const fqdn = domains.fqdn(constants.ADMIN_LOCATION, domainObject); + const fqdn = domains.fqdn(constants.DASHBOARD_LOCATION, domainObject); - settings.setAdminLocation(domain, fqdn, function (error) { + settings.setDashboardLocation(domain, fqdn, function (error) { if (error) return callback(error); appstore.updateCloudron({ domain }, NOOP_CALLBACK); diff --git a/src/constants.js b/src/constants.js index f3d36e367..02785c48b 100644 --- a/src/constants.js +++ b/src/constants.js @@ -22,7 +22,7 @@ exports = module.exports = { 'admins', 'users' // ldap code uses 'users' pseudo group ], - ADMIN_LOCATION: 'my', + DASHBOARD_LOCATION: 'my', PORT: CLOUDRON ? 3000 : 5454, INTERNAL_SMTP_PORT: 2525, // this value comes from the mail container diff --git a/src/docker.js b/src/docker.js index 888906d34..b2a572a69 100644 --- a/src/docker.js +++ b/src/docker.js @@ -319,8 +319,8 @@ function createSubcontainer(app, name, cmd, options, callback) { 'CLOUDRON=1', 'CLOUDRON_PROXY_IP=172.18.0.1', `CLOUDRON_APP_HOSTNAME=${app.id}`, - `${envPrefix}WEBADMIN_ORIGIN=${settings.adminOrigin()}`, - `${envPrefix}API_ORIGIN=${settings.adminOrigin()}`, + `${envPrefix}WEBADMIN_ORIGIN=${settings.dashboardOrigin()}`, + `${envPrefix}API_ORIGIN=${settings.dashboardOrigin()}`, `${envPrefix}APP_ORIGIN=https://${domain}`, `${envPrefix}APP_DOMAIN=${domain}` ]; diff --git a/src/domains.js b/src/domains.js index 494f7c3c0..7684773fe 100644 --- a/src/domains.js +++ b/src/domains.js @@ -119,7 +119,7 @@ function validateHostname(location, domainObject) { ]; if (RESERVED_LOCATIONS.indexOf(location) !== -1) return new BoxError(BoxError.BAD_FIELD, location + ' is reserved', { field: 'location' }); - if (hostname === settings.adminFqdn()) return new BoxError(BoxError.BAD_FIELD, location + ' is reserved', { field: 'location' }); + if (hostname === settings.dashboardFqdn()) return new BoxError(BoxError.BAD_FIELD, location + ' is reserved', { field: 'location' }); // workaround https://github.com/oncletom/tld.js/issues/73 var tmp = hostname.replace('_', '-'); @@ -198,7 +198,7 @@ function add(domain, data, auditSource, callback) { if (!dkimSelector) { // create a unique suffix. this lets one add this domain can be added in another cloudron instance and not have their dkim selector conflict - const suffix = crypto.createHash('sha256').update(settings.adminDomain()).digest('hex').substr(0, 6); + const suffix = crypto.createHash('sha256').update(settings.dashboardDomain()).digest('hex').substr(0, 6); dkimSelector = `cloudron-${suffix}`; } @@ -254,7 +254,7 @@ function update(domain, data, auditSource, callback) { let { zoneName, provider, config, fallbackCertificate, tlsConfig, wellKnown } = data; - if (settings.isDemo() && (domain === settings.adminDomain())) return callback(new BoxError(BoxError.CONFLICT, 'Not allowed in demo mode')); + if (settings.isDemo() && (domain === settings.dashboardDomain())) return callback(new BoxError(BoxError.CONFLICT, 'Not allowed in demo mode')); domaindb.get(domain, function (error, domainObject) { if (error) return callback(error); @@ -313,7 +313,7 @@ function del(domain, auditSource, callback) { assert.strictEqual(typeof auditSource, 'object'); assert.strictEqual(typeof callback, 'function'); - if (domain === settings.adminDomain()) return callback(new BoxError(BoxError.CONFLICT, 'Cannot remove admin domain')); + if (domain === settings.dashboardDomain()) return callback(new BoxError(BoxError.CONFLICT, 'Cannot remove admin domain')); if (domain === settings.mailDomain()) return callback(new BoxError(BoxError.CONFLICT, 'Cannot remove mail domain. Change the mail server location first')); domaindb.del(domain, function (error) { @@ -568,8 +568,8 @@ function syncDnsRecords(options, progressCallback, callback) { progress += Math.round(100/(1+domains.length)); let locations = []; - if (domain.domain === settings.adminDomain()) locations.push({ subdomain: constants.ADMIN_LOCATION, domain: settings.adminDomain() }); - if (domain.domain === settings.mailDomain() && settings.mailFqdn() !== settings.adminFqdn()) locations.push({ subdomain: mailSubdomain, domain: settings.mailDomain() }); + if (domain.domain === settings.dashboardDomain()) locations.push({ subdomain: constants.DASHBOARD_LOCATION, domain: settings.dashboardDomain() }); + if (domain.domain === settings.mailDomain() && settings.mailFqdn() !== settings.dashboardFqdn()) locations.push({ subdomain: mailSubdomain, domain: settings.mailDomain() }); allApps.forEach(function (app) { const appLocations = [{ subdomain: app.location, domain: app.domain }].concat(app.alternateDomains).concat(app.aliasDomains); diff --git a/src/dyndns.js b/src/dyndns.js index 3c5043cbe..5885b4e55 100644 --- a/src/dyndns.js +++ b/src/dyndns.js @@ -32,7 +32,7 @@ function sync(auditSource, callback) { debug(`refreshDNS: updating ip from ${info.ip} to ${ip}`); - domains.upsertDnsRecords(constants.ADMIN_LOCATION, settings.adminDomain(), 'A', [ ip ], function (error) { + domains.upsertDnsRecords(constants.DASHBOARD_LOCATION, settings.dashboardDomain(), 'A', [ ip ], function (error) { if (error) return callback(error); debug('refreshDNS: updated admin location'); diff --git a/src/mail.js b/src/mail.js index fb8f447bf..559bcf868 100644 --- a/src/mail.js +++ b/src/mail.js @@ -723,8 +723,8 @@ function restartMail(callback) { services.getServiceConfig('mail', function (error, serviceConfig) { if (error) return callback(error); - debug(`restartMail: restarting mail container with mailFqdn:${settings.mailFqdn()} adminDomain:${settings.adminDomain()}`); - configureMail(settings.mailFqdn(), settings.adminDomain(), serviceConfig, callback); + debug(`restartMail: restarting mail container with mailFqdn:${settings.mailFqdn()} adminDomain:${settings.dashboardDomain()}`); + configureMail(settings.mailFqdn(), settings.dashboardDomain(), serviceConfig, callback); }); } diff --git a/src/mailer.js b/src/mailer.js index 08b1e952b..fd3931fff 100644 --- a/src/mailer.js +++ b/src/mailer.js @@ -47,7 +47,7 @@ function getMailConfig(callback) { callback(null, { cloudronName: cloudronName || '', - notificationFrom: `"${cloudronName}" `, + notificationFrom: `"${cloudronName}" `, supportEmail: supportConfig.email }); }); @@ -70,7 +70,7 @@ function sendMail(mailOptions, callback) { host: data.ip, port: data.port, auth: { - user: mailOptions.authUser || `no-reply@${settings.adminDomain()}`, + user: mailOptions.authUser || `no-reply@${settings.dashboardDomain()}`, pass: data.relayToken } })); @@ -122,11 +122,11 @@ function sendInvite(user, invitor, inviteLink) { var templateData = { user: user.displayName || user.username || user.email, - webadminUrl: settings.adminOrigin(), + webadminUrl: settings.dashboardOrigin(), inviteLink: inviteLink, invitor: invitor ? invitor.email : null, cloudronName: mailConfig.cloudronName, - cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' + cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar' }; var mailOptions = { @@ -168,7 +168,7 @@ function sendNewLoginLocation(user, loginLocation) { country, city, cloudronName: mailConfig.cloudronName, - cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' + cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar' }; const mailOptions = { @@ -197,9 +197,9 @@ function passwordReset(user) { var templateData = { user: user.displayName || user.username || user.email, - resetLink: `${settings.adminOrigin()}/login.html?resetToken=${user.resetToken}`, + resetLink: `${settings.dashboardOrigin()}/login.html?resetToken=${user.resetToken}`, cloudronName: mailConfig.cloudronName, - cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' + cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar' }; var mailOptions = { @@ -226,12 +226,12 @@ function boxUpdateAvailable(mailTo, updateInfo, callback) { var converter = new showdown.Converter(); var templateData = { - webadminUrl: settings.adminOrigin(), + webadminUrl: settings.dashboardOrigin(), newBoxVersion: updateInfo.version, changelog: updateInfo.changelog, changelogHTML: updateInfo.changelog.map(function (e) { return converter.makeHtml(e); }), cloudronName: mailConfig.cloudronName, - cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' + cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar' }; var templateDataText = JSON.parse(JSON.stringify(templateData)); @@ -266,10 +266,10 @@ function appUpdatesAvailable(mailTo, apps, callback) { }); var templateData = { - webadminUrl: settings.adminOrigin(), + webadminUrl: settings.dashboardOrigin(), apps: apps, cloudronName: mailConfig.cloudronName, - cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' + cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar' }; var templateDataText = JSON.parse(JSON.stringify(templateData)); diff --git a/src/notifications.js b/src/notifications.js index 9069802a1..86cafee1e 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -138,10 +138,10 @@ function oomEvent(eventId, app, addon, containerId, event, callback) { let title, message; if (app) { title = `The application at ${app.fqdn} ran out of memory.`; - message = `The application has been restarted automatically. If you see this notification often, consider increasing the [memory limit](${settings.adminOrigin()}/#/app/${app.id}/resources)`; + message = `The application has been restarted automatically. If you see this notification often, consider increasing the [memory limit](${settings.dashboardOrigin()}/#/app/${app.id}/resources)`; } else if (addon) { title = `The ${addon.name} service ran out of memory`; - message = `The service has been restarted automatically. If you see this notification often, consider increasing the [memory limit](${settings.adminOrigin()}/#/services)`; + message = `The service has been restarted automatically. If you see this notification often, consider increasing the [memory limit](${settings.dashboardOrigin()}/#/services)`; } forEachAdmin({ skip: [] }, function (admin, done) { @@ -243,7 +243,7 @@ function backupFailed(eventId, taskId, errorMessage, callback) { assert.strictEqual(typeof callback, 'function'); forEachSuperadmin({ skip: [] }, function (admin, callback) { - mailer.backupFailed(admin.email, errorMessage, `${settings.adminOrigin()}/logs.html?taskId=${taskId}`); + mailer.backupFailed(admin.email, errorMessage, `${settings.dashboardOrigin()}/logs.html?taskId=${taskId}`); add(admin.id, eventId, 'Backup failed', `Backup failed: ${errorMessage}. Logs are available [here](/logs.html?taskId=${taskId}).`, callback); }, callback); } diff --git a/src/provision.js b/src/provision.js index 6ad4c9674..e77b4122b 100644 --- a/src/provision.js +++ b/src/provision.js @@ -56,7 +56,7 @@ function unprovision(callback) { // TODO: also cancel any existing configureWebadmin task async.series([ - settings.setAdminLocation.bind(null, '', ''), + settings.setDashboardLocation.bind(null, '', ''), mail.clearDomains, domains.clear ], callback); @@ -101,7 +101,7 @@ function setup(dnsConfig, sysinfoConfig, auditSource, callback) { }; async.series([ - settings.setMailLocation.bind(null, domain, `${constants.ADMIN_LOCATION}.${domain}`), // default mail location. do this before we add the domain for upserting mail DNS + settings.setMailLocation.bind(null, domain, `${constants.DASHBOARD_LOCATION}.${domain}`), // default mail location. do this before we add the domain for upserting mail DNS domains.add.bind(null, domain, data, auditSource), sysinfo.testConfig.bind(null, sysinfoConfig) ], function (error) { @@ -111,7 +111,7 @@ function setup(dnsConfig, sysinfoConfig, auditSource, callback) { async.series([ settings.setSysinfoConfig.bind(null, sysinfoConfig), - cloudron.setupDnsAndCert.bind(null, constants.ADMIN_LOCATION, domain, auditSource, (progress) => setProgress('setup', progress.message, NOOP_CALLBACK)), + cloudron.setupDnsAndCert.bind(null, constants.DASHBOARD_LOCATION, domain, auditSource, (progress) => setProgress('setup', progress.message, NOOP_CALLBACK)), cloudron.setDashboardDomain.bind(null, domain, auditSource), setProgress.bind(null, 'setup', 'Done'), eventlog.add.bind(null, eventlog.ACTION_PROVISION, auditSource, { }) @@ -204,11 +204,11 @@ function restore(backupConfig, backupId, version, sysinfoConfig, options, auditS settings.setSysinfoConfig.bind(null, sysinfoConfig), reverseProxy.restoreFallbackCertificates, (done) => { - const adminDomain = settings.adminDomain(); // load this fresh from after the backup.restore + const adminDomain = settings.dashboardDomain(); // load this fresh from after the backup.restore async.series([ (next) => { if (options.skipDnsSetup) return next(); - cloudron.setupDnsAndCert(constants.ADMIN_LOCATION, adminDomain, auditSource, (progress) => setProgress('restore', progress.message, NOOP_CALLBACK), next); + cloudron.setupDnsAndCert(constants.DASHBOARD_LOCATION, adminDomain, auditSource, (progress) => setProgress('restore', progress.message, NOOP_CALLBACK), next); }, cloudron.setDashboardDomain.bind(null, adminDomain, auditSource) ], done); @@ -241,7 +241,7 @@ function getStatus(callback) { webServerOrigin: settings.webServerOrigin(), // used by CaaS tool cloudronName: allSettings[settings.CLOUDRON_NAME_KEY], footer: branding.renderFooter(allSettings[settings.FOOTER_KEY] || constants.FOOTER), - adminFqdn: settings.adminDomain() ? settings.adminFqdn() : null, + adminFqdn: settings.dashboardDomain() ? settings.dashboardFqdn() : null, language: allSettings[settings.LANGUAGE_KEY], activated: activated, provider: settings.provider() // used by setup wizard of marketplace images diff --git a/src/reverseproxy.js b/src/reverseproxy.js index a1337352c..18860841d 100644 --- a/src/reverseproxy.js +++ b/src/reverseproxy.js @@ -402,7 +402,7 @@ function writeDashboardNginxConfig(bundle, configFileName, vhost, callback) { const data = { sourceDir: path.resolve(__dirname, '..'), - adminOrigin: settings.adminOrigin(), + adminOrigin: settings.dashboardOrigin(), vhost: vhost, hasIPv6: sysinfo.hasIPv6(), endpoint: 'admin', @@ -429,7 +429,7 @@ function writeDashboardConfig(domain, callback) { domains.get(domain, function (error, domainObject) { if (error) return callback(error); - const adminFqdn = domains.fqdn(constants.ADMIN_LOCATION, domainObject); + const adminFqdn = domains.fqdn(constants.DASHBOARD_LOCATION, domainObject); getCertificatePath(adminFqdn, domainObject.domain, function (error, bundle) { if (error) return callback(error); @@ -459,7 +459,7 @@ function writeAppNginxConfig(app, fqdn, bundle, callback) { const data = { sourceDir: sourceDir, - adminOrigin: settings.adminOrigin(), + adminOrigin: settings.dashboardOrigin(), vhost: fqdn, hasIPv6: sysinfo.hasIPv6(), ip: app.containerIp, @@ -611,10 +611,10 @@ function renewCerts(options, auditSource, progressCallback, callback) { let appDomains = []; // add webadmin and mail domain - if (settings.mailFqdn() === settings.adminFqdn()) { - appDomains.push({ domain: settings.adminDomain(), fqdn: settings.adminFqdn(), type: 'webadmin+mail', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.adminFqdn()}.conf`) }); + if (settings.mailFqdn() === settings.dashboardFqdn()) { + appDomains.push({ domain: settings.dashboardDomain(), fqdn: settings.dashboardFqdn(), type: 'webadmin+mail', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.dashboardFqdn()}.conf`) }); } else { - appDomains.push({ domain: settings.adminDomain(), fqdn: settings.adminFqdn(), type: 'webadmin', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.adminFqdn()}.conf`) }); + appDomains.push({ domain: settings.dashboardDomain(), fqdn: settings.dashboardFqdn(), type: 'webadmin', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.dashboardFqdn()}.conf`) }); appDomains.push({ domain: settings.mailDomain(), fqdn: settings.mailFqdn(), type: 'mail' }); } @@ -657,7 +657,7 @@ function renewCerts(options, auditSource, progressCallback, callback) { // reconfigure since the cert changed if (appDomain.type === 'webadmin' || appDomain.type === 'webadmin+mail') { - return writeDashboardNginxConfig(bundle, `${settings.adminFqdn()}.conf`, settings.adminFqdn(), iteratorCallback); + return writeDashboardNginxConfig(bundle, `${settings.dashboardFqdn()}.conf`, settings.dashboardFqdn(), iteratorCallback); } else if (appDomain.type === 'primary') { return writeAppNginxConfig(appDomain.app, appDomain.fqdn, bundle, iteratorCallback); } else if (appDomain.type === 'alternate') { @@ -690,7 +690,7 @@ function renewCerts(options, auditSource, progressCallback, callback) { function removeAppConfigs() { for (let appConfigFile of fs.readdirSync(paths.NGINX_APPCONFIG_DIR)) { - if (appConfigFile !== constants.NGINX_DEFAULT_CONFIG_FILE_NAME && !appConfigFile.startsWith(constants.ADMIN_LOCATION)) { + if (appConfigFile !== constants.NGINX_DEFAULT_CONFIG_FILE_NAME && !appConfigFile.startsWith(constants.DASHBOARD_LOCATION)) { fs.unlinkSync(path.join(paths.NGINX_APPCONFIG_DIR, appConfigFile)); } } @@ -716,7 +716,7 @@ function writeDefaultConfig(options, callback) { const data = { sourceDir: path.resolve(__dirname, '..'), - adminOrigin: settings.adminOrigin(), + adminOrigin: settings.dashboardOrigin(), vhost: '', hasIPv6: sysinfo.hasIPv6(), endpoint: options.activated ? 'ip' : 'setup', diff --git a/src/routes/test/apps-test.js b/src/routes/test/apps-test.js index e2fb7a49f..820e63956 100644 --- a/src/routes/test/apps-test.js +++ b/src/routes/test/apps-test.js @@ -521,8 +521,8 @@ describe('App API', function () { docker.getContainer(appEntry.containerId).inspect(function (error, data) { expect(error).to.not.be.ok(); expect(data.Config.ExposedPorts['7777/tcp']).to.eql({ }); - expect(data.Config.Env).to.contain('CLOUDRON_WEBADMIN_ORIGIN=' + settings.adminOrigin()); - expect(data.Config.Env).to.contain('CLOUDRON_API_ORIGIN=' + settings.adminOrigin()); + expect(data.Config.Env).to.contain('CLOUDRON_WEBADMIN_ORIGIN=' + settings.dashboardOrigin()); + expect(data.Config.Env).to.contain('CLOUDRON_API_ORIGIN=' + settings.dashboardOrigin()); expect(data.Config.Env).to.contain('CLOUDRON=1'); expect(data.Config.Env).to.contain('CLOUDRON_APP_ORIGIN=https://' + APP_LOCATION + '.' + DOMAIN_0.domain); expect(data.Config.Env).to.contain('CLOUDRON_APP_DOMAIN=' + APP_LOCATION + '.' + DOMAIN_0.domain); diff --git a/src/routes/test/appstore-test.js b/src/routes/test/appstore-test.js index 67f774576..d0c75822f 100644 --- a/src/routes/test/appstore-test.js +++ b/src/routes/test/appstore-test.js @@ -28,7 +28,7 @@ function setup(done) { database._clear, settings._setApiServerOrigin.bind(null, 'http://localhost:6060'), - settings.setAdminLocation.bind(null, 'appstore-test.example.com', 'my.appstore-test.example.com'), + settings.setDashboardLocation.bind(null, 'appstore-test.example.com', 'my.appstore-test.example.com'), function createAdmin(callback) { superagent.post(SERVER_URL + '/api/v1/cloudron/activate') diff --git a/src/routes/test/cloudron-test.js b/src/routes/test/cloudron-test.js index 54a86b9b9..8eb9e92ce 100644 --- a/src/routes/test/cloudron-test.js +++ b/src/routes/test/cloudron-test.js @@ -185,7 +185,7 @@ describe('Cloudron API', function () { expect(result.statusCode).to.equal(200); expect(result.body.apiServerOrigin).to.eql('http://localhost:6060'); expect(result.body.webServerOrigin).to.eql('https://cloudron.io'); - expect(result.body.adminFqdn).to.eql(settings.adminFqdn()); + expect(result.body.adminFqdn).to.eql(settings.dashboardFqdn()); expect(result.body.version).to.eql(constants.VERSION); expect(result.body.cloudronName).to.be.a('string'); @@ -200,7 +200,7 @@ describe('Cloudron API', function () { expect(result.statusCode).to.equal(200); expect(result.body.apiServerOrigin).to.eql('http://localhost:6060'); expect(result.body.webServerOrigin).to.eql('https://cloudron.io'); - expect(result.body.adminFqdn).to.eql(settings.adminFqdn()); + expect(result.body.adminFqdn).to.eql(settings.dashboardFqdn()); expect(result.body.version).to.eql(constants.VERSION); expect(result.body.cloudronName).to.be.a('string'); done(); diff --git a/src/routes/test/mail-test.js b/src/routes/test/mail-test.js index 4f5c162c8..03156b9ff 100644 --- a/src/routes/test/mail-test.js +++ b/src/routes/test/mail-test.js @@ -20,7 +20,7 @@ var async = require('async'), var SERVER_URL = 'http://localhost:' + constants.PORT; -const ADMIN_DOMAIN = { +const DASHBOARD_DOMAIN = { domain: 'admin.com', zoneName: 'admin.com', config: {}, @@ -49,7 +49,7 @@ function setup(done) { function dnsSetup(callback) { superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: ADMIN_DOMAIN.provider, domain: ADMIN_DOMAIN.domain, config: ADMIN_DOMAIN.config, tlsConfig: { provider: 'fallback' } } }) + .send({ dnsConfig: { provider: DASHBOARD_DOMAIN.provider, domain: DASHBOARD_DOMAIN.domain, config: DASHBOARD_DOMAIN.config, tlsConfig: { provider: 'fallback' } } }) .end(function (error, result) { expect(result).to.be.ok(); expect(result.statusCode).to.eql(200); @@ -170,7 +170,7 @@ describe('Mail API', function () { callback(null, dnsAnswerQueue[hostname][type]); }; - const suffix = crypto.createHash('sha256').update(settings.adminDomain()).digest('hex').substr(0, 6); + const suffix = crypto.createHash('sha256').update(settings.dashboardDomain()).digest('hex').substr(0, 6); dkimDomain = `cloudron-${suffix}._domainkey.${DOMAIN_0.domain}`; spfDomain = DOMAIN_0.domain; mxDomain = DOMAIN_0.domain; @@ -230,7 +230,7 @@ describe('Mail API', function () { expect(res.body.dns.spf.domain).to.eql(spfDomain); expect(res.body.dns.spf.type).to.eql('TXT'); expect(res.body.dns.spf.value).to.eql(null); - expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.adminFqdn() + ' ~all'); + expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' ~all'); expect(res.body.dns.spf.status).to.eql(false); expect(res.body.dns.dmarc).to.be.an('object'); @@ -269,7 +269,7 @@ describe('Mail API', function () { expect(res.statusCode).to.equal(200); expect(res.body.dns.spf).to.be.an('object'); - expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.adminFqdn() + ' ~all'); + expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' ~all'); expect(res.body.dns.spf.status).to.eql(false); expect(res.body.dns.spf.value).to.eql(null); @@ -311,7 +311,7 @@ describe('Mail API', function () { expect(res.statusCode).to.equal(200); expect(res.body.dns.spf).to.be.an('object'); - expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.adminFqdn() + ' a:random.com ~all'); + expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' a:random.com ~all'); expect(res.body.dns.spf.status).to.eql(false); expect(res.body.dns.spf.value).to.eql('v=spf1 a:random.com ~all'); @@ -387,7 +387,7 @@ describe('Mail API', function () { dnsAnswerQueue[mxDomain].MX = [ { priority: '10', exchange: settings.mailFqdn() } ]; dnsAnswerQueue[dmarcDomain].TXT = [['v=DMARC1; p=reject; pct=100']]; dnsAnswerQueue[dkimDomain].TXT = [['v=DKIM1; t=s; p=', mail._readDkimPublicKeySync(DOMAIN_0.domain) ]]; - dnsAnswerQueue[spfDomain].TXT = [['v=spf1 a:' + settings.adminFqdn() + ' ~all']]; + dnsAnswerQueue[spfDomain].TXT = [['v=spf1 a:' + settings.dashboardFqdn() + ' ~all']]; superagent.get(SERVER_URL + '/api/v1/mail/' + DOMAIN_0.domain + '/status') .query({ access_token: token }) @@ -404,8 +404,8 @@ describe('Mail API', function () { expect(res.body.dns.spf).to.be.an('object'); expect(res.body.dns.spf.domain).to.eql(spfDomain); expect(res.body.dns.spf.type).to.eql('TXT'); - expect(res.body.dns.spf.value).to.eql('v=spf1 a:' + settings.adminFqdn() + ' ~all'); - expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.adminFqdn() + ' ~all'); + expect(res.body.dns.spf.value).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' ~all'); + expect(res.body.dns.spf.expected).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' ~all'); expect(res.body.dns.spf.status).to.eql(true); expect(res.body.dns.dmarc).to.be.an('object'); diff --git a/src/services.js b/src/services.js index bc07d9d0b..7940c01c3 100644 --- a/src/services.js +++ b/src/services.js @@ -965,10 +965,10 @@ function setupTurn(app, options, callback) { if (!turnSecret) return callback(new BoxError(BoxError.ADDONS_ERROR, 'Turn secret is missing')); const env = [ - { name: 'CLOUDRON_STUN_SERVER', value: settings.adminFqdn() }, + { name: 'CLOUDRON_STUN_SERVER', value: settings.dashboardFqdn() }, { name: 'CLOUDRON_STUN_PORT', value: '3478' }, { name: 'CLOUDRON_STUN_TLS_PORT', value: '5349' }, - { name: 'CLOUDRON_TURN_SERVER', value: settings.adminFqdn() }, + { name: 'CLOUDRON_TURN_SERVER', value: settings.dashboardFqdn() }, { name: 'CLOUDRON_TURN_PORT', value: '3478' }, { name: 'CLOUDRON_TURN_TLS_PORT', value: '5349' }, { name: 'CLOUDRON_TURN_SECRET', value: turnSecret } @@ -1564,7 +1564,7 @@ function startTurn(existingInfra, serviceConfig, callback) { const tag = infra.images.turn.tag; const memoryLimit = serviceConfig.memoryLimit || SERVICES['turn'].defaultMemoryLimit; const memory = system.getMemoryAllocation(memoryLimit); - const realm = settings.adminFqdn(); + const realm = settings.dashboardFqdn(); const blobGet = util.callbackify(blobs.get); blobGet(blobs.ADDON_TURN_SECRET, function (error, turnSecret) { diff --git a/src/settings.js b/src/settings.js index b418c38d9..3ac2f835a 100644 --- a/src/settings.js +++ b/src/settings.js @@ -67,15 +67,15 @@ exports = module.exports = { // these values come from the cache apiServerOrigin, webServerOrigin, - adminDomain, - setAdminLocation, + dashboardDomain, + setDashboardLocation, setMailLocation, mailFqdn, mailDomain, - adminOrigin, - adminFqdn, + dashboardOrigin, + dashboardFqdn, isDemo, @@ -106,8 +106,8 @@ exports = module.exports = { API_SERVER_ORIGIN_KEY: 'api_server_origin', WEB_SERVER_ORIGIN_KEY: 'web_server_origin', - ADMIN_DOMAIN_KEY: 'admin_domain', - ADMIN_FQDN_KEY: 'admin_fqdn', + DASHBOARD_DOMAIN_KEY: 'admin_domain', + DASHBOARD_FQDN_KEY: 'admin_fqdn', MAIL_DOMAIN_KEY: 'mail_domain', MAIL_FQDN_KEY: 'mail_fqdn', PROVIDER_KEY: 'provider', @@ -173,8 +173,8 @@ let gDefaults = (function () { mandatory2FA: false }; - result[exports.ADMIN_DOMAIN_KEY] = ''; - result[exports.ADMIN_FQDN_KEY] = ''; + result[exports.DASHBOARD_DOMAIN_KEY] = ''; + result[exports.DASHBOARD_FQDN_KEY] = ''; result[exports.MAIL_DOMAIN_KEY] = ''; result[exports.MAIL_FQDN_KEY] = ''; @@ -792,8 +792,8 @@ function initCache(callback) { gCache = { apiServerOrigin: allSettings[exports.API_SERVER_ORIGIN_KEY], webServerOrigin: allSettings[exports.WEB_SERVER_ORIGIN_KEY], - adminDomain: allSettings[exports.ADMIN_DOMAIN_KEY], - adminFqdn: allSettings[exports.ADMIN_FQDN_KEY], + dashboardDomain: allSettings[exports.DASHBOARD_DOMAIN_KEY], + dashboardFqdn: allSettings[exports.DASHBOARD_FQDN_KEY], mailDomain: allSettings[exports.MAIL_DOMAIN_KEY], mailFqdn: allSettings[exports.MAIL_FQDN_KEY], isDemo: allSettings[exports.DEMO_KEY], @@ -805,19 +805,19 @@ function initCache(callback) { } // this is together so we can do this in a transaction later -function setAdminLocation(adminDomain, adminFqdn, callback) { - assert.strictEqual(typeof adminDomain, 'string'); - assert.strictEqual(typeof adminFqdn, 'string'); +function setDashboardLocation(dashboardDomain, dashboardFqdn, callback) { + assert.strictEqual(typeof dashboardFqdn, 'string'); + assert.strictEqual(typeof dashboardFqdn, 'string'); assert.strictEqual(typeof callback, 'function'); - settingsdb.set(exports.ADMIN_DOMAIN_KEY, adminDomain, function (error) { + settingsdb.set(exports.DASHBOARD_DOMAIN_KEY, dashboardDomain, function (error) { if (error) return callback(error); - settingsdb.set(exports.ADMIN_FQDN_KEY, adminFqdn, function (error) { + settingsdb.set(exports.DASHBOARD_FQDN_KEY, dashboardDomain, function (error) { if (error) return callback(error); - gCache.adminDomain = adminDomain; - gCache.adminFqdn = adminFqdn; + gCache.dashboardDomain = dashboardDomain; + gCache.dashboardFqdn = dashboardFqdn; callback(null); }); @@ -884,9 +884,9 @@ function setFooter(footer, callback) { function provider() { return gCache.provider; } function apiServerOrigin() { return gCache.apiServerOrigin; } function webServerOrigin() { return gCache.webServerOrigin; } -function adminDomain() { return gCache.adminDomain; } -function adminFqdn() { return gCache.adminFqdn; } +function dashboardDomain() { return gCache.dashboardDomain; } +function dashboardFqdn() { return gCache.dashboardFqdn; } function isDemo() { return gCache.isDemo; } function mailDomain() { return gCache.mailDomain; } function mailFqdn() { return gCache.mailFqdn; } -function adminOrigin() { return 'https://' + adminFqdn(); } +function dashboardOrigin() { return 'https://' + dashboardFqdn(); } diff --git a/src/test/appstore-test.js b/src/test/appstore-test.js index 2e9ab8a44..c7e11451a 100644 --- a/src/test/appstore-test.js +++ b/src/test/appstore-test.js @@ -15,7 +15,7 @@ var async = require('async'), settings = require('../settings.js'), settingsdb = require('../settingsdb.js'); -const ADMIN_DOMAIN = 'appstore-test.example.com'; +const DASHBOARD_DOMAIN = 'appstore-test.example.com'; const APPSTORE_TOKEN = 'appstoretoken'; const APP_ID = 'appid'; const APPSTORE_APP_ID = 'appstoreappid'; @@ -28,7 +28,7 @@ function setup(done) { database.initialize, database._clear, settings._setApiServerOrigin.bind(null, MOCK_API_SERVER_ORIGIN), - settings.setAdminLocation.bind(null, ADMIN_DOMAIN, 'my.' + ADMIN_DOMAIN), + settings.setDashboardLocation.bind(null, DASHBOARD_DOMAIN, 'my.' + DASHBOARD_DOMAIN), settings.initCache ], done); } diff --git a/src/test/apptask-test.js b/src/test/apptask-test.js index f0ac6da32..558b58a4d 100644 --- a/src/test/apptask-test.js +++ b/src/test/apptask-test.js @@ -101,7 +101,7 @@ describe('apptask', function () { database.initialize, database._clear, blobs.initSecrets, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), userdb.add.bind(null, ADMIN.id, ADMIN), appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP) diff --git a/src/test/backups-test.js b/src/test/backups-test.js index fd901973b..a387b50f7 100644 --- a/src/test/backups-test.js +++ b/src/test/backups-test.js @@ -182,7 +182,7 @@ describe('backups', function () { fs.mkdir.bind(null, BACKUP_DIR, { recursive: true }), database.initialize, database._clear, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), settingsdb.set.bind(null, settings.BACKUP_CONFIG_KEY, JSON.stringify({ provider: 'filesystem', diff --git a/src/test/dns-test.js b/src/test/dns-test.js index 6b5e012c4..abadafa8f 100644 --- a/src/test/dns-test.js +++ b/src/test/dns-test.js @@ -36,7 +36,7 @@ describe('dns provider', function () { async.series([ database.initialize, database._clear, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE) ], done); }); diff --git a/src/test/domains-test.js b/src/test/domains-test.js index c838b8be4..6f10b603b 100644 --- a/src/test/domains-test.js +++ b/src/test/domains-test.js @@ -82,7 +82,7 @@ describe('Domains', function () { async.series([ database.initialize, database._clear, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP) ], done); diff --git a/src/test/externalldap-test.js b/src/test/externalldap-test.js index 96f779e3d..c3edbf857 100644 --- a/src/test/externalldap-test.js +++ b/src/test/externalldap-test.js @@ -226,7 +226,7 @@ function setup(done) { domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), cleanupUsers, createOwner, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain) + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain) ], done); } diff --git a/src/test/ldap-test.js b/src/test/ldap-test.js index f269fa05d..f1dd42584 100644 --- a/src/test/ldap-test.js +++ b/src/test/ldap-test.js @@ -89,7 +89,7 @@ function setup(done) { database.initialize.bind(null), database._clear.bind(null), ldapServer.start.bind(null), - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), function (callback) { users.createOwner(USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE, function (error, result) { diff --git a/src/test/mail-test.js b/src/test/mail-test.js index 9cd224756..9d405847b 100644 --- a/src/test/mail-test.js +++ b/src/test/mail-test.js @@ -34,7 +34,7 @@ function setup(done) { database.initialize, database._clear, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), ], done); } diff --git a/src/test/reverseproxy-test.js b/src/test/reverseproxy-test.js index d3f54a58e..7127e7f63 100644 --- a/src/test/reverseproxy-test.js +++ b/src/test/reverseproxy-test.js @@ -30,7 +30,7 @@ function setup(done) { database.initialize, database._clear, blobs.initSecrets, - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), settings.initCache ], done); diff --git a/src/test/updatechecker-test.js b/src/test/updatechecker-test.js index 9319d86ea..2f609bbf5 100644 --- a/src/test/updatechecker-test.js +++ b/src/test/updatechecker-test.js @@ -33,7 +33,7 @@ var USER_0 = { permissions: null }; -const ADMIN_DOMAIN = 'updatechecker-test.example.com'; +const DASHBOARD_DOMAIN = 'updatechecker-test.example.com'; const DOMAIN_0 = { domain: 'example.com', @@ -81,10 +81,10 @@ describe('updatechecker - box', function () { database.initialize, database._clear, settings._setApiServerOrigin.bind(null, 'http://localhost:4444'), - settings.setAdminLocation.bind(null, ADMIN_DOMAIN, 'my.' + ADMIN_DOMAIN), + settings.setDashboardLocation.bind(null, DASHBOARD_DOMAIN, 'my.' + DASHBOARD_DOMAIN), cron.startJobs, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), users.createOwner.bind(null, USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE), settings.setAutoupdatePattern.bind(null, constants.AUTOUPDATE_PATTERN_NEVER), settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, 'atoken'), @@ -183,7 +183,7 @@ describe('updatechecker - app', function () { settings._setApiServerOrigin.bind(null, 'http://localhost:4444'), cron.startJobs, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), - settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), + settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain), users.createOwner.bind(null, USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE), appdb.add.bind(null, APP_0.id, APP_0.appStoreId, APP_0.manifest, APP_0.location, APP_0.domain, apps._translatePortBindings(APP_0.portBindings, APP_0.manifest), APP_0), settings.setAutoupdatePattern.bind(null, constants.AUTOUPDATE_PATTERN_NEVER), diff --git a/src/users.js b/src/users.js index 3bf786987..7f3b2ffd4 100644 --- a/src/users.js +++ b/src/users.js @@ -631,7 +631,7 @@ function getOwner(callback) { } function inviteLink(user, directoryConfig) { - let link = `${settings.adminOrigin()}/setupaccount.html?resetToken=${user.resetToken}&email=${encodeURIComponent(user.email)}`; + let link = `${settings.dashboardOrigin()}/setupaccount.html?resetToken=${user.resetToken}&email=${encodeURIComponent(user.email)}`; if (user.username) link += `&username=${encodeURIComponent(user.username)}`; if (user.displayName) link += `&displayName=${encodeURIComponent(user.displayName)}`; @@ -719,7 +719,7 @@ function setTwoFactorAuthenticationSecret(userId, callback) { if (result.twoFactorAuthenticationEnabled) return callback(new BoxError(BoxError.ALREADY_EXISTS)); - var secret = speakeasy.generateSecret({ name: `Cloudron ${settings.adminFqdn()} (${result.username})` }); + var secret = speakeasy.generateSecret({ name: `Cloudron ${settings.dashboardFqdn()} (${result.username})` }); userdb.update(userId, { twoFactorAuthenticationSecret: secret.base32, twoFactorAuthenticationEnabled: false }, function (error) { if (error) return callback(error); @@ -863,7 +863,7 @@ function getAvatarUrl(user, callback) { userdb.getAvatar(user.id, function (error, avatar) { if (error) return callback(error); - if (avatar) return callback(null, `${settings.adminOrigin()}/api/v1/profile/avatar/${user.id}`); + if (avatar) return callback(null, `${settings.dashboardOrigin()}/api/v1/profile/avatar/${user.id}`); const emailHash = require('crypto').createHash('md5').update(user.email).digest('hex'); return callback(null, `https://www.gravatar.com/avatar/${emailHash}.jpg`);