Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/clusterable_presenter.rb8
-rw-r--r--app/presenters/instance_clusterable_presenter.rb10
-rw-r--r--app/presenters/projects/settings/deploy_keys_presenter.rb62
3 files changed, 46 insertions, 34 deletions
diff --git a/app/presenters/clusterable_presenter.rb b/app/presenters/clusterable_presenter.rb
index 7677e6f026f..6b1d82e7557 100644
--- a/app/presenters/clusterable_presenter.rb
+++ b/app/presenters/clusterable_presenter.rb
@@ -29,18 +29,10 @@ class ClusterablePresenter < Gitlab::View::Presenter::Delegated
new_polymorphic_path([clusterable, :cluster], options)
end
- def aws_api_proxy_path(resource)
- polymorphic_path([clusterable, :clusters], action: :aws_proxy, resource: resource)
- end
-
def authorize_aws_role_path
polymorphic_path([clusterable, :clusters], action: :authorize_aws_role)
end
- def revoke_aws_role_path
- polymorphic_path([clusterable, :clusters], action: :revoke_aws_role)
- end
-
def create_user_clusters_path
polymorphic_path([clusterable, :clusters], action: :create_user)
end
diff --git a/app/presenters/instance_clusterable_presenter.rb b/app/presenters/instance_clusterable_presenter.rb
index 34d3f347689..0c267fd5735 100644
--- a/app/presenters/instance_clusterable_presenter.rb
+++ b/app/presenters/instance_clusterable_presenter.rb
@@ -67,16 +67,6 @@ class InstanceClusterablePresenter < ClusterablePresenter
authorize_aws_role_admin_clusters_path
end
- override :revoke_aws_role_path
- def revoke_aws_role_path
- revoke_aws_role_admin_clusters_path
- end
-
- override :aws_api_proxy_path
- def aws_api_proxy_path(resource)
- aws_proxy_admin_clusters_path(resource: resource)
- end
-
override :empty_state_help_text
def empty_state_help_text
s_('ClusterIntegration|Adding an integration will share the cluster across all projects.')
diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb
index 9bb7fe13593..66211d02696 100644
--- a/app/presenters/projects/settings/deploy_keys_presenter.rb
+++ b/app/presenters/projects/settings/deploy_keys_presenter.rb
@@ -3,6 +3,8 @@
module Projects
module Settings
class DeployKeysPresenter < Gitlab::View::Presenter::Simple
+ include Gitlab::Utils::StrongMemoize
+
presents :project
delegate :size, to: :enabled_keys, prefix: true
delegate :size, to: :available_project_keys, prefix: true
@@ -13,37 +15,45 @@ module Projects
end
def enabled_keys
- project.deploy_keys
+ strong_memoize(:enabled_keys) do
+ project.deploy_keys.with_projects
+ end
end
def available_keys
- current_user
- .accessible_deploy_keys
- .id_not_in(enabled_keys.select(:id))
- .with_projects
+ strong_memoize(:available_keys) do
+ current_user
+ .accessible_deploy_keys
+ .id_not_in(enabled_keys.select(:id))
+ .with_projects
+ end
end
def available_project_keys
- current_user
- .project_deploy_keys
- .id_not_in(enabled_keys.select(:id))
- .with_projects
+ strong_memoize(:available_project_keys) do
+ current_user
+ .project_deploy_keys
+ .id_not_in(enabled_keys.select(:id))
+ .with_projects
+ end
end
def available_public_keys
- DeployKey
- .are_public
- .id_not_in(enabled_keys.select(:id))
- .id_not_in(available_project_keys.select(:id))
- .with_projects
+ strong_memoize(:available_public_keys) do
+ DeployKey
+ .are_public
+ .id_not_in(enabled_keys.select(:id))
+ .id_not_in(available_project_keys.select(:id))
+ .with_projects
+ end
end
def as_json
serializer = DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
- opts = { user: current_user, project: project }
+ opts = { user: current_user, project: project, readable_project_ids: readable_project_ids }
{
- enabled_keys: serializer.represent(enabled_keys.with_projects, opts),
+ enabled_keys: serializer.represent(enabled_keys, opts),
available_project_keys: serializer.represent(available_project_keys, opts),
public_keys: serializer.represent(available_public_keys, opts)
}
@@ -56,6 +66,26 @@ module Projects
def form_partial_path
'projects/deploy_keys/form'
end
+
+ private
+
+ # Caching all readable project ids for the user that are associated with the queried deploy keys
+ def readable_project_ids
+ strong_memoize(:readable_projects_by_id) do
+ Set.new(user_readable_project_ids)
+ end
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def user_readable_project_ids
+ project_ids = (available_keys + available_project_keys + available_public_keys)
+ .flat_map { |deploy_key| deploy_key.deploy_keys_projects.map(&:project_id) }
+ .compact
+ .uniq
+
+ current_user.authorized_projects(Gitlab::Access::GUEST).id_in(project_ids).pluck(:id)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
end
end
end