39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module API
 | |
|   class LsifData < Grape::API
 | |
|     MAX_FILE_SIZE = 10.megabytes
 | |
| 
 | |
|     before do
 | |
|       not_found! if Feature.disabled?(:code_navigation, user_project)
 | |
|     end
 | |
| 
 | |
|     params do
 | |
|       requires :id, type: String, desc: 'The ID of a project'
 | |
|       requires :commit_id, type: String, desc: 'The ID of a commit'
 | |
|     end
 | |
|     resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
 | |
|       segment ':id/commits/:commit_id' do
 | |
|         params do
 | |
|           requires :path, type: String, desc: 'The path of a file'
 | |
|         end
 | |
|         get 'lsif/info' do
 | |
|           authorize! :download_code, user_project
 | |
| 
 | |
|           artifact =
 | |
|             @project.job_artifacts
 | |
|               .with_file_types(['lsif'])
 | |
|               .for_sha(params[:commit_id])
 | |
|               .last
 | |
| 
 | |
|           not_found! unless artifact
 | |
|           authorize! :read_pipeline, artifact.job.pipeline
 | |
|           file_too_large! if artifact.file.cached_size > MAX_FILE_SIZE
 | |
| 
 | |
|           ::Projects::LsifDataService.new(artifact.file, @project, params).execute
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |