mirror of
https://github.com/discourse/discourse.git
synced 2025-03-09 14:34:35 +00:00
FIX: don't invite users with the same email as 'reply_be_email_address'
This commit is contained in:
parent
d18085c57d
commit
735017dd9f
@ -317,11 +317,12 @@ module Email
|
||||
def add_other_addresses(topic, sender)
|
||||
%i(to cc bcc).each do |d|
|
||||
if @mail[d] && @mail[d].address_list && @mail[d].address_list.addresses
|
||||
@mail[d].address_list.addresses.each do |address|
|
||||
@mail[d].address_list.addresses.each do |address_field|
|
||||
begin
|
||||
if user = find_or_create_user(address)
|
||||
unless topic.topic_allowed_users.where(user_id: user.id).exists? &&
|
||||
topic.topic_allowed_groups.where("group_id IN (SELECT group_id FROM group_users WHERE user_id = ?)", user.id).exists?
|
||||
email = address_field.address.downcase
|
||||
if email !~ reply_by_email_address_regex
|
||||
user = find_or_create_user(address_field)
|
||||
if can_invite?(topic, user)
|
||||
topic.topic_allowed_users.create!(user_id: user.id)
|
||||
topic.add_small_action(sender, "invited_user", user.username)
|
||||
end
|
||||
@ -334,6 +335,11 @@ module Email
|
||||
end
|
||||
end
|
||||
|
||||
def can_invite?(topic, user)
|
||||
!topic.topic_allowed_users.where(user_id: user.id).exists? &&
|
||||
!topic.topic_allowed_groups.where("group_id IN (SELECT group_id FROM group_users WHERE user_id = ?)", user.id).exists?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -189,11 +189,11 @@ describe Email::Receiver do
|
||||
expect(user.name).to eq("Случайная Имя")
|
||||
end
|
||||
|
||||
it "invites everyone in the chain" do
|
||||
it "invites everyone in the chain but users whose email matches the 'reply_by_email_address'" do
|
||||
expect { process(:cc) }.to change(Topic, :count)
|
||||
emails = Topic.last.allowed_users.pluck(:email)
|
||||
expect(emails.size).to eq(5)
|
||||
expect(emails).to include("someone@else.com", "discourse@bar.com", "team@bar.com", "wat@bar.com", "42@bar.com")
|
||||
expect(emails.size).to eq(4)
|
||||
expect(emails).to include("someone@else.com", "discourse@bar.com", "team@bar.com", "wat@bar.com")
|
||||
end
|
||||
|
||||
end
|
||||
|
BIN
spec/fixtures/emails/cc.eml
vendored
BIN
spec/fixtures/emails/cc.eml
vendored
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user