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

packages_helper.rb « helpers « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 88bb04c904bd1758fb8d5b1a008ad974cdc417e8 (plain)
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
# frozen_string_literal: true

module PackagesHelper
  include ::API::Helpers::RelatedResourcesHelpers

  def nuget_package_registry_url(project_id)
    expose_url(api_v4_projects_packages_nuget_index_path(id: project_id, format: '.json'))
  end

  def package_registry_instance_url(registry_type)
    expose_url("api/#{::API::API.version}/packages/#{registry_type}")
  end

  def package_registry_project_url(project_id, registry_type = :maven)
    project_api_path = api_v4_projects_path(id: project_id)
    package_registry_project_path = "#{project_api_path}/packages/#{registry_type}"
    expose_url(package_registry_project_path)
  end

  def package_from_presenter(package)
    presenter = ::Packages::Detail::PackagePresenter.new(package)

    presenter.detail_view.to_json
  end

  def pypi_registry_url(project)
    full_url = expose_url(api_v4_projects_packages_pypi_simple_package_name_path({ id: project.id, package_name: '' }, true))

    if project.project_feature.public_packages?
      full_url
    else
      full_url.sub!('://', '://__token__:<your_personal_token>@')
    end
  end

  def composer_registry_url(group_id)
    expose_url(api_v4_group___packages_composer_packages_path(id: group_id, format: '.json'))
  end

  def composer_config_repository_name(group_id)
    "#{Gitlab.config.gitlab.host}/#{group_id}"
  end

  def track_package_event(event_name, scope, **args)
    ::Packages::CreateEventService.new(args[:project], current_user, event_name: event_name, scope: scope).execute
    category = args.delete(:category) || self.class.name
    ::Gitlab::Tracking.event(category, event_name.to_s, **args)
  end

  def show_cleanup_policy_link(project)
    show_container_registry_settings(project) &&
      project.feature_available?(:container_registry, current_user) &&
      project.container_repositories.exists? &&
      !project.container_expiration_policy&.enabled
  end

  def show_container_registry_settings(project)
    Gitlab.config.registry.enabled &&
      Ability.allowed?(current_user, :admin_container_image, project)
  end

  def show_package_registry_settings(project)
    Gitlab.config.packages.enabled &&
      Ability.allowed?(current_user, :admin_package, project)
  end

  def show_group_package_registry_settings(group)
    group.packages_feature_enabled? &&
      Ability.allowed?(current_user, :admin_group, group)
  end

  def can_delete_packages?(project)
    Gitlab.config.packages.enabled &&
      Ability.allowed?(current_user, :destroy_package, project)
  end

  def can_delete_group_packages?(group)
    group.packages_feature_enabled? &&
      Ability.allowed?(current_user, :destroy_package, group)
  end

  def group_packages_template_data(group)
    packages_template_data.merge({
      can_delete_packages: can_delete_group_packages?(group).to_s,
      endpoint: group_packages_path(group),
      full_path: group.full_path,
      group_list_url: group_packages_path(group),
      page_type: 'groups',
      settings_path: show_group_package_registry_settings(group) ? group_settings_packages_and_registries_path(group) : ''
    })
  end

  def project_packages_template_data(project)
    packages_template_data.merge({
      can_delete_packages: can_delete_packages?(project).to_s,
      endpoint: project_packages_path(project),
      full_path: project.full_path,
      page_type: 'projects',
      project_list_url: project_packages_path(project),
      settings_path: show_package_registry_settings(project) ? project_settings_packages_and_registries_path(project) : ''
    })
  end

  def cleanup_settings_data(project)
    {
      project_id: project.id,
      project_path: project.full_path,
      cadence_options: cadence_options.to_json,
      keep_n_options: keep_n_options.to_json,
      older_than_options: older_than_options.to_json,
      is_admin: current_user&.admin.to_s,
      admin_settings_path: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'),
      project_settings_path: project_settings_packages_and_registries_path(project),
      enable_historic_entries: container_expiration_policies_historic_entry_enabled?.to_s,
      help_page_path: help_page_path('user/packages/container_registry/reduce_container_registry_storage', anchor: 'cleanup-policy'),
      show_cleanup_policy_link: show_cleanup_policy_link(project).to_s,
      tags_regex_help_page_path: help_page_path('user/packages/container_registry/reduce_container_registry_storage', anchor: 'regex-pattern-examples')
    }
  end

  def settings_data(project)
    cleanup_settings_data(project).merge(
      show_container_registry_settings: show_container_registry_settings(project).to_s,
      show_package_registry_settings: show_package_registry_settings(project).to_s,
      is_container_registry_metadata_database_enabled: (show_container_registry_settings(project) && ContainerRegistry::GitlabApiClient.supports_gitlab_api?).to_s,
      cleanup_settings_path: cleanup_image_tags_project_settings_packages_and_registries_path(project)
    )
  end

  private

  def packages_template_data
    {
      empty_list_illustration: image_path('illustrations/empty-state/empty-package-md.svg'),
      group_list_url: '',
      npm_instance_url: package_registry_instance_url(:npm),
      project_list_url: ''
    }
  end
end