From 735017dd9fb846a2b5418935355f1f9fda493b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Tue, 19 Jan 2016 15:24:34 +0100 Subject: [PATCH] FIX: don't invite users with the same email as 'reply_be_email_address' --- lib/email/receiver.rb | 14 ++++++++++---- spec/components/email/receiver_spec.rb | 6 +++--- spec/fixtures/emails/cc.eml | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index 39dd2c324cf..ad0da3e9f9e 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -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 diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index 7f4d0d16a33..b1ee7a7a839 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -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 diff --git a/spec/fixtures/emails/cc.eml b/spec/fixtures/emails/cc.eml index 73e52c111b6..c54363b909f 100644 --- a/spec/fixtures/emails/cc.eml +++ b/spec/fixtures/emails/cc.eml @@ -1,7 +1,7 @@ Return-Path: From: Foo Bar To: someone@else.com -CC: team@bar.com, wat@bar.com, 42@bar.com +CC: team@bar.com, wat@bar.com, reply+d400310beeae61d785c2ac6a2aacb210@bar.com Subject: The more, the merrier Date: Fri, 15 Jan 2016 00:12:43 +0100 Message-ID: <30@foo.bar.mail>