diff options
Diffstat (limited to 'app/mailers/emails/service_desk.rb')
-rw-r--r-- | app/mailers/emails/service_desk.rb | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/app/mailers/emails/service_desk.rb b/app/mailers/emails/service_desk.rb index 66eb2c646a9..2953ec6cbe5 100644 --- a/app/mailers/emails/service_desk.rb +++ b/app/mailers/emails/service_desk.rb @@ -5,6 +5,8 @@ module Emails extend ActiveSupport::Concern include MarkupHelper + EMAIL_ATTACHMENTS_SIZE_LIMIT = 10.megabytes.freeze + included do layout 'service_desk', only: [:service_desk_thank_you_email, :service_desk_new_note_email] end @@ -28,6 +30,7 @@ module Emails setup_service_desk_mail(issue_id) email_sender = sender(@note.author_id) + add_uploads_as_attachments if Feature.enabled?(:service_desk_new_note_email_native_attachments, @note.project) options = service_desk_options(email_sender, 'new_note', recipient) .merge(subject: subject_base) @@ -60,7 +63,8 @@ module Emails template = Gitlab::Template::ServiceDeskTemplate.find(email_type, @project) text = substitute_template_replacements(template.content) - context = { project: @project, pipeline: :email } + context = { project: @project, pipeline: :service_desk_email, uploads_as_attachments: @uploads_as_attachments } + context[:author] = @note.author if email_type == 'new_note' markdown(text, context) @@ -90,5 +94,32 @@ module Emails def subject_base "#{@issue.title} (##{@issue.iid})" end + + def add_uploads_as_attachments + uploaders = find_uploaders_for(@note) + return unless uploaders.present? + return if uploaders.sum(&:size) > EMAIL_ATTACHMENTS_SIZE_LIMIT + + @uploads_as_attachments = [] + uploaders.each do |uploader| + attachments[uploader.filename] = uploader.read + @uploads_as_attachments << "#{uploader.secret}/#{uploader.filename}" + rescue StandardError => e + Gitlab::ErrorTracking.track_exception(e, project_id: @note.project.id) + end + end + + def find_uploaders_for(note) + uploads = FileUploader::MARKDOWN_PATTERN.scan(note.note) + return unless uploads.present? + + project = note.project + uploads.map do |secret, file_name| + UploaderFinder.new(project, secret, file_name).execute + end + rescue StandardError => e + Gitlab::ErrorTracking.track_exception(e, project_id: note.project.id) + nil + end end end |