2018-09-25 23:45:43 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-01-19 11:48:53 -05:00
|
|
|
module Projects
|
|
|
|
module Settings
|
|
|
|
class RepositoryController < Projects::ApplicationController
|
2021-03-16 14:11:53 -04:00
|
|
|
layout 'project_settings'
|
2017-01-23 19:28:40 -05:00
|
|
|
before_action :authorize_admin_project!
|
2020-04-22 20:09:41 -04:00
|
|
|
before_action :define_variables, only: [:create_deploy_token]
|
|
|
|
before_action do
|
|
|
|
push_frontend_feature_flag(:ajax_new_deploy_token, @project)
|
|
|
|
end
|
2017-01-23 19:28:40 -05:00
|
|
|
|
2020-10-08 14:08:32 -04:00
|
|
|
feature_category :source_code_management, [:show, :cleanup]
|
|
|
|
feature_category :continuous_delivery, [:create_deploy_token]
|
|
|
|
|
2017-01-19 11:48:53 -05:00
|
|
|
def show
|
2018-04-05 18:07:36 -04:00
|
|
|
render_show
|
|
|
|
end
|
|
|
|
|
2018-11-19 10:03:58 -05:00
|
|
|
def cleanup
|
2020-11-03 13:09:22 -05:00
|
|
|
bfg_object_map = params.require(:project).require(:bfg_object_map)
|
|
|
|
result = Projects::CleanupService.enqueue(project, current_user, bfg_object_map)
|
2018-11-19 10:03:58 -05:00
|
|
|
|
|
|
|
if result[:status] == :success
|
|
|
|
flash[:notice] = _('Repository cleanup has started. You will receive an email once the cleanup operation is complete.')
|
|
|
|
else
|
2020-11-03 13:09:22 -05:00
|
|
|
flash[:alert] = status.fetch(:message, _('Failed to upload object map file'))
|
2018-11-19 10:03:58 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
redirect_to project_settings_repository_path(project)
|
|
|
|
end
|
|
|
|
|
2020-04-22 20:09:41 -04:00
|
|
|
def create_deploy_token
|
|
|
|
result = Projects::DeployTokens::CreateService.new(@project, current_user, deploy_token_params).execute
|
|
|
|
@new_deploy_token = result[:deploy_token]
|
|
|
|
|
|
|
|
if result[:status] == :success
|
|
|
|
respond_to do |format|
|
|
|
|
format.json do
|
|
|
|
# IMPORTANT: It's a security risk to expose the token value more than just once here!
|
|
|
|
json = API::Entities::DeployTokenWithToken.represent(@new_deploy_token).as_json
|
|
|
|
render json: json, status: result[:http_status]
|
|
|
|
end
|
|
|
|
format.html do
|
|
|
|
flash.now[:notice] = s_('DeployTokens|Your new project deploy token has been created.')
|
|
|
|
render :show
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
respond_to do |format|
|
|
|
|
format.json { render json: { message: result[:message] }, status: result[:http_status] }
|
|
|
|
format.html do
|
|
|
|
flash.now[:alert] = result[:message]
|
|
|
|
render :show
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-04-05 18:07:36 -04:00
|
|
|
private
|
|
|
|
|
|
|
|
def render_show
|
2020-04-22 20:09:41 -04:00
|
|
|
define_variables
|
2017-01-23 19:28:40 -05:00
|
|
|
|
2018-04-05 18:07:36 -04:00
|
|
|
render 'show'
|
|
|
|
end
|
2017-01-23 19:28:40 -05:00
|
|
|
|
2020-04-22 20:09:41 -04:00
|
|
|
def define_variables
|
2020-04-24 14:09:46 -04:00
|
|
|
@deploy_keys = DeployKeysPresenter.new(@project, current_user: current_user)
|
|
|
|
|
2020-04-22 20:09:41 -04:00
|
|
|
define_deploy_token_variables
|
|
|
|
define_protected_refs
|
|
|
|
remote_mirror
|
|
|
|
end
|
|
|
|
|
2018-08-27 11:31:01 -04:00
|
|
|
# rubocop: disable CodeReuse/ActiveRecord
|
2017-03-17 15:55:15 -04:00
|
|
|
def define_protected_refs
|
|
|
|
@protected_branches = @project.protected_branches.order(:name).page(params[:page])
|
2017-04-03 22:37:22 -04:00
|
|
|
@protected_tags = @project.protected_tags.order(:name).page(params[:page])
|
2017-01-23 19:28:40 -05:00
|
|
|
@protected_branch = @project.protected_branches.new
|
2017-03-17 15:55:15 -04:00
|
|
|
@protected_tag = @project.protected_tags.new
|
2018-04-04 06:37:44 -04:00
|
|
|
|
|
|
|
@protected_branches_count = @protected_branches.reduce(0) { |sum, branch| sum + branch.matching(@project.repository.branches).size }
|
|
|
|
@protected_tags_count = @protected_tags.reduce(0) { |sum, tag| sum + tag.matching(@project.repository.tags).size }
|
|
|
|
|
2017-02-10 12:27:43 -05:00
|
|
|
load_gon_index
|
2017-01-19 11:48:53 -05:00
|
|
|
end
|
2018-08-27 11:31:01 -04:00
|
|
|
# rubocop: enable CodeReuse/ActiveRecord
|
2017-02-21 16:37:00 -05:00
|
|
|
|
2018-05-03 08:55:14 -04:00
|
|
|
def remote_mirror
|
|
|
|
@remote_mirror = project.remote_mirrors.first_or_initialize
|
|
|
|
end
|
|
|
|
|
2020-04-22 20:09:41 -04:00
|
|
|
def deploy_token_params
|
2020-05-13 23:07:52 -04:00
|
|
|
params.require(:deploy_token).permit(:name, :expires_at, :read_repository, :read_registry, :write_registry, :read_package_registry, :write_package_registry, :username)
|
2020-04-22 20:09:41 -04:00
|
|
|
end
|
|
|
|
|
2017-02-28 12:49:32 -05:00
|
|
|
def access_levels_options
|
|
|
|
{
|
2017-11-24 07:43:02 -05:00
|
|
|
create_access_levels: levels_for_dropdown,
|
|
|
|
push_access_levels: levels_for_dropdown,
|
|
|
|
merge_access_levels: levels_for_dropdown
|
2017-02-28 12:49:32 -05:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2017-11-24 07:43:02 -05:00
|
|
|
def levels_for_dropdown
|
|
|
|
roles = ProtectedRefAccess::HUMAN_ACCESS_LEVELS.map do |id, text|
|
2017-04-03 21:59:37 -04:00
|
|
|
{ id: id, text: text, before_divider: true }
|
|
|
|
end
|
|
|
|
{ roles: roles }
|
|
|
|
end
|
|
|
|
|
2017-04-03 12:10:58 -04:00
|
|
|
def protectable_tags_for_dropdown
|
|
|
|
{ open_tags: ProtectableDropdown.new(@project, :tags).hash }
|
2017-03-17 15:55:15 -04:00
|
|
|
end
|
|
|
|
|
2017-04-03 12:10:58 -04:00
|
|
|
def protectable_branches_for_dropdown
|
|
|
|
{ open_branches: ProtectableDropdown.new(@project, :branches).hash }
|
2017-03-01 11:15:46 -05:00
|
|
|
end
|
|
|
|
|
2020-04-22 20:09:41 -04:00
|
|
|
def define_deploy_token_variables
|
|
|
|
@deploy_tokens = @project.deploy_tokens.active
|
|
|
|
|
|
|
|
@new_deploy_token ||= DeployToken.new
|
|
|
|
end
|
|
|
|
|
2017-02-28 12:49:32 -05:00
|
|
|
def load_gon_index
|
2017-04-03 12:10:58 -04:00
|
|
|
gon.push(protectable_tags_for_dropdown)
|
|
|
|
gon.push(protectable_branches_for_dropdown)
|
2017-03-17 15:55:15 -04:00
|
|
|
gon.push(access_levels_options)
|
2020-09-22 05:09:43 -04:00
|
|
|
gon.push(current_project_id: project.id) if project
|
2017-02-28 12:49:32 -05:00
|
|
|
end
|
2017-01-19 11:48:53 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2019-09-13 09:26:31 -04:00
|
|
|
|
2021-05-11 17:10:21 -04:00
|
|
|
Projects::Settings::RepositoryController.prepend_mod_with('Projects::Settings::RepositoryController')
|