mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Resend email if the user has already been invited
This commit is contained in:
parent
16cb5e0d35
commit
553878064b
2 changed files with 30 additions and 23 deletions
|
@ -80,25 +80,26 @@ createInvite = (subscription, email, inviterName, callback) ->
|
|||
return callback(error) if error?
|
||||
return callback(reason) unless possible
|
||||
|
||||
token = crypto.randomBytes(32).toString("hex")
|
||||
|
||||
# TODO: use standard way to canonalise email addresses
|
||||
invite = {
|
||||
email: email.trim().toLowerCase(),
|
||||
token: token,
|
||||
inviterName: inviterName,
|
||||
sentAt: new Date(),
|
||||
}
|
||||
email = email.trim().toLowerCase()
|
||||
|
||||
subscription.teamInvites.push(invite)
|
||||
invite = subscription.teamInvites.find (invite) -> invite.email == email
|
||||
|
||||
if !invite?
|
||||
invite ||= { email: email }
|
||||
subscription.teamInvites.push(invite)
|
||||
|
||||
invite.inviterName = inviterName
|
||||
invite.token = crypto.randomBytes(32).toString("hex")
|
||||
invite.sentAt = new Date()
|
||||
|
||||
subscription.save (error) ->
|
||||
return callback(error) if error?
|
||||
|
||||
opts =
|
||||
to: email.trim().toLowerCase()
|
||||
to: email
|
||||
inviterName: inviterName
|
||||
acceptInviteUrl: "#{settings.siteUrl}/subscription/invites/#{token}/"
|
||||
acceptInviteUrl: "#{settings.siteUrl}/subscription/invites/#{invite.token}/"
|
||||
EmailHandler.sendEmail "verifyEmailToJoinTeam", opts, (error) ->
|
||||
return callback(error, invite)
|
||||
|
||||
|
@ -113,12 +114,6 @@ checkIfInviteIsPossible = (subscription, email, callback = (error, possible, rea
|
|||
logger.log {subscriptionId: subscription.id}, "team has reached member limit"
|
||||
return callback(null, false, limitReached: true)
|
||||
|
||||
existingInvite = subscription.teamInvites.find (invite) -> invite.email == email
|
||||
|
||||
if existingInvite
|
||||
logger.log {subscriptionId: subscription.id, email}, "user already invited"
|
||||
return callback(null, false, alreadyInvited: true)
|
||||
|
||||
async.map subscription.member_ids, UserGetter.getUser, (error, members) ->
|
||||
return callback(error) if error?
|
||||
|
||||
|
|
|
@ -116,6 +116,23 @@ describe "TeamInvitesHandler", ->
|
|||
).should.equal true
|
||||
done()
|
||||
|
||||
it "refreshes the existing invite if the email has already been invited", (done) ->
|
||||
originalInvite = Object.assign({}, @teamInvite)
|
||||
|
||||
@TeamInvitesHandler.createManagerInvite @manager.id, originalInvite.email, (err, invite) =>
|
||||
expect(err).to.eq(null)
|
||||
expect(invite).to.exist
|
||||
|
||||
expect(@subscription.teamInvites.length).to.eq 1
|
||||
expect(@subscription.teamInvites).to.deep.include invite
|
||||
|
||||
expect(invite.email).to.eq originalInvite.email
|
||||
expect(invite.token).not.to.eq originalInvite.token
|
||||
|
||||
@subscription.save.calledOnce.should.eq true
|
||||
|
||||
done()
|
||||
|
||||
describe "createDomainInvite", ->
|
||||
beforeEach ->
|
||||
@licence =
|
||||
|
@ -202,6 +219,7 @@ describe "TeamInvitesHandler", ->
|
|||
@TeamInvitesHandler.createManagerInvite.callCount.should.eq 1
|
||||
|
||||
done()
|
||||
|
||||
describe "validation", ->
|
||||
it "doesn't create an invite if the team limit has been reached", (done) ->
|
||||
@LimitationsManager.teamHasReachedMemberLimit = sinon.stub().returns(true)
|
||||
|
@ -209,12 +227,6 @@ describe "TeamInvitesHandler", ->
|
|||
expect(err).to.deep.equal(limitReached: true)
|
||||
done()
|
||||
|
||||
it "doen't create an invite if the email has already been invited",(done) ->
|
||||
@TeamInvitesHandler.createManagerInvite @manager.id, "jorah@mormont.org", (err, invite) =>
|
||||
expect(err).to.deep.equal(alreadyInvited: true)
|
||||
expect(invite).not.to.exist
|
||||
done()
|
||||
|
||||
it "doen't create an invite if the user is already part of the team", (done) ->
|
||||
member = {
|
||||
id: "1a2b",
|
||||
|
|
Loading…
Reference in a new issue