2020-11-11 07:09:06 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module API
|
|
|
|
module Helpers
|
|
|
|
module Packages
|
|
|
|
module Npm
|
|
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
include ::API::Helpers::PackagesHelpers
|
|
|
|
|
|
|
|
NPM_ENDPOINT_REQUIREMENTS = {
|
|
|
|
package_name: API::NO_SLASH_URL_PART_REGEX
|
|
|
|
}.freeze
|
|
|
|
|
|
|
|
def endpoint_scope
|
|
|
|
params[:id].present? ? :project : :instance
|
|
|
|
end
|
|
|
|
|
|
|
|
def project
|
|
|
|
strong_memoize(:project) do
|
|
|
|
case endpoint_scope
|
|
|
|
when :project
|
|
|
|
user_project
|
|
|
|
when :instance
|
|
|
|
# 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
|
|
|
|
end
|
|
|
|
|
|
|
|
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)
|
|
|
|
strong_memoize(:project_or_nil) do
|
|
|
|
next unless project_id_or_nil
|
|
|
|
|
|
|
|
find_project(project_id_or_nil)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def project_id_or_nil
|
|
|
|
strong_memoize(:project_id_or_nil) do
|
|
|
|
case endpoint_scope
|
|
|
|
when :project
|
|
|
|
params[:id]
|
|
|
|
when :instance
|
2021-08-06 11:10:05 -04:00
|
|
|
package_name = params[:package_name]
|
|
|
|
namespace_path = ::Packages::Npm.scope_of(package_name)
|
2021-02-17 13:09:19 -05:00
|
|
|
next unless namespace_path
|
|
|
|
|
2021-02-18 13:10:41 -05:00
|
|
|
namespace = Namespace.top_most
|
|
|
|
.by_path(namespace_path)
|
2021-02-17 13:09:19 -05:00
|
|
|
next unless namespace
|
|
|
|
|
2021-09-07 17:10:59 -04:00
|
|
|
finder = ::Packages::Npm::PackageFinder.new(
|
|
|
|
package_name,
|
|
|
|
namespace: namespace,
|
2021-09-14 14:12:06 -04:00
|
|
|
last_of_each_version: false
|
2021-09-07 17:10:59 -04:00
|
|
|
)
|
2021-02-17 13:09:19 -05:00
|
|
|
|
|
|
|
finder.last&.project_id
|
2020-11-11 07:09:06 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|