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/banzai/filter/service_desk_upload_link_filter.rb')
-rw-r--r--lib/banzai/filter/service_desk_upload_link_filter.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/banzai/filter/service_desk_upload_link_filter.rb b/lib/banzai/filter/service_desk_upload_link_filter.rb
new file mode 100644
index 00000000000..9f26dfb8ae5
--- /dev/null
+++ b/lib/banzai/filter/service_desk_upload_link_filter.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Banzai
+ module Filter
+ # HTML filter for service desk emails.
+ # Context options:
+ # :replace_upload_links
+ class ServiceDeskUploadLinkFilter < BaseRelativeLinkFilter
+ def call
+ return doc unless context[:uploads_as_attachments].present?
+
+ linkable_attributes.reject! do |attr|
+ replace_upload_link(attr)
+ end
+
+ doc
+ end
+
+ protected
+
+ def replace_upload_link(html_attr)
+ return unless html_attr.name == 'href'
+ return unless html_attr.value.start_with?('/uploads/')
+
+ secret, filename_in_link = html_attr.value.scan(FileUploader::DYNAMIC_PATH_PATTERN).first
+ return unless context[:uploads_as_attachments].include?("#{secret}/#{filename_in_link}")
+
+ parent = html_attr.parent
+ filename_in_text = parent.text
+ final_filename = if filename_in_link != filename_in_text
+ "#{filename_in_text} (#{filename_in_link})"
+ else
+ filename_in_text
+ end
+
+ final_element = Nokogiri::HTML::DocumentFragment.parse("<strong>#{final_filename}</strong>")
+ parent.replace(final_element)
+ end
+ end
+ end
+end