Move build artifacts implementation to separate controller
This commit is contained in:
		
							parent
							
								
									a385d39ff1
								
							
						
					
					
						commit
						79fe18d9e7
					
				|  | @ -0,0 +1,36 @@ | |||
| class Projects::Builds::ArtifactsController < Projects::ApplicationController | ||||
|   layout 'project' | ||||
|   before_action :authorize_download_build_artifacts! | ||||
| 
 | ||||
|   def download | ||||
|     unless artifacts_file.file_storage? | ||||
|       return redirect_to artifacts_file.url | ||||
|     end | ||||
| 
 | ||||
|     unless artifacts_file.exists? | ||||
|       return not_found! | ||||
|     end | ||||
| 
 | ||||
|     send_file artifacts_file.path, disposition: 'attachment' | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def build | ||||
|     @build ||= project.builds.unscoped.find_by!(id: params[:build_id]) | ||||
|   end | ||||
| 
 | ||||
|   def artifacts_file | ||||
|     @artifacts_file ||= build.artifacts_file | ||||
|   end | ||||
| 
 | ||||
|   def authorize_download_build_artifacts! | ||||
|     unless can?(current_user, :download_build_artifacts, @project) | ||||
|       if current_user.nil? | ||||
|         return authenticate_user! | ||||
|       else | ||||
|         return render_404 | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | @ -2,7 +2,6 @@ class Projects::BuildsController < Projects::ApplicationController | |||
|   before_action :build, except: [:index, :cancel_all] | ||||
| 
 | ||||
|   before_action :authorize_manage_builds!, except: [:index, :show, :status] | ||||
|   before_action :authorize_download_build_artifacts!, only: [:download] | ||||
| 
 | ||||
|   layout "project" | ||||
| 
 | ||||
|  | @ -51,18 +50,6 @@ class Projects::BuildsController < Projects::ApplicationController | |||
|     redirect_to build_path(build) | ||||
|   end | ||||
| 
 | ||||
|   def download | ||||
|     unless artifacts_file.file_storage? | ||||
|       return redirect_to artifacts_file.url | ||||
|     end | ||||
| 
 | ||||
|     unless artifacts_file.exists? | ||||
|       return not_found! | ||||
|     end | ||||
| 
 | ||||
|     send_file artifacts_file.path, disposition: 'attachment' | ||||
|   end | ||||
| 
 | ||||
|   def status | ||||
|     render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha) | ||||
|   end | ||||
|  | @ -79,10 +66,6 @@ class Projects::BuildsController < Projects::ApplicationController | |||
|     @build ||= project.builds.unscoped.find_by!(id: params[:id]) | ||||
|   end | ||||
| 
 | ||||
|   def artifacts_file | ||||
|     build.artifacts_file | ||||
|   end | ||||
| 
 | ||||
|   def build_path(build) | ||||
|     namespace_project_build_path(build.project.namespace, build.project, build) | ||||
|   end | ||||
|  | @ -92,14 +75,4 @@ class Projects::BuildsController < Projects::ApplicationController | |||
|       return page_404 | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def authorize_download_build_artifacts! | ||||
|     unless can?(current_user, :download_build_artifacts, @project) | ||||
|       if current_user.nil? | ||||
|         return authenticate_user! | ||||
|       else | ||||
|         return render_404 | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -326,7 +326,7 @@ module Ci | |||
|     def download_url | ||||
|       if artifacts_file.exists? | ||||
|         Gitlab::Application.routes.url_helpers. | ||||
|           download_namespace_project_build_path(project.namespace, project, self) | ||||
|           download_namespace_project_build_artifacts_path(project.namespace, project, self) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -603,10 +603,18 @@ Rails.application.routes.draw do | |||
| 
 | ||||
|           member do | ||||
|             get :status | ||||
|             post :cancel | ||||
|             get :download | ||||
|             post :cancel | ||||
|             post :retry | ||||
|           end | ||||
| 
 | ||||
|           scope module: :builds do | ||||
|             resources :artifacts do | ||||
|               collection do | ||||
|                 get :download | ||||
|               end | ||||
|             end | ||||
|           end | ||||
|         end | ||||
| 
 | ||||
|         resources :hooks, only: [:index, :create, :destroy], constraints: { id: /\d+/ } do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue