Commit d2a895da authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'emailsonpush-replyto' into 'master'

Set EmailsOnPush reply-to address to committer email when enabled.

Addresses private issue https://dev.gitlab.org/gitlab/gitlabhq/issues/2227.

See merge request !520
parents 089f5b91 c26b001e
...@@ -5,6 +5,7 @@ v 7.10.0 (unreleased) ...@@ -5,6 +5,7 @@ v 7.10.0 (unreleased)
- Don't crash when project repository doesn't exist. - Don't crash when project repository doesn't exist.
- Add config var to block auto-created LDAP users. - Add config var to block auto-created LDAP users.
- Don't use HTML ellipsis in EmailsOnPush subject truncated commit message. - Don't use HTML ellipsis in EmailsOnPush subject truncated commit message.
- Set EmailsOnPush reply-to address to committer email when enabled.
- Fix broken file browsing with a submodule that contains a relative link (Stan Hu) - Fix broken file browsing with a submodule that contains a relative link (Stan Hu)
- Fix persistent XSS vulnerability around profile website URLs. - Fix persistent XSS vulnerability around profile website URLs.
- Fix project import URL regex to prevent arbitary local repos from being imported. - Fix project import URL regex to prevent arbitary local repos from being imported.
......
...@@ -125,7 +125,15 @@ module Emails ...@@ -125,7 +125,15 @@ module Emails
@disable_footer = true @disable_footer = true
reply_to =
if send_from_committer_email && can_send_from_user_email?(@author)
@author.email
else
Gitlab.config.gitlab.email_reply_to
end
mail(from: sender(author_id, send_from_committer_email), mail(from: sender(author_id, send_from_committer_email),
reply_to: reply_to,
to: recipient, to: recipient,
subject: @subject) subject: @subject)
end end
......
...@@ -60,21 +60,25 @@ class Notify < ActionMailer::Base ...@@ -60,21 +60,25 @@ class Notify < ActionMailer::Base
address address
end end
def can_send_from_user_email?(sender)
sender_domain = sender.email.split("@").last
self.class.allowed_email_domains.include?(sender_domain)
end
# Return an email address that displays the name of the sender. # Return an email address that displays the name of the sender.
# Only the displayed name changes; the actual email address is always the same. # Only the displayed name changes; the actual email address is always the same.
def sender(sender_id, send_from_user_email = false) def sender(sender_id, send_from_user_email = false)
if sender = User.find(sender_id) return unless sender = User.find(sender_id)
address = default_sender_address address = default_sender_address
address.display_name = sender.name address.display_name = sender.name
sender_domain = sender.email.split("@").last if send_from_user_email && can_send_from_user_email?(sender)
if send_from_user_email && self.class.allowed_email_domains.include?(sender_domain)
address.address = sender.email address.address = sender.email
end end
address.format address.format
end end
end
# Look up a User by their ID and return their email address # Look up a User by their ID and return their email address
# #
......
...@@ -725,6 +725,11 @@ describe Notify do ...@@ -725,6 +725,11 @@ describe Notify do
sender = subject.header[:from].addrs[0] sender = subject.header[:from].addrs[0]
expect(sender.address).to eq(user.email) expect(sender.address).to eq(user.email)
end end
it "is set to reply to the committer email" do
sender = subject.header[:reply_to].addrs[0]
expect(sender.address).to eq(user.email)
end
end end
context "when the committer email domain is not completely within the GitLab domain" do context "when the committer email domain is not completely within the GitLab domain" do
...@@ -738,6 +743,11 @@ describe Notify do ...@@ -738,6 +743,11 @@ describe Notify do
sender = subject.header[:from].addrs[0] sender = subject.header[:from].addrs[0]
expect(sender.address).to eq(gitlab_sender) expect(sender.address).to eq(gitlab_sender)
end end
it "is set to reply to the default email" do
sender = subject.header[:reply_to].addrs[0]
expect(sender.address).to eq(gitlab_sender_reply_to)
end
end end
context "when the committer email domain is outside the GitLab domain" do context "when the committer email domain is outside the GitLab domain" do
...@@ -751,6 +761,11 @@ describe Notify do ...@@ -751,6 +761,11 @@ describe Notify do
sender = subject.header[:from].addrs[0] sender = subject.header[:from].addrs[0]
expect(sender.address).to eq(gitlab_sender) expect(sender.address).to eq(gitlab_sender)
end end
it "is set to reply to the default email" do
sender = subject.header[:reply_to].addrs[0]
expect(sender.address).to eq(gitlab_sender_reply_to)
end
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment