SECURITY: Handle concurrent invite accepts

Raise an error on concurrent invite accept attempts.
This commit is contained in:
Blake Erickson
2023-07-28 12:53:48 +01:00
committed by David Taylor
parent bfc3132bb2
commit 62a609ea2d
3 changed files with 29 additions and 2 deletions

View File

@ -984,6 +984,27 @@ RSpec.describe InvitesController do
Fabricate(:invite, email: nil, emailed_status: Invite.emailed_status_types[:not_required])
end
it "does not create multiple users for a single use invite" do
user_count = User.count
2
.times
.map do
Thread.new do
put "/invites/show/#{invite.invite_key}.json",
params: {
email: "test@example.com",
password: "verystrongpassword",
}
end
end
.each(&:join)
expect(invite.reload.max_redemptions_allowed).to eq(1)
expect(invite.reload.redemption_count).to eq(1)
expect(User.count).to eq(user_count + 1)
end
it "sends an activation email and does not activate the user" do
expect {
put "/invites/show/#{invite.invite_key}.json",