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:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-19 15:57:54 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-19 15:57:54 +0300
commit419c53ec62de6e97a517abd5fdd4cbde3a942a34 (patch)
tree1f43a548b46bca8a5fb8fe0c31cef1883d49c5b6 /lib/gitlab/email
parent1da20d9135b3ad9e75e65b028bffc921aaf8deb7 (diff)
Add latest changes from gitlab-org/gitlab@16-5-stable-eev16.5.0-rc42
Diffstat (limited to 'lib/gitlab/email')
-rw-r--r--lib/gitlab/email/handler/base_handler.rb2
-rw-r--r--lib/gitlab/email/handler/create_issue_handler.rb4
-rw-r--r--lib/gitlab/email/handler/create_merge_request_handler.rb4
-rw-r--r--lib/gitlab/email/handler/create_note_on_issuable_handler.rb2
-rw-r--r--lib/gitlab/email/handler/service_desk_handler.rb14
-rw-r--r--lib/gitlab/email/message/build_ios_app_guide.rb57
-rw-r--r--lib/gitlab/email/message/in_product_marketing/helper.rb97
-rw-r--r--lib/gitlab/email/receiver.rb57
8 files changed, 35 insertions, 202 deletions
diff --git a/lib/gitlab/email/handler/base_handler.rb b/lib/gitlab/email/handler/base_handler.rb
index 2e487c42cb5..19826138075 100644
--- a/lib/gitlab/email/handler/base_handler.rb
+++ b/lib/gitlab/email/handler/base_handler.rb
@@ -6,7 +6,7 @@ module Gitlab
class BaseHandler
attr_reader :mail, :mail_key
- HANDLER_ACTION_BASE_REGEX ||= /(?<project_slug>.+)-(?<project_id>\d+)/.freeze
+ HANDLER_ACTION_BASE_REGEX ||= /(?<project_slug>.+)-(?<project_id>\d+)/
def initialize(mail, mail_key)
@mail = mail
diff --git a/lib/gitlab/email/handler/create_issue_handler.rb b/lib/gitlab/email/handler/create_issue_handler.rb
index 869bcc6e2be..cac6c29f10b 100644
--- a/lib/gitlab/email/handler/create_issue_handler.rb
+++ b/lib/gitlab/email/handler/create_issue_handler.rb
@@ -11,8 +11,8 @@ module Gitlab
class CreateIssueHandler < BaseHandler
include ReplyProcessing
- HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-issue\z/.freeze
- HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\+(?<incoming_email_token>.*)\z/.freeze
+ HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-issue\z/
+ HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\+(?<incoming_email_token>.*)\z/
def initialize(mail, mail_key)
super(mail, mail_key)
diff --git a/lib/gitlab/email/handler/create_merge_request_handler.rb b/lib/gitlab/email/handler/create_merge_request_handler.rb
index c723c2762c7..6e25202241c 100644
--- a/lib/gitlab/email/handler/create_merge_request_handler.rb
+++ b/lib/gitlab/email/handler/create_merge_request_handler.rb
@@ -12,8 +12,8 @@ module Gitlab
class CreateMergeRequestHandler < BaseHandler
include ReplyProcessing
- HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-merge-request\z/.freeze
- HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\+merge-request\+(?<incoming_email_token>.*)/.freeze
+ HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-merge-request\z/
+ HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\+merge-request\+(?<incoming_email_token>.*)/
def initialize(mail, mail_key)
super(mail, mail_key)
diff --git a/lib/gitlab/email/handler/create_note_on_issuable_handler.rb b/lib/gitlab/email/handler/create_note_on_issuable_handler.rb
index aed3647744a..8fea0593c78 100644
--- a/lib/gitlab/email/handler/create_note_on_issuable_handler.rb
+++ b/lib/gitlab/email/handler/create_note_on_issuable_handler.rb
@@ -15,7 +15,7 @@ module Gitlab
attr_reader :issuable_iid
- HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-issue-(?<issuable_iid>\d+)\z/.freeze
+ HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-(?<incoming_email_token>.+)-issue-(?<issuable_iid>\d+)\z/
def initialize(mail, mail_key)
super(mail, mail_key)
diff --git a/lib/gitlab/email/handler/service_desk_handler.rb b/lib/gitlab/email/handler/service_desk_handler.rb
index 949fa554aeb..ebc4e9c2c8c 100644
--- a/lib/gitlab/email/handler/service_desk_handler.rb
+++ b/lib/gitlab/email/handler/service_desk_handler.rb
@@ -10,9 +10,9 @@ module Gitlab
include ReplyProcessing
include Gitlab::Utils::StrongMemoize
- HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-issue-\z/.freeze
- HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\z/.freeze
- PROJECT_KEY_PATTERN = /\A(?<slug>.+)-(?<key>[a-z0-9_]+)\z/.freeze
+ HANDLER_REGEX = /\A#{HANDLER_ACTION_BASE_REGEX}-issue-\z/
+ HANDLER_REGEX_LEGACY = /\A(?<project_path>[^\+]*)\z/
+ PROJECT_KEY_PATTERN = /\A(?<slug>.+)-(?<key>[a-z0-9_]+)\z/
def initialize(mail, mail_key, service_desk_key: nil)
if service_desk_key
@@ -75,9 +75,10 @@ module Gitlab
def contains_custom_email_address_verification_subaddress?
return false unless Feature.enabled?(:service_desk_custom_email, project)
+ return false unless to_address.present?
# Verification email only has one recipient
- mail.to.first.include?(ServiceDeskSetting::CUSTOM_EMAIL_VERIFICATION_SUBADDRESS)
+ to_address.include?(ServiceDeskSetting::CUSTOM_EMAIL_VERIFICATION_SUBADDRESS)
end
def handled_custom_email_address_verification?
@@ -209,6 +210,11 @@ module Gitlab
(mail.reply_to || []).first || mail.from.first || mail.sender
end
+ def to_address
+ mail.to&.first
+ end
+ strong_memoize_attr :to_address
+
def can_handle_legacy_format?
project_path && project_path.include?('/') && !mail_key.include?('+')
end
diff --git a/lib/gitlab/email/message/build_ios_app_guide.rb b/lib/gitlab/email/message/build_ios_app_guide.rb
deleted file mode 100644
index 4acf558a6a2..00000000000
--- a/lib/gitlab/email/message/build_ios_app_guide.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Email
- module Message
- class BuildIosAppGuide
- include Gitlab::Email::Message::InProductMarketing::Helper
- include Gitlab::Routing
-
- attr_accessor :format
-
- def initialize(format: :html)
- @format = format
- end
-
- def subject_line
- s_('InProductMarketing|Get set up to build for iOS')
- end
-
- def title
- s_("InProductMarketing|Building for iOS? We've got you covered.")
- end
-
- def body_line1
- s_(
- 'InProductMarketing|Want to get your iOS app up and running, including publishing all the way to ' \
- 'TestFlight? Follow our guide to set up GitLab and fastlane to publish iOS apps to the App Store.'
- )
- end
-
- def cta_text
- s_('InProductMarketing|Learn how to build for iOS')
- end
-
- def cta_link
- action_link(cta_text, 'https://about.gitlab.com/blog/2019/03/06/ios-publishing-with-gitlab-and-fastlane/')
- end
-
- def cta2_text
- s_('InProductMarketing|Watch iOS building in action.')
- end
-
- def cta2_link
- action_link(cta2_text, 'https://www.youtube.com/watch?v=325FyJt7ZG8')
- end
-
- def logo_path
- 'mailers/in_product_marketing/create-0.png'
- end
-
- def unsubscribe
- unsubscribe_message
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/email/message/in_product_marketing/helper.rb b/lib/gitlab/email/message/in_product_marketing/helper.rb
deleted file mode 100644
index 0770e5f4d76..00000000000
--- a/lib/gitlab/email/message/in_product_marketing/helper.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Email
- module Message
- module InProductMarketing
- module Helper
- include ActionView::Context
- include ActionView::Helpers::TagHelper
-
- def footer_links
- links = [
- [s_('InProductMarketing|Blog'), 'https://about.gitlab.com/blog'],
- [s_('InProductMarketing|Twitter'), 'https://twitter.com/gitlab'],
- [s_('InProductMarketing|Facebook'), 'https://www.facebook.com/gitlab'],
- [s_('InProductMarketing|YouTube'), 'https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg']
- ]
- case format
- when :html
- links.map do |text, link|
- ActionController::Base.helpers.link_to(text, link)
- end
- else
- '| ' + links.map do |text, link|
- [text, link].join(' ')
- end.join("\n| ")
- end
- end
-
- def address
- s_('InProductMarketing|%{strong_start}GitLab Inc.%{strong_end} 268 Bush Street, #350, San Francisco, CA 94104, USA').html_safe % strong_options
- end
-
- def unsubscribe_message(self_managed_preferences_link = nil)
- parts = Gitlab.com? ? unsubscribe_com : unsubscribe_self_managed(self_managed_preferences_link)
-
- case format
- when :html
- parts.join(' ')
- else
- parts.join("\n" + ' ' * 16)
- end
- end
-
- private
-
- def unsubscribe_link
- unsubscribe_url = Gitlab.com? ? '%tag_unsubscribe_url%' : profile_notifications_url
-
- link(s_('InProductMarketing|unsubscribe'), unsubscribe_url)
- end
-
- def unsubscribe_com
- [
- s_('InProductMarketing|If you no longer wish to receive marketing emails from us,'),
- s_('InProductMarketing|you may %{unsubscribe_link} at any time.') % { unsubscribe_link: unsubscribe_link }
- ]
- end
-
- def unsubscribe_self_managed(preferences_link)
- [
- s_('InProductMarketing|To opt out of these onboarding emails, %{unsubscribe_link}.') % { unsubscribe_link: unsubscribe_link },
- s_("InProductMarketing|If you don't want to receive marketing emails directly from GitLab, %{marketing_preference_link}.") % { marketing_preference_link: preferences_link }
- ]
- end
-
- def strong_options
- case format
- when :html
- { strong_start: '<b>'.html_safe, strong_end: '</b>'.html_safe }
- else
- { strong_start: '', strong_end: '' }
- end
- end
-
- def link(text, link)
- case format
- when :html
- ActionController::Base.helpers.link_to text, link
- else
- "#{text} (#{link})"
- end
- end
-
- def action_link(text, link)
- case format
- when :html
- ActionController::Base.helpers.link_to text, link, target: '_blank', rel: 'noopener noreferrer'
- else
- [text, link].join(' >> ')
- end
- end
- end
- end
- end
- end
-end
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] }