Fix EmailsOnPush to allow sending from @company.com for GitLab at gitlab.corp.company.com.
This commit is contained in:
parent
5d86332153
commit
969de4c15a
|
@ -34,6 +34,20 @@ class Notify < ActionMailer::Base
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Splits "gitlab.corp.company.com" up into "gitlab.corp.company.com",
|
||||||
|
# "corp.company.com" and "company.com".
|
||||||
|
# Respects set tld length so "company.co.uk" won't match "somethingelse.uk"
|
||||||
|
def self.allowed_email_domains
|
||||||
|
domain_parts = Gitlab.config.gitlab.host.split(".")
|
||||||
|
allowed_domains = []
|
||||||
|
begin
|
||||||
|
allowed_domains << domain_parts.join(".")
|
||||||
|
domain_parts.shift
|
||||||
|
end while domain_parts.length > ActionDispatch::Http::URL.tld_length
|
||||||
|
|
||||||
|
allowed_domains
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# The default email address to send emails from
|
# The default email address to send emails from
|
||||||
|
@ -50,7 +64,8 @@ class Notify < ActionMailer::Base
|
||||||
address = default_sender_address
|
address = default_sender_address
|
||||||
address.display_name = sender.name
|
address.display_name = sender.name
|
||||||
|
|
||||||
if send_from_user_email && sender.email.end_with?("@#{Gitlab.config.gitlab.host}")
|
sender_domain = sender.email.split("@").last
|
||||||
|
if send_from_user_email && self.class.allowed_email_domains.include?(sender_domain)
|
||||||
address.address = sender.email
|
address.address = sender.email
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -607,11 +607,14 @@ describe Notify do
|
||||||
|
|
||||||
let(:send_from_committer_email) { true }
|
let(:send_from_committer_email) { true }
|
||||||
|
|
||||||
context "when the committer email domain matches" do
|
before do
|
||||||
|
allow(Gitlab.config.gitlab).to receive(:host).and_return("gitlab.corp.company.com")
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the committer email domain is within the GitLab domain" do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(Gitlab.config.gitlab).to receive(:host).and_return("gitlab.dev")
|
user.update_attribute(:email, "user@company.com")
|
||||||
user.update_attribute(:email, "user@#{Gitlab.config.gitlab.host}")
|
|
||||||
user.confirm!
|
user.confirm!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -621,7 +624,25 @@ describe Notify do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the committer email doesn't match" do
|
context "when the committer email domain is not completely within the GitLab domain" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
user.update_attribute(:email, "user@something.company.com")
|
||||||
|
user.confirm!
|
||||||
|
end
|
||||||
|
|
||||||
|
it "is sent from the default email" do
|
||||||
|
sender = subject.header[:from].addrs[0]
|
||||||
|
expect(sender.address).to eq(gitlab_sender)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the committer email domain is outside the GitLab domain" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
user.update_attribute(:email, "user@mpany.com")
|
||||||
|
user.confirm!
|
||||||
|
end
|
||||||
|
|
||||||
it "is sent from the default email" do
|
it "is sent from the default email" do
|
||||||
sender = subject.header[:from].addrs[0]
|
sender = subject.header[:from].addrs[0]
|
||||||
|
|
Loading…
Reference in New Issue