52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class Projects::TemplatesController < Projects::ApplicationController
 | 
						|
  before_action :authenticate_user!
 | 
						|
  before_action :authorize_can_read_issuable!
 | 
						|
  before_action :get_template_class
 | 
						|
 | 
						|
  feature_category :source_code_management
 | 
						|
  urgency :low, [:names]
 | 
						|
 | 
						|
  def index
 | 
						|
    templates = @template_type.template_subsets(project)
 | 
						|
 | 
						|
    respond_to do |format|
 | 
						|
      format.json { render json: Gitlab::Json.dump(templates) }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def show
 | 
						|
    template = @template_type.find(params[:key], project)
 | 
						|
 | 
						|
    respond_to do |format|
 | 
						|
      format.json { render json: Gitlab::Json.dump(template) }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def names
 | 
						|
    respond_to do |format|
 | 
						|
      format.json { render json: TemplateFinder.all_template_names(project, params[:template_type].to_s.pluralize) }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  # User must have:
 | 
						|
  # - `read_merge_request` to see merge request templates, or
 | 
						|
  # - `read_issue` to see issue templates
 | 
						|
  #
 | 
						|
  # Note params[:template_type] has a route constraint to limit it to
 | 
						|
  # `merge_request` or `issue`
 | 
						|
  def authorize_can_read_issuable!
 | 
						|
    action = [:read_, params[:template_type]].join
 | 
						|
 | 
						|
    authorize_action!(action)
 | 
						|
  end
 | 
						|
 | 
						|
  def get_template_class
 | 
						|
    template_types = { issue: Gitlab::Template::IssueTemplate, merge_request: Gitlab::Template::MergeRequestTemplate }.with_indifferent_access
 | 
						|
    @template_type = template_types[params[:template_type]]
 | 
						|
  end
 | 
						|
end
 |