Files
gitlab-foss/lib/api/cargo_project_packages.rb
2025-03-20 15:07:47 +00:00

69 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module API
class CargoProjectPackages < ::API::Base
helpers ::API::Helpers::PackagesHelpers
helpers ::API::Helpers::Packages::BasicAuthHelpers
include ::API::Helpers::Authentication
feature_category :package_registry
urgency :low
default_format :json
authenticate_with do |accept|
accept.token_types(:personal_access_token, :deploy_token, :job_token)
.sent_through(:http_bearer_token)
end
params do
requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the project'
end
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
helpers do
def project
authorized_user_project(action: :read_package)
end
def cargo_registry_url
URI.join(
Gitlab.config.gitlab.url,
File.join(
api_v4_projects_packages_path(id: project.id),
"/packages/cargo"
)
)
end
end
after_validation do
require_packages_enabled!
not_found! unless ::Feature.enabled?(:package_registry_cargo_support, project)
authorize_read_package!(project)
end
namespace ':id/packages/cargo' do
desc 'Get config.json' do
detail 'This will be used by cargo for further requests'
success code: 200
failure [
{ code: 401, message: 'Unauthorized' },
{ code: 403, message: 'Forbidden' }
]
tags %w[cargo_packages]
end
get 'config.json' do
{
"dl" => cargo_registry_url,
"api" => cargo_registry_url,
"auth-required" => !project.public?
}
end
end
end
end
end