Move build artifacts implementation to separate controller

This commit is contained in:
Grzegorz Bizon 2015-12-17 14:24:43 +01:00
parent a385d39ff1
commit 79fe18d9e7
4 changed files with 46 additions and 29 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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