diff --git a/src/mail_templates/welcome_user.ejs b/src/mail_templates/welcome_user.ejs
index f8d78655e..4d9ec6d57 100644
--- a/src/mail_templates/welcome_user.ejs
+++ b/src/mail_templates/welcome_user.ejs
@@ -5,7 +5,7 @@ Dear <%= user.displayName || user.username || user.email %>,
Welcome to <%= cloudronName %>!
Follow the link to get started.
-<%- setupLink %>
+<%- inviteLink %>
<% if (invitor && invitor.email) { %>
You are receiving this email because you were invited by <%= invitor.email %>.
@@ -25,7 +25,7 @@ Powered by https://cloudron.io
Welcome to <%= cloudronName %>!
- Get started.
+ Get started.
diff --git a/src/mailer.js b/src/mailer.js
index fbdc7dce3..7b08ad837 100644
--- a/src/mailer.js
+++ b/src/mailer.js
@@ -125,9 +125,10 @@ function mailUserEvent(mailTo, user, event) {
});
}
-function sendInvite(user, invitor) {
+function sendInvite(user, invitor, inviteLink) {
assert.strictEqual(typeof user, 'object');
- assert(typeof invitor === 'object');
+ assert.strictEqual(typeof invitor, 'object');
+ assert.strictEqual(typeof inviteLink, 'string');
debug('Sending invite mail');
@@ -137,7 +138,7 @@ function sendInvite(user, invitor) {
var templateData = {
user: user,
webadminUrl: settings.adminOrigin(),
- setupLink: `${settings.adminOrigin()}/setupaccount.html?resetToken=${user.resetToken}&email=${encodeURIComponent(user.email)}` + (user.username ? `&username=${user.username}` : ''),
+ inviteLink: inviteLink,
invitor: invitor,
cloudronName: mailConfig.cloudronName,
cloudronAvatarUrl: settings.adminOrigin() + '/api/v1/cloudron/avatar'
diff --git a/src/routes/users.js b/src/routes/users.js
index 2ab54380c..eed1e4d12 100644
--- a/src/routes/users.js
+++ b/src/routes/users.js
@@ -124,10 +124,10 @@ function verifyPassword(req, res, next) {
function createInvite(req, res, next) {
assert.strictEqual(typeof req.params.userId, 'string');
- users.createInvite(req.params.userId, function (error, resetToken) {
+ users.createInvite(req.params.userId, function (error, result) {
if (error) return next(BoxError.toHttpError(error));
- next(new HttpSuccess(200, { resetToken: resetToken }));
+ next(new HttpSuccess(200, result));
});
}
diff --git a/src/users.js b/src/users.js
index e7d77f293..7af286907 100644
--- a/src/users.js
+++ b/src/users.js
@@ -562,6 +562,10 @@ function getOwner(callback) {
});
}
+function inviteLink(user) {
+ return `${settings.adminOrigin()}/setupaccount.html?resetToken=${user.resetToken}&email=${encodeURIComponent(user.email)}` + (user.username ? `&username=${encodeURIComponent(user.username)}` : '');
+}
+
function createInvite(userId, callback) {
assert.strictEqual(typeof userId, 'string');
assert.strictEqual(typeof callback, 'function');
@@ -576,7 +580,7 @@ function createInvite(userId, callback) {
userdb.update(userId, userObject, function (error) {
if (error) return callback(error);
- callback(null, userObject.resetToken);
+ callback(null, { resetToken: userObject.resetToken, inviteLink: inviteLink(userObject) });
});
});
}
@@ -592,7 +596,7 @@ function sendInvite(userId, options, callback) {
if (userObject.source) return callback(new BoxError(BoxError.CONFLICT, 'User is from an external directory'));
if (!userObject.resetToken) return callback(new BoxError(BoxError.CONFLICT, 'Must generate resetToken to send invitation'));
- mailer.sendInvite(userObject, options.invitor || null);
+ mailer.sendInvite(userObject, options.invitor || null, inviteLink(userObject));
callback(null);
});