1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
# frozen_string_literal: true
class Projects::DeployKeysController < Projects::ApplicationController
include RepositorySettingsRedirect
respond_to :html
# Authorize
before_action :authorize_admin_project!
before_action :authorize_update_deploy_key!, only: [:edit, :update]
layout 'project_settings'
feature_category :continuous_delivery
urgency :low
def index
respond_to do |format|
format.html { redirect_to_repository }
format.json do
render json: Projects::Settings::DeployKeysPresenter.new(@project, current_user: current_user).as_json
end
end
end
def enabled_keys
respond_to do |format|
format.json do
enabled_keys = find_keys(filter: :enabled_keys)
render json: { keys: serialize(enabled_keys) }
end
end
end
def available_project_keys
respond_to do |format|
format.json do
available_project_keys = find_keys(filter: :available_project_keys)
render json: { keys: serialize(available_project_keys) }
end
end
end
def available_public_keys
respond_to do |format|
format.json do
available_public_keys = find_keys(filter: :available_public_keys)
render json: { keys: serialize(available_public_keys) }
end
end
end
def new
redirect_to_repository
end
def create
@key = DeployKeys::CreateService.new(current_user, create_params).execute(project: @project).present
flash[:alert] = @key.humanized_error_message unless @key.valid?
redirect_to_repository
end
def edit; end
def update
access_denied! unless deploy_key
if deploy_key.update(update_params)
flash[:notice] = _('Deploy key was successfully updated.')
redirect_to_repository
else
render 'edit'
end
end
def enable
key = Projects::EnableDeployKeyService.new(@project, current_user, params).execute
return render_404 unless key
respond_to do |format|
format.html { redirect_to_repository }
format.json { head :ok }
end
end
def disable
deploy_key_project = Projects::DisableDeployKeyService.new(@project, current_user, params).execute
return render_404 unless deploy_key_project
respond_to do |format|
format.html { redirect_to_repository }
format.json { head :ok }
end
end
protected
def deploy_key
@deploy_key ||= DeployKey.find(params[:id])
end
def deploy_keys_project
@deploy_keys_project ||= deploy_key.deploy_keys_project_for(@project)
end
def create_params
create_params = params.require(:deploy_key)
.permit(:key, :title, :expires_at, deploy_keys_projects_attributes: [:can_push])
create_params.dig(:deploy_keys_projects_attributes, '0')&.merge!(project_id: @project.id)
create_params
end
def update_params
permitted_params = [deploy_keys_projects_attributes: [:can_push]]
permitted_params << :title if can?(current_user, :update_deploy_key_title, deploy_key)
key_update_params = params.require(:deploy_key).permit(*permitted_params)
key_update_params.dig(:deploy_keys_projects_attributes, '0')&.merge!(id: deploy_keys_project.id)
key_update_params
end
def authorize_update_deploy_key!
if !can?(current_user, :update_deploy_key, deploy_key) &&
!can?(current_user, :update_deploy_keys_project, deploy_keys_project)
access_denied!
end
end
private
def redirect_to_repository
redirect_to_repository_settings(@project, anchor: 'js-deploy-keys-settings')
end
def find_keys(params)
DeployKeys::DeployKeysFinder.new(@project, current_user, params)
.execute
end
def serialize(keys)
opts = { user: current_user, project: project }
DeployKeys::DeployKeySerializer.new
.with_pagination(request, response)
.represent(keys, opts)
end
end
|