Module: API::Helpers::Packages::Npm

Extended by:
Gitlab::Utils::Override
Includes:
API::Helpers::PackagesHelpers, Gitlab::Utils::StrongMemoize
Defined in:
lib/api/helpers/packages/npm.rb

Constant Summary collapse

NPM_ENDPOINT_REQUIREMENTS =
{
  package_name: API::NO_SLASH_URL_PART_REGEX
}.freeze

Constants included from API::Helpers::PackagesHelpers

API::Helpers::PackagesHelpers::ALLOWED_REQUIRED_PERMISSIONS, API::Helpers::PackagesHelpers::MAX_PACKAGE_FILE_SIZE

Instance Method Summary collapse

Methods included from Gitlab::Utils::Override

extended, extensions, included, method_added, override, prepended, queue_verification, verify!

Methods included from API::Helpers::PackagesHelpers

#authorize_create_package!, #authorize_destroy_package!, #authorize_packages_access!, #authorize_read_package!, #authorize_upload!, #authorize_workhorse!, #present_package_file!, #require_dependency_proxy_enabled!, #require_packages_enabled!, #track_package_event, #user_project, #user_project_with_read_package

Instance Method Details

#enqueue_sync_metadata_cache_worker(project, package_name) ⇒ Object



88
89
90
91
92
# File 'lib/api/helpers/packages/npm.rb', line 88

def (project, package_name)
  return unless Feature.enabled?(:npm_metadata_cache, project)

  ::Packages::Npm::CreateMetadataCacheWorker.perform_async(project.id, package_name)
end

#finder_for_endpoint_scope(package_name) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/api/helpers/packages/npm.rb', line 32

def finder_for_endpoint_scope(package_name)
  case endpoint_scope
  when :project
    ::Packages::Npm::PackageFinder.new(package_name, project: project_or_nil)
  when :instance
    ::Packages::Npm::PackageFinder.new(package_name, namespace: top_namespace_from(package_name))
  when :group
    ::Packages::Npm::PackageFinder.new(package_name, namespace: group)
  end
end

#projectObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/api/helpers/packages/npm.rb', line 15

def project
  case endpoint_scope
  when :project
    user_project(action: :read_package)
  when :instance, :group
    # Simulate the same behavior as #user_project by re-using #find_project!
    # but take care if the project_id is nil as #find_project! is not designed
    # to handle it.
    project_id = project_id_or_nil

    not_found!('Project') unless project_id

    find_project!(project_id)
  end
end

#project_id_or_nilObject



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
# File 'lib/api/helpers/packages/npm.rb', line 52

def project_id_or_nil
  case endpoint_scope
  when :project
    params[:id]
  when :group
    finder = ::Packages::Npm::PackageFinder.new(
      params[:package_name],
      namespace: group
    )

    finder.last&.project_id
  when :instance
    package_name = params[:package_name]

    namespace =
      if Feature.enabled?(:npm_allow_packages_in_multiple_projects)
        top_namespace_from(package_name)
      else
        namespace_path = ::Packages::Npm.scope_of(package_name)
        return unless namespace_path

        Namespace.top_most.by_path(namespace_path)
      end

    return unless namespace

    finder = ::Packages::Npm::PackageFinder.new(
      package_name,
      namespace: namespace
    )

    finder.last&.project_id
  end
end

#project_or_nilObject



43
44
45
46
47
48
49
# File 'lib/api/helpers/packages/npm.rb', line 43

def project_or_nil
  # mainly used by the metadata endpoint where we need to get a project
  # and return nil if not found (no errors should be raised)
  return unless project_id_or_nil

  find_project(project_id_or_nil)
end