Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/email/receiver.rb')
-rw-r--r--lib/gitlab/email/receiver.rb57
1 files changed, 19 insertions, 38 deletions
diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb
index ee11105537b..d5877234c3a 100644
--- a/lib/gitlab/email/receiver.rb
+++ b/lib/gitlab/email/receiver.rb
@@ -8,7 +8,7 @@ module Gitlab
class Receiver
include Gitlab::Utils::StrongMemoize
- RECEIVED_HEADER_REGEX = /for\s+\<([^<]+)\>/.freeze
+ RECEIVED_HEADER_REGEX = /for\s+\<([^<]+)\>/
# Errors that are purely from users and not anything we can control
USER_ERRORS = [
@@ -50,6 +50,7 @@ module Gitlab
delivered_to: delivered_to.map(&:value),
envelope_to: envelope_to.map(&:value),
x_envelope_to: x_envelope_to.map(&:value),
+ cc_address: cc,
# reduced down to what looks like an email in the received headers
received_recipients: recipients_from_received_headers,
meta: {
@@ -84,23 +85,27 @@ module Gitlab
def mail_key
strong_memoize(:mail_key) do
- key_from_to_header || key_from_additional_headers
+ find_first_key_from(to) || key_from_additional_headers
end
end
- def key_from_to_header
- to.find do |address|
- key = email_class.key_from_address(address)
- break key if key
+ def find_first_key_from(items)
+ items.each do |item|
+ email = item.is_a?(Mail::Field) ? item.value : item
+
+ key = email_class.key_from_address(email)
+ return key if key
end
+ nil
end
def key_from_additional_headers
find_key_from_references ||
- find_key_from_delivered_to_header ||
- find_key_from_envelope_to_header ||
- find_key_from_x_envelope_to_header ||
- find_first_key_from_received_headers
+ find_first_key_from(delivered_to) ||
+ find_first_key_from(envelope_to) ||
+ find_first_key_from(x_envelope_to) ||
+ find_first_key_from(recipients_from_received_headers) ||
+ find_first_key_from(cc)
end
def ensure_references_array(references)
@@ -131,6 +136,10 @@ module Gitlab
Array(mail.to)
end
+ def cc
+ Array(mail.cc)
+ end
+
def delivered_to
Array(mail[:delivered_to])
end
@@ -147,34 +156,6 @@ module Gitlab
Array(mail[:received])
end
- def find_key_from_delivered_to_header
- delivered_to.find do |header|
- key = email_class.key_from_address(header.value)
- break key if key
- end
- end
-
- def find_key_from_envelope_to_header
- envelope_to.find do |header|
- key = email_class.key_from_address(header.value)
- break key if key
- end
- end
-
- def find_key_from_x_envelope_to_header
- x_envelope_to.find do |header|
- key = email_class.key_from_address(header.value)
- break key if key
- end
- end
-
- def find_first_key_from_received_headers
- recipients_from_received_headers.find do |email|
- key = email_class.key_from_address(email)
- break key if key
- end
- end
-
def recipients_from_received_headers
strong_memoize :emails_from_received_headers do
received.filter_map { |header| header.value[RECEIVED_HEADER_REGEX, 1] }