62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
module Gitlab
|
|
module Email
|
|
module Handler
|
|
module ReplyProcessing
|
|
private
|
|
|
|
def author
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def project
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def message
|
|
@message ||= process_message
|
|
end
|
|
|
|
def message_including_reply
|
|
@message_with_reply ||= process_message(trim_reply: false)
|
|
end
|
|
|
|
def process_message(**kwargs)
|
|
message = ReplyParser.new(mail, **kwargs).execute.strip
|
|
add_attachments(message)
|
|
end
|
|
|
|
def add_attachments(reply)
|
|
attachments = Email::AttachmentUploader.new(mail).execute(project)
|
|
|
|
reply + attachments.map do |link|
|
|
"\n\n#{link[:markdown]}"
|
|
end.join
|
|
end
|
|
|
|
def validate_permission!(permission)
|
|
raise UserNotFoundError unless author
|
|
raise UserBlockedError if author.blocked?
|
|
|
|
if project
|
|
raise ProjectNotFound unless author.can?(:read_project, project)
|
|
end
|
|
|
|
raise UserNotAuthorizedError unless author.can?(permission, project || noteable)
|
|
end
|
|
|
|
def verify_record!(record:, invalid_exception:, record_name:)
|
|
return if record.persisted?
|
|
return if record.errors.key?(:commands_only)
|
|
|
|
error_title = "The #{record_name} could not be created for the following reasons:"
|
|
|
|
msg = error_title + record.errors.full_messages.map do |error|
|
|
"\n\n- #{error}"
|
|
end.join
|
|
|
|
raise invalid_exception, msg
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|