admin -> dashboard

This commit is contained in:
Girish Ramakrishnan
2021-05-05 12:29:04 -07:00
parent cc9b43450c
commit 44ac406e57
28 changed files with 104 additions and 104 deletions
+1 -1
View File
@@ -385,7 +385,7 @@ function registerWithLoginCredentials(options, callback) {
login(options.email, options.password, options.totpToken || '', function (error, result) { login(options.email, options.password, options.totpToken || '', function (error, result) {
if (error) return callback(error); 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);
}); });
}); });
}); });
+8 -8
View File
@@ -133,9 +133,9 @@ function runStartupTasks() {
// always generate webadmin config since we have no versioning mechanism for the ejs // always generate webadmin config since we have no versioning mechanism for the ejs
function (callback) { 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 // check activation state and start the platform
@@ -174,8 +174,8 @@ function getConfig(callback) {
callback(null, { callback(null, {
apiServerOrigin: settings.apiServerOrigin(), apiServerOrigin: settings.apiServerOrigin(),
webServerOrigin: settings.webServerOrigin(), webServerOrigin: settings.webServerOrigin(),
adminDomain: settings.adminDomain(), adminDomain: settings.dashboardDomain(),
adminFqdn: settings.adminFqdn(), adminFqdn: settings.dashboardFqdn(),
mailFqdn: settings.mailFqdn(), mailFqdn: settings.mailFqdn(),
version: constants.VERSION, version: constants.VERSION,
isDemo: settings.isDemo(), isDemo: settings.isDemo(),
@@ -295,7 +295,7 @@ function prepareDashboardDomain(domain, auditSource, callback) {
domains.get(domain, function (error, domainObject) { domains.get(domain, function (error, domainObject) {
if (error) return callback(error); 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) { apps.getAll(function (error, result) {
if (error) return callback(error); if (error) return callback(error);
@@ -303,7 +303,7 @@ function prepareDashboardDomain(domain, auditSource, callback) {
const conflict = result.filter(app => app.fqdn === fqdn); 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')); 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); if (error) return callback(error);
tasks.startTask(taskId, {}, NOOP_CALLBACK); tasks.startTask(taskId, {}, NOOP_CALLBACK);
@@ -328,9 +328,9 @@ function setDashboardDomain(domain, auditSource, callback) {
reverseProxy.writeDashboardConfig(domain, function (error) { reverseProxy.writeDashboardConfig(domain, function (error) {
if (error) return callback(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); if (error) return callback(error);
appstore.updateCloudron({ domain }, NOOP_CALLBACK); appstore.updateCloudron({ domain }, NOOP_CALLBACK);
+1 -1
View File
@@ -22,7 +22,7 @@ exports = module.exports = {
'admins', 'users' // ldap code uses 'users' pseudo group 'admins', 'users' // ldap code uses 'users' pseudo group
], ],
ADMIN_LOCATION: 'my', DASHBOARD_LOCATION: 'my',
PORT: CLOUDRON ? 3000 : 5454, PORT: CLOUDRON ? 3000 : 5454,
INTERNAL_SMTP_PORT: 2525, // this value comes from the mail container INTERNAL_SMTP_PORT: 2525, // this value comes from the mail container
+2 -2
View File
@@ -319,8 +319,8 @@ function createSubcontainer(app, name, cmd, options, callback) {
'CLOUDRON=1', 'CLOUDRON=1',
'CLOUDRON_PROXY_IP=172.18.0.1', 'CLOUDRON_PROXY_IP=172.18.0.1',
`CLOUDRON_APP_HOSTNAME=${app.id}`, `CLOUDRON_APP_HOSTNAME=${app.id}`,
`${envPrefix}WEBADMIN_ORIGIN=${settings.adminOrigin()}`, `${envPrefix}WEBADMIN_ORIGIN=${settings.dashboardOrigin()}`,
`${envPrefix}API_ORIGIN=${settings.adminOrigin()}`, `${envPrefix}API_ORIGIN=${settings.dashboardOrigin()}`,
`${envPrefix}APP_ORIGIN=https://${domain}`, `${envPrefix}APP_ORIGIN=https://${domain}`,
`${envPrefix}APP_DOMAIN=${domain}` `${envPrefix}APP_DOMAIN=${domain}`
]; ];
+6 -6
View File
@@ -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 (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 // workaround https://github.com/oncletom/tld.js/issues/73
var tmp = hostname.replace('_', '-'); var tmp = hostname.replace('_', '-');
@@ -198,7 +198,7 @@ function add(domain, data, auditSource, callback) {
if (!dkimSelector) { 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 // 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}`; dkimSelector = `cloudron-${suffix}`;
} }
@@ -254,7 +254,7 @@ function update(domain, data, auditSource, callback) {
let { zoneName, provider, config, fallbackCertificate, tlsConfig, wellKnown } = data; 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) { domaindb.get(domain, function (error, domainObject) {
if (error) return callback(error); if (error) return callback(error);
@@ -313,7 +313,7 @@ function del(domain, auditSource, callback) {
assert.strictEqual(typeof auditSource, 'object'); assert.strictEqual(typeof auditSource, 'object');
assert.strictEqual(typeof callback, 'function'); 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')); 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) { domaindb.del(domain, function (error) {
@@ -568,8 +568,8 @@ function syncDnsRecords(options, progressCallback, callback) {
progress += Math.round(100/(1+domains.length)); progress += Math.round(100/(1+domains.length));
let locations = []; let locations = [];
if (domain.domain === settings.adminDomain()) locations.push({ subdomain: constants.ADMIN_LOCATION, domain: settings.adminDomain() }); if (domain.domain === settings.dashboardDomain()) locations.push({ subdomain: constants.DASHBOARD_LOCATION, domain: settings.dashboardDomain() });
if (domain.domain === settings.mailDomain() && settings.mailFqdn() !== settings.adminFqdn()) locations.push({ subdomain: mailSubdomain, domain: settings.mailDomain() }); if (domain.domain === settings.mailDomain() && settings.mailFqdn() !== settings.dashboardFqdn()) locations.push({ subdomain: mailSubdomain, domain: settings.mailDomain() });
allApps.forEach(function (app) { allApps.forEach(function (app) {
const appLocations = [{ subdomain: app.location, domain: app.domain }].concat(app.alternateDomains).concat(app.aliasDomains); const appLocations = [{ subdomain: app.location, domain: app.domain }].concat(app.alternateDomains).concat(app.aliasDomains);
+1 -1
View File
@@ -32,7 +32,7 @@ function sync(auditSource, callback) {
debug(`refreshDNS: updating ip from ${info.ip} to ${ip}`); 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); if (error) return callback(error);
debug('refreshDNS: updated admin location'); debug('refreshDNS: updated admin location');
+2 -2
View File
@@ -723,8 +723,8 @@ function restartMail(callback) {
services.getServiceConfig('mail', function (error, serviceConfig) { services.getServiceConfig('mail', function (error, serviceConfig) {
if (error) return callback(error); if (error) return callback(error);
debug(`restartMail: restarting mail container with mailFqdn:${settings.mailFqdn()} adminDomain:${settings.adminDomain()}`); debug(`restartMail: restarting mail container with mailFqdn:${settings.mailFqdn()} adminDomain:${settings.dashboardDomain()}`);
configureMail(settings.mailFqdn(), settings.adminDomain(), serviceConfig, callback); configureMail(settings.mailFqdn(), settings.dashboardDomain(), serviceConfig, callback);
}); });
} }
+11 -11
View File
@@ -47,7 +47,7 @@ function getMailConfig(callback) {
callback(null, { callback(null, {
cloudronName: cloudronName || '', cloudronName: cloudronName || '',
notificationFrom: `"${cloudronName}" <no-reply@${settings.adminDomain()}>`, notificationFrom: `"${cloudronName}" <no-reply@${settings.dashboardDomain()}>`,
supportEmail: supportConfig.email supportEmail: supportConfig.email
}); });
}); });
@@ -70,7 +70,7 @@ function sendMail(mailOptions, callback) {
host: data.ip, host: data.ip,
port: data.port, port: data.port,
auth: { auth: {
user: mailOptions.authUser || `no-reply@${settings.adminDomain()}`, user: mailOptions.authUser || `no-reply@${settings.dashboardDomain()}`,
pass: data.relayToken pass: data.relayToken
} }
})); }));
@@ -122,11 +122,11 @@ function sendInvite(user, invitor, inviteLink) {
var templateData = { var templateData = {
user: user.displayName || user.username || user.email, user: user.displayName || user.username || user.email,
webadminUrl: settings.adminOrigin(), webadminUrl: settings.dashboardOrigin(),
inviteLink: inviteLink, inviteLink: inviteLink,
invitor: invitor ? invitor.email : null, invitor: invitor ? invitor.email : null,
cloudronName: mailConfig.cloudronName, cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar'
}; };
var mailOptions = { var mailOptions = {
@@ -168,7 +168,7 @@ function sendNewLoginLocation(user, loginLocation) {
country, country,
city, city,
cloudronName: mailConfig.cloudronName, cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar'
}; };
const mailOptions = { const mailOptions = {
@@ -197,9 +197,9 @@ function passwordReset(user) {
var templateData = { var templateData = {
user: user.displayName || user.username || user.email, 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, cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar'
}; };
var mailOptions = { var mailOptions = {
@@ -226,12 +226,12 @@ function boxUpdateAvailable(mailTo, updateInfo, callback) {
var converter = new showdown.Converter(); var converter = new showdown.Converter();
var templateData = { var templateData = {
webadminUrl: settings.adminOrigin(), webadminUrl: settings.dashboardOrigin(),
newBoxVersion: updateInfo.version, newBoxVersion: updateInfo.version,
changelog: updateInfo.changelog, changelog: updateInfo.changelog,
changelogHTML: updateInfo.changelog.map(function (e) { return converter.makeHtml(e); }), changelogHTML: updateInfo.changelog.map(function (e) { return converter.makeHtml(e); }),
cloudronName: mailConfig.cloudronName, cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar'
}; };
var templateDataText = JSON.parse(JSON.stringify(templateData)); var templateDataText = JSON.parse(JSON.stringify(templateData));
@@ -266,10 +266,10 @@ function appUpdatesAvailable(mailTo, apps, callback) {
}); });
var templateData = { var templateData = {
webadminUrl: settings.adminOrigin(), webadminUrl: settings.dashboardOrigin(),
apps: apps, apps: apps,
cloudronName: mailConfig.cloudronName, cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar' cloudronAvatarUrl: settings.dashboardOrigin() + '/api/v1/cloudron/avatar'
}; };
var templateDataText = JSON.parse(JSON.stringify(templateData)); var templateDataText = JSON.parse(JSON.stringify(templateData));
+3 -3
View File
@@ -138,10 +138,10 @@ function oomEvent(eventId, app, addon, containerId, event, callback) {
let title, message; let title, message;
if (app) { if (app) {
title = `The application at ${app.fqdn} ran out of memory.`; 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) { } else if (addon) {
title = `The ${addon.name} service ran out of memory`; 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) { forEachAdmin({ skip: [] }, function (admin, done) {
@@ -243,7 +243,7 @@ function backupFailed(eventId, taskId, errorMessage, callback) {
assert.strictEqual(typeof callback, 'function'); assert.strictEqual(typeof callback, 'function');
forEachSuperadmin({ skip: [] }, function (admin, callback) { 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); add(admin.id, eventId, 'Backup failed', `Backup failed: ${errorMessage}. Logs are available [here](/logs.html?taskId=${taskId}).`, callback);
}, callback); }, callback);
} }
+6 -6
View File
@@ -56,7 +56,7 @@ function unprovision(callback) {
// TODO: also cancel any existing configureWebadmin task // TODO: also cancel any existing configureWebadmin task
async.series([ async.series([
settings.setAdminLocation.bind(null, '', ''), settings.setDashboardLocation.bind(null, '', ''),
mail.clearDomains, mail.clearDomains,
domains.clear domains.clear
], callback); ], callback);
@@ -101,7 +101,7 @@ function setup(dnsConfig, sysinfoConfig, auditSource, callback) {
}; };
async.series([ 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), domains.add.bind(null, domain, data, auditSource),
sysinfo.testConfig.bind(null, sysinfoConfig) sysinfo.testConfig.bind(null, sysinfoConfig)
], function (error) { ], function (error) {
@@ -111,7 +111,7 @@ function setup(dnsConfig, sysinfoConfig, auditSource, callback) {
async.series([ async.series([
settings.setSysinfoConfig.bind(null, sysinfoConfig), 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), cloudron.setDashboardDomain.bind(null, domain, auditSource),
setProgress.bind(null, 'setup', 'Done'), setProgress.bind(null, 'setup', 'Done'),
eventlog.add.bind(null, eventlog.ACTION_PROVISION, auditSource, { }) 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), settings.setSysinfoConfig.bind(null, sysinfoConfig),
reverseProxy.restoreFallbackCertificates, reverseProxy.restoreFallbackCertificates,
(done) => { (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([ async.series([
(next) => { (next) => {
if (options.skipDnsSetup) return 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) cloudron.setDashboardDomain.bind(null, adminDomain, auditSource)
], done); ], done);
@@ -241,7 +241,7 @@ function getStatus(callback) {
webServerOrigin: settings.webServerOrigin(), // used by CaaS tool webServerOrigin: settings.webServerOrigin(), // used by CaaS tool
cloudronName: allSettings[settings.CLOUDRON_NAME_KEY], cloudronName: allSettings[settings.CLOUDRON_NAME_KEY],
footer: branding.renderFooter(allSettings[settings.FOOTER_KEY] || constants.FOOTER), 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], language: allSettings[settings.LANGUAGE_KEY],
activated: activated, activated: activated,
provider: settings.provider() // used by setup wizard of marketplace images provider: settings.provider() // used by setup wizard of marketplace images
+9 -9
View File
@@ -402,7 +402,7 @@ function writeDashboardNginxConfig(bundle, configFileName, vhost, callback) {
const data = { const data = {
sourceDir: path.resolve(__dirname, '..'), sourceDir: path.resolve(__dirname, '..'),
adminOrigin: settings.adminOrigin(), adminOrigin: settings.dashboardOrigin(),
vhost: vhost, vhost: vhost,
hasIPv6: sysinfo.hasIPv6(), hasIPv6: sysinfo.hasIPv6(),
endpoint: 'admin', endpoint: 'admin',
@@ -429,7 +429,7 @@ function writeDashboardConfig(domain, callback) {
domains.get(domain, function (error, domainObject) { domains.get(domain, function (error, domainObject) {
if (error) return callback(error); 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) { getCertificatePath(adminFqdn, domainObject.domain, function (error, bundle) {
if (error) return callback(error); if (error) return callback(error);
@@ -459,7 +459,7 @@ function writeAppNginxConfig(app, fqdn, bundle, callback) {
const data = { const data = {
sourceDir: sourceDir, sourceDir: sourceDir,
adminOrigin: settings.adminOrigin(), adminOrigin: settings.dashboardOrigin(),
vhost: fqdn, vhost: fqdn,
hasIPv6: sysinfo.hasIPv6(), hasIPv6: sysinfo.hasIPv6(),
ip: app.containerIp, ip: app.containerIp,
@@ -611,10 +611,10 @@ function renewCerts(options, auditSource, progressCallback, callback) {
let appDomains = []; let appDomains = [];
// add webadmin and mail domain // add webadmin and mail domain
if (settings.mailFqdn() === settings.adminFqdn()) { if (settings.mailFqdn() === settings.dashboardFqdn()) {
appDomains.push({ domain: settings.adminDomain(), fqdn: settings.adminFqdn(), type: 'webadmin+mail', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.adminFqdn()}.conf`) }); appDomains.push({ domain: settings.dashboardDomain(), fqdn: settings.dashboardFqdn(), type: 'webadmin+mail', nginxConfigFilename: path.join(paths.NGINX_APPCONFIG_DIR, `${settings.dashboardFqdn()}.conf`) });
} else { } 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' }); 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 // reconfigure since the cert changed
if (appDomain.type === 'webadmin' || appDomain.type === 'webadmin+mail') { 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') { } else if (appDomain.type === 'primary') {
return writeAppNginxConfig(appDomain.app, appDomain.fqdn, bundle, iteratorCallback); return writeAppNginxConfig(appDomain.app, appDomain.fqdn, bundle, iteratorCallback);
} else if (appDomain.type === 'alternate') { } else if (appDomain.type === 'alternate') {
@@ -690,7 +690,7 @@ function renewCerts(options, auditSource, progressCallback, callback) {
function removeAppConfigs() { function removeAppConfigs() {
for (let appConfigFile of fs.readdirSync(paths.NGINX_APPCONFIG_DIR)) { 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)); fs.unlinkSync(path.join(paths.NGINX_APPCONFIG_DIR, appConfigFile));
} }
} }
@@ -716,7 +716,7 @@ function writeDefaultConfig(options, callback) {
const data = { const data = {
sourceDir: path.resolve(__dirname, '..'), sourceDir: path.resolve(__dirname, '..'),
adminOrigin: settings.adminOrigin(), adminOrigin: settings.dashboardOrigin(),
vhost: '', vhost: '',
hasIPv6: sysinfo.hasIPv6(), hasIPv6: sysinfo.hasIPv6(),
endpoint: options.activated ? 'ip' : 'setup', endpoint: options.activated ? 'ip' : 'setup',
+2 -2
View File
@@ -521,8 +521,8 @@ describe('App API', function () {
docker.getContainer(appEntry.containerId).inspect(function (error, data) { docker.getContainer(appEntry.containerId).inspect(function (error, data) {
expect(error).to.not.be.ok(); expect(error).to.not.be.ok();
expect(data.Config.ExposedPorts['7777/tcp']).to.eql({ }); 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_WEBADMIN_ORIGIN=' + settings.dashboardOrigin());
expect(data.Config.Env).to.contain('CLOUDRON_API_ORIGIN=' + settings.adminOrigin()); 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=1');
expect(data.Config.Env).to.contain('CLOUDRON_APP_ORIGIN=https://' + APP_LOCATION + '.' + DOMAIN_0.domain); 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); expect(data.Config.Env).to.contain('CLOUDRON_APP_DOMAIN=' + APP_LOCATION + '.' + DOMAIN_0.domain);
+1 -1
View File
@@ -28,7 +28,7 @@ function setup(done) {
database._clear, database._clear,
settings._setApiServerOrigin.bind(null, 'http://localhost:6060'), 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) { function createAdmin(callback) {
superagent.post(SERVER_URL + '/api/v1/cloudron/activate') superagent.post(SERVER_URL + '/api/v1/cloudron/activate')
+2 -2
View File
@@ -185,7 +185,7 @@ describe('Cloudron API', function () {
expect(result.statusCode).to.equal(200); expect(result.statusCode).to.equal(200);
expect(result.body.apiServerOrigin).to.eql('http://localhost:6060'); expect(result.body.apiServerOrigin).to.eql('http://localhost:6060');
expect(result.body.webServerOrigin).to.eql('https://cloudron.io'); 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.version).to.eql(constants.VERSION);
expect(result.body.cloudronName).to.be.a('string'); expect(result.body.cloudronName).to.be.a('string');
@@ -200,7 +200,7 @@ describe('Cloudron API', function () {
expect(result.statusCode).to.equal(200); expect(result.statusCode).to.equal(200);
expect(result.body.apiServerOrigin).to.eql('http://localhost:6060'); expect(result.body.apiServerOrigin).to.eql('http://localhost:6060');
expect(result.body.webServerOrigin).to.eql('https://cloudron.io'); 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.version).to.eql(constants.VERSION);
expect(result.body.cloudronName).to.be.a('string'); expect(result.body.cloudronName).to.be.a('string');
done(); done();
+9 -9
View File
@@ -20,7 +20,7 @@ var async = require('async'),
var SERVER_URL = 'http://localhost:' + constants.PORT; var SERVER_URL = 'http://localhost:' + constants.PORT;
const ADMIN_DOMAIN = { const DASHBOARD_DOMAIN = {
domain: 'admin.com', domain: 'admin.com',
zoneName: 'admin.com', zoneName: 'admin.com',
config: {}, config: {},
@@ -49,7 +49,7 @@ function setup(done) {
function dnsSetup(callback) { function dnsSetup(callback) {
superagent.post(SERVER_URL + '/api/v1/cloudron/setup') 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) { .end(function (error, result) {
expect(result).to.be.ok(); expect(result).to.be.ok();
expect(result.statusCode).to.eql(200); expect(result.statusCode).to.eql(200);
@@ -170,7 +170,7 @@ describe('Mail API', function () {
callback(null, dnsAnswerQueue[hostname][type]); 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}`; dkimDomain = `cloudron-${suffix}._domainkey.${DOMAIN_0.domain}`;
spfDomain = DOMAIN_0.domain; spfDomain = DOMAIN_0.domain;
mxDomain = 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.domain).to.eql(spfDomain);
expect(res.body.dns.spf.type).to.eql('TXT'); expect(res.body.dns.spf.type).to.eql('TXT');
expect(res.body.dns.spf.value).to.eql(null); 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.spf.status).to.eql(false);
expect(res.body.dns.dmarc).to.be.an('object'); 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.statusCode).to.equal(200);
expect(res.body.dns.spf).to.be.an('object'); 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.status).to.eql(false);
expect(res.body.dns.spf.value).to.eql(null); 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.statusCode).to.equal(200);
expect(res.body.dns.spf).to.be.an('object'); 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.status).to.eql(false);
expect(res.body.dns.spf.value).to.eql('v=spf1 a:random.com ~all'); 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[mxDomain].MX = [ { priority: '10', exchange: settings.mailFqdn() } ];
dnsAnswerQueue[dmarcDomain].TXT = [['v=DMARC1; p=reject; pct=100']]; dnsAnswerQueue[dmarcDomain].TXT = [['v=DMARC1; p=reject; pct=100']];
dnsAnswerQueue[dkimDomain].TXT = [['v=DKIM1; t=s; p=', mail._readDkimPublicKeySync(DOMAIN_0.domain) ]]; 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') superagent.get(SERVER_URL + '/api/v1/mail/' + DOMAIN_0.domain + '/status')
.query({ access_token: token }) .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).to.be.an('object');
expect(res.body.dns.spf.domain).to.eql(spfDomain); expect(res.body.dns.spf.domain).to.eql(spfDomain);
expect(res.body.dns.spf.type).to.eql('TXT'); 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.value).to.eql('v=spf1 a:' + settings.dashboardFqdn() + ' ~all');
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(true); expect(res.body.dns.spf.status).to.eql(true);
expect(res.body.dns.dmarc).to.be.an('object'); expect(res.body.dns.dmarc).to.be.an('object');
+3 -3
View File
@@ -965,10 +965,10 @@ function setupTurn(app, options, callback) {
if (!turnSecret) return callback(new BoxError(BoxError.ADDONS_ERROR, 'Turn secret is missing')); if (!turnSecret) return callback(new BoxError(BoxError.ADDONS_ERROR, 'Turn secret is missing'));
const env = [ 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_PORT', value: '3478' },
{ name: 'CLOUDRON_STUN_TLS_PORT', value: '5349' }, { 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_PORT', value: '3478' },
{ name: 'CLOUDRON_TURN_TLS_PORT', value: '5349' }, { name: 'CLOUDRON_TURN_TLS_PORT', value: '5349' },
{ name: 'CLOUDRON_TURN_SECRET', value: turnSecret } { name: 'CLOUDRON_TURN_SECRET', value: turnSecret }
@@ -1564,7 +1564,7 @@ function startTurn(existingInfra, serviceConfig, callback) {
const tag = infra.images.turn.tag; const tag = infra.images.turn.tag;
const memoryLimit = serviceConfig.memoryLimit || SERVICES['turn'].defaultMemoryLimit; const memoryLimit = serviceConfig.memoryLimit || SERVICES['turn'].defaultMemoryLimit;
const memory = system.getMemoryAllocation(memoryLimit); const memory = system.getMemoryAllocation(memoryLimit);
const realm = settings.adminFqdn(); const realm = settings.dashboardFqdn();
const blobGet = util.callbackify(blobs.get); const blobGet = util.callbackify(blobs.get);
blobGet(blobs.ADDON_TURN_SECRET, function (error, turnSecret) { blobGet(blobs.ADDON_TURN_SECRET, function (error, turnSecret) {
+20 -20
View File
@@ -67,15 +67,15 @@ exports = module.exports = {
// these values come from the cache // these values come from the cache
apiServerOrigin, apiServerOrigin,
webServerOrigin, webServerOrigin,
adminDomain, dashboardDomain,
setAdminLocation, setDashboardLocation,
setMailLocation, setMailLocation,
mailFqdn, mailFqdn,
mailDomain, mailDomain,
adminOrigin, dashboardOrigin,
adminFqdn, dashboardFqdn,
isDemo, isDemo,
@@ -106,8 +106,8 @@ exports = module.exports = {
API_SERVER_ORIGIN_KEY: 'api_server_origin', API_SERVER_ORIGIN_KEY: 'api_server_origin',
WEB_SERVER_ORIGIN_KEY: 'web_server_origin', WEB_SERVER_ORIGIN_KEY: 'web_server_origin',
ADMIN_DOMAIN_KEY: 'admin_domain', DASHBOARD_DOMAIN_KEY: 'admin_domain',
ADMIN_FQDN_KEY: 'admin_fqdn', DASHBOARD_FQDN_KEY: 'admin_fqdn',
MAIL_DOMAIN_KEY: 'mail_domain', MAIL_DOMAIN_KEY: 'mail_domain',
MAIL_FQDN_KEY: 'mail_fqdn', MAIL_FQDN_KEY: 'mail_fqdn',
PROVIDER_KEY: 'provider', PROVIDER_KEY: 'provider',
@@ -173,8 +173,8 @@ let gDefaults = (function () {
mandatory2FA: false mandatory2FA: false
}; };
result[exports.ADMIN_DOMAIN_KEY] = ''; result[exports.DASHBOARD_DOMAIN_KEY] = '';
result[exports.ADMIN_FQDN_KEY] = ''; result[exports.DASHBOARD_FQDN_KEY] = '';
result[exports.MAIL_DOMAIN_KEY] = ''; result[exports.MAIL_DOMAIN_KEY] = '';
result[exports.MAIL_FQDN_KEY] = ''; result[exports.MAIL_FQDN_KEY] = '';
@@ -792,8 +792,8 @@ function initCache(callback) {
gCache = { gCache = {
apiServerOrigin: allSettings[exports.API_SERVER_ORIGIN_KEY], apiServerOrigin: allSettings[exports.API_SERVER_ORIGIN_KEY],
webServerOrigin: allSettings[exports.WEB_SERVER_ORIGIN_KEY], webServerOrigin: allSettings[exports.WEB_SERVER_ORIGIN_KEY],
adminDomain: allSettings[exports.ADMIN_DOMAIN_KEY], dashboardDomain: allSettings[exports.DASHBOARD_DOMAIN_KEY],
adminFqdn: allSettings[exports.ADMIN_FQDN_KEY], dashboardFqdn: allSettings[exports.DASHBOARD_FQDN_KEY],
mailDomain: allSettings[exports.MAIL_DOMAIN_KEY], mailDomain: allSettings[exports.MAIL_DOMAIN_KEY],
mailFqdn: allSettings[exports.MAIL_FQDN_KEY], mailFqdn: allSettings[exports.MAIL_FQDN_KEY],
isDemo: allSettings[exports.DEMO_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 // this is together so we can do this in a transaction later
function setAdminLocation(adminDomain, adminFqdn, callback) { function setDashboardLocation(dashboardDomain, dashboardFqdn, callback) {
assert.strictEqual(typeof adminDomain, 'string'); assert.strictEqual(typeof dashboardFqdn, 'string');
assert.strictEqual(typeof adminFqdn, 'string'); assert.strictEqual(typeof dashboardFqdn, 'string');
assert.strictEqual(typeof callback, 'function'); 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); 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); if (error) return callback(error);
gCache.adminDomain = adminDomain; gCache.dashboardDomain = dashboardDomain;
gCache.adminFqdn = adminFqdn; gCache.dashboardFqdn = dashboardFqdn;
callback(null); callback(null);
}); });
@@ -884,9 +884,9 @@ function setFooter(footer, callback) {
function provider() { return gCache.provider; } function provider() { return gCache.provider; }
function apiServerOrigin() { return gCache.apiServerOrigin; } function apiServerOrigin() { return gCache.apiServerOrigin; }
function webServerOrigin() { return gCache.webServerOrigin; } function webServerOrigin() { return gCache.webServerOrigin; }
function adminDomain() { return gCache.adminDomain; } function dashboardDomain() { return gCache.dashboardDomain; }
function adminFqdn() { return gCache.adminFqdn; } function dashboardFqdn() { return gCache.dashboardFqdn; }
function isDemo() { return gCache.isDemo; } function isDemo() { return gCache.isDemo; }
function mailDomain() { return gCache.mailDomain; } function mailDomain() { return gCache.mailDomain; }
function mailFqdn() { return gCache.mailFqdn; } function mailFqdn() { return gCache.mailFqdn; }
function adminOrigin() { return 'https://' + adminFqdn(); } function dashboardOrigin() { return 'https://' + dashboardFqdn(); }
+2 -2
View File
@@ -15,7 +15,7 @@ var async = require('async'),
settings = require('../settings.js'), settings = require('../settings.js'),
settingsdb = require('../settingsdb.js'); settingsdb = require('../settingsdb.js');
const ADMIN_DOMAIN = 'appstore-test.example.com'; const DASHBOARD_DOMAIN = 'appstore-test.example.com';
const APPSTORE_TOKEN = 'appstoretoken'; const APPSTORE_TOKEN = 'appstoretoken';
const APP_ID = 'appid'; const APP_ID = 'appid';
const APPSTORE_APP_ID = 'appstoreappid'; const APPSTORE_APP_ID = 'appstoreappid';
@@ -28,7 +28,7 @@ function setup(done) {
database.initialize, database.initialize,
database._clear, database._clear,
settings._setApiServerOrigin.bind(null, MOCK_API_SERVER_ORIGIN), 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 settings.initCache
], done); ], done);
} }
+1 -1
View File
@@ -101,7 +101,7 @@ describe('apptask', function () {
database.initialize, database.initialize,
database._clear, database._clear,
blobs.initSecrets, 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), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE),
userdb.add.bind(null, ADMIN.id, ADMIN), userdb.add.bind(null, ADMIN.id, ADMIN),
appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP) appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP)
+1 -1
View File
@@ -182,7 +182,7 @@ describe('backups', function () {
fs.mkdir.bind(null, BACKUP_DIR, { recursive: true }), fs.mkdir.bind(null, BACKUP_DIR, { recursive: true }),
database.initialize, database.initialize,
database._clear, 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), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE),
settingsdb.set.bind(null, settings.BACKUP_CONFIG_KEY, JSON.stringify({ settingsdb.set.bind(null, settings.BACKUP_CONFIG_KEY, JSON.stringify({
provider: 'filesystem', provider: 'filesystem',
+1 -1
View File
@@ -36,7 +36,7 @@ describe('dns provider', function () {
async.series([ async.series([
database.initialize, database.initialize,
database._clear, 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) domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE)
], done); ], done);
}); });
+1 -1
View File
@@ -82,7 +82,7 @@ describe('Domains', function () {
async.series([ async.series([
database.initialize, database.initialize,
database._clear, 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), 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) appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP)
], done); ], done);
+1 -1
View File
@@ -226,7 +226,7 @@ function setup(done) {
domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE),
cleanupUsers, cleanupUsers,
createOwner, createOwner,
settings.setAdminLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain) settings.setDashboardLocation.bind(null, DOMAIN_0.domain, 'my.' + DOMAIN_0.domain)
], done); ], done);
} }
+1 -1
View File
@@ -89,7 +89,7 @@ function setup(done) {
database.initialize.bind(null), database.initialize.bind(null),
database._clear.bind(null), database._clear.bind(null),
ldapServer.start.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), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE),
function (callback) { function (callback) {
users.createOwner(USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE, function (error, result) { users.createOwner(USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE, function (error, result) {
+1 -1
View File
@@ -34,7 +34,7 @@ function setup(done) {
database.initialize, database.initialize,
database._clear, database._clear,
domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), 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); ], done);
} }
+1 -1
View File
@@ -30,7 +30,7 @@ function setup(done) {
database.initialize, database.initialize,
database._clear, database._clear,
blobs.initSecrets, 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), domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE),
settings.initCache settings.initCache
], done); ], done);
+4 -4
View File
@@ -33,7 +33,7 @@ var USER_0 = {
permissions: null permissions: null
}; };
const ADMIN_DOMAIN = 'updatechecker-test.example.com'; const DASHBOARD_DOMAIN = 'updatechecker-test.example.com';
const DOMAIN_0 = { const DOMAIN_0 = {
domain: 'example.com', domain: 'example.com',
@@ -81,10 +81,10 @@ describe('updatechecker - box', function () {
database.initialize, database.initialize,
database._clear, database._clear,
settings._setApiServerOrigin.bind(null, 'http://localhost:4444'), 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, cron.startJobs,
domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), 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), 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), settings.setAutoupdatePattern.bind(null, constants.AUTOUPDATE_PATTERN_NEVER),
settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, 'atoken'), settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, 'atoken'),
@@ -183,7 +183,7 @@ describe('updatechecker - app', function () {
settings._setApiServerOrigin.bind(null, 'http://localhost:4444'), settings._setApiServerOrigin.bind(null, 'http://localhost:4444'),
cron.startJobs, cron.startJobs,
domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), 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), 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), 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), settings.setAutoupdatePattern.bind(null, constants.AUTOUPDATE_PATTERN_NEVER),
+3 -3
View File
@@ -631,7 +631,7 @@ function getOwner(callback) {
} }
function inviteLink(user, directoryConfig) { 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.username) link += `&username=${encodeURIComponent(user.username)}`;
if (user.displayName) link += `&displayName=${encodeURIComponent(user.displayName)}`; 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)); 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) { userdb.update(userId, { twoFactorAuthenticationSecret: secret.base32, twoFactorAuthenticationEnabled: false }, function (error) {
if (error) return callback(error); if (error) return callback(error);
@@ -863,7 +863,7 @@ function getAvatarUrl(user, callback) {
userdb.getAvatar(user.id, function (error, avatar) { userdb.getAvatar(user.id, function (error, avatar) {
if (error) return callback(error); 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'); const emailHash = require('crypto').createHash('md5').update(user.email).digest('hex');
return callback(null, `https://www.gravatar.com/avatar/${emailHash}.jpg`); return callback(null, `https://www.gravatar.com/avatar/${emailHash}.jpg`);