diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/settings.js | 20 | ||||
-rw-r--r-- | models/users.js | 60 |
2 files changed, 47 insertions, 33 deletions
diff --git a/models/settings.js b/models/settings.js index 0e6ab762..0c2da4d3 100644 --- a/models/settings.js +++ b/models/settings.js @@ -35,6 +35,9 @@ Settings.attachSchema(new SimpleSchema({ })); Settings.helpers({ mailUrl () { + if (!this.mailServer.host) { + return null; + } if (!this.mailServer.username && !this.mailServer.password) { return `smtp://${this.mailServer.host}:${this.mailServer.port}/`; } @@ -69,7 +72,7 @@ if (Meteor.isServer) { }); Settings.after.update((userId, doc, fieldNames) => { // assign new values to mail-from & MAIL_URL in environment - if (_.contains(fieldNames, 'mailServer')) { + if (_.contains(fieldNames, 'mailServer') && _.contains(fieldNames, 'host')) { if (!doc.mailServer.username && !doc.mailServer.password) { process.env.MAIL_URL = `smtp://${doc.mailServer.host}:${doc.mailServer.port}/`; } else { @@ -97,13 +100,16 @@ if (Meteor.isServer) { url: FlowRouter.url('sign-up'), }; const lang = author.getLanguage(); - Email.send({ - to: icode.email, - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-register-subject', params, lang), - text: TAPi18n.__('email-invite-register-text', params, lang), - }); + if (Settings.findOne().mailUrl()) { + Email.send({ + to: icode.email, + from: Accounts.emailTemplates.from, + subject: TAPi18n.__('email-invite-register-subject', params, lang), + text: TAPi18n.__('email-invite-register-text', params, lang), + }); + } } catch (e) { + InvitationCodes.remove(_id); throw new Meteor.Error('email-fail', e.message); } } diff --git a/models/users.js b/models/users.js index f062df9d..edf1a203 100644 --- a/models/users.js +++ b/models/users.js @@ -91,6 +91,10 @@ Users.attachSchema(new SimpleSchema({ type: [String], optional: true, }, + 'profile.icode': { + type: String, + optional: true, + }, services: { type: Object, optional: true, @@ -379,24 +383,25 @@ if (Meteor.isServer) { board.addMember(user._id); user.addInvite(boardId); - try { - const params = { - user: user.username, - inviter: inviter.username, - board: board.title, - url: board.absoluteUrl(), - }; - const lang = user.getLanguage(); - Email.send({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-subject', params, lang), - text: TAPi18n.__('email-invite-text', params, lang), - }); - } catch (e) { - throw new Meteor.Error('email-fail', e.message); + if (Settings.findOne().mailUrl()) { + try { + const params = { + user: user.username, + inviter: inviter.username, + board: board.title, + url: board.absoluteUrl(), + }; + const lang = user.getLanguage(); + Email.send({ + to: user.emails[0].address.toLowerCase(), + from: Accounts.emailTemplates.from, + subject: TAPi18n.__('email-invite-subject', params, lang), + text: TAPi18n.__('email-invite-text', params, lang), + }); + } catch (e) { + throw new Meteor.Error('email-fail', e.message); + } } - return { username: user.username, email: user.emails[0].address }; }, }); @@ -411,11 +416,12 @@ if (Meteor.isServer) { return user; } - const iCode = options.profile.invitationcode | ''; - - const invitationCode = InvitationCodes.findOne({code: iCode, valid:true}); + if (!options || !options.profile) { + throw new Meteor.Error('error-invitation-code-blank', 'The invitation code is required'); + } + const invitationCode = InvitationCodes.findOne({code: options.profile.invitationcode, email: options.email, valid: true}); if (!invitationCode) { - throw new Meteor.Error('error-invitation-code-not-exist'); + throw new Meteor.Error('error-invitation-code-not-exist', 'The invitation code doesn\'t exist'); }else{ user.profile = {icode: options.profile.invitationcode}; } @@ -497,19 +503,21 @@ if (Meteor.isServer) { //invite user to corresponding boards const disableRegistration = Settings.findOne().disableRegistration; if (disableRegistration) { - const user = Users.findOne(doc._id); - const invitationCode = InvitationCodes.findOne({code: user.profile.icode, valid:true}); + const invitationCode = InvitationCodes.findOne({code: doc.profile.icode, valid:true}); if (!invitationCode) { - throw new Meteor.Error('error-user-notCreated'); + throw new Meteor.Error('error-invitation-code-not-exist'); }else{ invitationCode.boardsToBeInvited.forEach((boardId) => { const board = Boards.findOne(boardId); board.addMember(doc._id); }); - user.profile = {invitedBoards: invitationCode.boardsToBeInvited}; + if (!doc.profile) { + doc.profile = {}; + } + doc.profile.invitedBoards = invitationCode.boardsToBeInvited; + Users.update(doc._id, {$set:{profile: doc.profile}}); InvitationCodes.update(invitationCode._id, {$set: {valid:false}}); } } }); } - |