55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 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 process_message
 | |
|           message = ReplyParser.new(mail).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?
 | |
|           raise ProjectNotFound unless author.can?(:read_project, project)
 | |
|           raise UserNotAuthorizedError unless author.can?(permission, project)
 | |
|         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
 |