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); });