admin -> dashboard
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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));
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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',
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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(); }
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
@@ -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`);
|
||||||
|
|||||||
Reference in New Issue
Block a user