SECURITY: Limit email invitations to topic

This commit is contained in:
Krzysztof Kotlarek 2022-08-10 15:39:26 +10:00 committed by Loïc Guitaut
parent 7b8f74439e
commit 4fcffd3fae
2 changed files with 20 additions and 0 deletions

View File

@ -115,6 +115,8 @@ class Invite < ActiveRecord::Base
invite.destroy
invite = nil
end
email_digest = Digest::SHA256.hexdigest(email)
RateLimiter.new(invited_by, "reinvites-per-day-#{email_digest}", 3, 1.day.to_i).performed!
end
emailed_status = if opts[:skip_email] || invite&.emailed_status == emailed_status_types[:not_required]

View File

@ -181,6 +181,24 @@ describe Invite do
expect(invite.invite_key).not_to eq(another_invite.invite_key)
end
context "when email is already invited 3 times" do
before do
RateLimiter.enable
3.times do
Invite.generate(user, email: "test@example.com")
end
end
after do
RateLimiter.clear_all!
end
it "raises an error" do
expect { Invite.generate(user, email: "test@example.com") }
.to raise_error(RateLimiter::LimitExceeded)
end
end
end
context 'invite to a topic' do