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 'lib/api/concerns/packages')
-rw-r--r--lib/api/concerns/packages/conan_endpoints.rb2
-rw-r--r--lib/api/concerns/packages/debian_distribution_endpoints.rb152
-rw-r--r--lib/api/concerns/packages/debian_package_endpoints.rb (renamed from lib/api/concerns/packages/debian_endpoints.rb)34
-rw-r--r--lib/api/concerns/packages/nuget_endpoints.rb5
4 files changed, 170 insertions, 23 deletions
diff --git a/lib/api/concerns/packages/conan_endpoints.rb b/lib/api/concerns/packages/conan_endpoints.rb
index eb762be8285..3194cdebde8 100644
--- a/lib/api/concerns/packages/conan_endpoints.rb
+++ b/lib/api/concerns/packages/conan_endpoints.rb
@@ -255,7 +255,7 @@ module API
delete do
authorize!(:destroy_package, project)
- track_package_event('delete_package', :conan, category: 'API::ConanPackages')
+ track_package_event('delete_package', :conan, category: 'API::ConanPackages', user: current_user, project: project, namespace: project.namespace)
package.destroy
end
diff --git a/lib/api/concerns/packages/debian_distribution_endpoints.rb b/lib/api/concerns/packages/debian_distribution_endpoints.rb
new file mode 100644
index 00000000000..4670c3e3521
--- /dev/null
+++ b/lib/api/concerns/packages/debian_distribution_endpoints.rb
@@ -0,0 +1,152 @@
+# frozen_string_literal: true
+
+module API
+ module Concerns
+ module Packages
+ module DebianDistributionEndpoints
+ extend ActiveSupport::Concern
+
+ included do
+ include PaginationParams
+
+ feature_category :package_registry
+
+ helpers ::API::Helpers::PackagesHelpers
+ helpers ::API::Helpers::Packages::BasicAuthHelpers
+ include ::API::Helpers::Authentication
+
+ namespace 'debian_distributions' do
+ helpers do
+ params :optional_distribution_params do
+ optional :suite, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Suite'
+ optional :origin, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Origin'
+ optional :label, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Label'
+ optional :version, type: String, regexp: Gitlab::Regex.debian_version_regex, desc: 'The Debian Version'
+ optional :description, type: String, desc: 'The Debian Description'
+ optional :valid_time_duration_seconds, type: Integer, desc: 'The duration before the Release file should be considered expired by the client'
+
+ optional :components, type: Array[String],
+ coerce_with: ::API::Validations::Types::CommaSeparatedToArray.coerce,
+ regexp: Gitlab::Regex.debian_component_regex,
+ desc: 'The list of Components'
+ optional :architectures, type: Array[String],
+ coerce_with: ::API::Validations::Types::CommaSeparatedToArray.coerce,
+ regexp: Gitlab::Regex.debian_architecture_regex,
+ desc: 'The list of Architectures'
+ end
+ end
+
+ authenticate_with do |accept|
+ accept.token_types(:personal_access_token, :deploy_token, :job_token)
+ .sent_through(:http_basic_auth)
+ end
+
+ content_type :json, 'application/json'
+ format :json
+
+ # POST {projects|groups}/:id/debian_distributions
+ desc 'Create a Debian Distribution' do
+ detail 'This feature was introduced in 14.0'
+ success ::API::Entities::Packages::Debian::Distribution
+ end
+
+ params do
+ requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
+ use :optional_distribution_params
+ end
+ post '/' do
+ authorize_create_package!(project_or_group)
+
+ distribution_params = declared_params(include_missing: false)
+ result = ::Packages::Debian::CreateDistributionService.new(project_or_group, current_user, distribution_params).execute
+ distribution = result.payload[:distribution]
+
+ if result.success?
+ present distribution, with: ::API::Entities::Packages::Debian::Distribution
+ else
+ render_validation_error!(distribution)
+ end
+ end
+
+ # GET {projects|groups}/:id/debian_distributions
+ desc 'Get a list of Debian Distributions' do
+ detail 'This feature was introduced in 14.0'
+ success ::API::Entities::Packages::Debian::Distribution
+ end
+
+ params do
+ use :pagination
+ optional :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
+ use :optional_distribution_params
+ end
+ get '/' do
+ distribution_params = declared_params(include_missing: false)
+ distributions = ::Packages::Debian::DistributionsFinder.new(project_or_group, distribution_params).execute
+
+ present paginate(distributions), with: ::API::Entities::Packages::Debian::Distribution
+ end
+
+ # GET {projects|groups}/:id/debian_distributions/:codename
+ desc 'Get a Debian Distribution' do
+ detail 'This feature was introduced in 14.0'
+ success ::API::Entities::Packages::Debian::Distribution
+ end
+
+ params do
+ requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
+ end
+ get '/:codename' do
+ distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
+
+ present distribution, with: ::API::Entities::Packages::Debian::Distribution
+ end
+
+ # PUT {projects|groups}/:id/debian_distributions/:codename
+ desc 'Update a Debian Distribution' do
+ detail 'This feature was introduced in 14.0'
+ success ::API::Entities::Packages::Debian::Distribution
+ end
+
+ params do
+ requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
+ use :optional_distribution_params
+ end
+ put '/:codename' do
+ authorize_create_package!(project_or_group)
+
+ distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
+ distribution_params = declared_params(include_missing: false).except(:codename)
+ result = ::Packages::Debian::UpdateDistributionService.new(distribution, distribution_params).execute
+ distribution = result.payload[:distribution]
+
+ if result.success?
+ present distribution, with: ::API::Entities::Packages::Debian::Distribution
+ else
+ render_validation_error!(distribution)
+ end
+ end
+
+ # DELETE {projects|groups}/:id/debian_distributions/:codename
+ desc 'Delete a Debian Distribution' do
+ detail 'This feature was introduced in 14.0'
+ end
+
+ params do
+ requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
+ use :optional_distribution_params
+ end
+ delete '/:codename' do
+ authorize_destroy_package!(project_or_group)
+
+ distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
+
+ accepted! if distribution.destroy
+
+ render_api_error!('Failed to delete distribution', 400)
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/api/concerns/packages/debian_endpoints.rb b/lib/api/concerns/packages/debian_package_endpoints.rb
index 6fc7c439464..c79ae3068b4 100644
--- a/lib/api/concerns/packages/debian_endpoints.rb
+++ b/lib/api/concerns/packages/debian_package_endpoints.rb
@@ -3,7 +3,7 @@
module API
module Concerns
module Packages
- module DebianEndpoints
+ module DebianPackageEndpoints
extend ActiveSupport::Concern
DISTRIBUTION_REGEX = %r{[a-zA-Z0-9][a-zA-Z0-9.-]*}.freeze
@@ -32,23 +32,17 @@ module API
helpers ::API::Helpers::PackagesHelpers
helpers ::API::Helpers::Packages::BasicAuthHelpers
+ include ::API::Helpers::Authentication
- format :txt
- content_type :txt, 'text/plain'
-
- rescue_from ArgumentError do |e|
- render_api_error!(e.message, 400)
- end
-
- rescue_from ActiveRecord::RecordInvalid do |e|
- render_api_error!(e.message, 400)
- end
+ namespace 'packages/debian' do
+ authenticate_with do |accept|
+ accept.token_types(:personal_access_token, :deploy_token, :job_token)
+ .sent_through(:http_basic_auth)
+ end
- before do
- require_packages_enabled!
- end
+ format :txt
+ content_type :txt, 'text/plain'
- namespace 'packages/debian' do
params do
requires :distribution, type: String, desc: 'The Debian Codename', regexp: Gitlab::Regex.debian_distribution_regex
end
@@ -59,7 +53,7 @@ module API
detail 'This feature was introduced in GitLab 13.5'
end
- route_setting :authentication, deploy_token_allowed: true, basic_auth_personal_access_token: true, job_token_allowed: :basic_auth, authenticate_non_public: true
+ route_setting :authentication, authenticate_non_public: true
get 'Release.gpg' do
not_found!
end
@@ -69,7 +63,7 @@ module API
detail 'This feature was introduced in GitLab 13.5'
end
- route_setting :authentication, deploy_token_allowed: true, basic_auth_personal_access_token: true, job_token_allowed: :basic_auth, authenticate_non_public: true
+ route_setting :authentication, authenticate_non_public: true
get 'Release' do
# https://gitlab.com/gitlab-org/gitlab/-/issues/5835#note_414103286
'TODO Release'
@@ -80,7 +74,7 @@ module API
detail 'This feature was introduced in GitLab 13.5'
end
- route_setting :authentication, deploy_token_allowed: true, basic_auth_personal_access_token: true, job_token_allowed: :basic_auth, authenticate_non_public: true
+ route_setting :authentication, authenticate_non_public: true
get 'InRelease' do
not_found!
end
@@ -96,7 +90,7 @@ module API
detail 'This feature was introduced in GitLab 13.5'
end
- route_setting :authentication, deploy_token_allowed: true, basic_auth_personal_access_token: true, job_token_allowed: :basic_auth, authenticate_non_public: true
+ route_setting :authentication, authenticate_non_public: true
get 'Packages' do
# https://gitlab.com/gitlab-org/gitlab/-/issues/5835#note_414103286
'TODO Packages'
@@ -119,7 +113,7 @@ module API
detail 'This feature was introduced in GitLab 13.5'
end
- route_setting :authentication, deploy_token_allowed: true, basic_auth_personal_access_token: true, job_token_allowed: :basic_auth, authenticate_non_public: true
+ route_setting :authentication, authenticate_non_public: true
get ':file_name', requirements: FILE_NAME_REQUIREMENTS do
# https://gitlab.com/gitlab-org/gitlab/-/issues/5835#note_414103286
'TODO File'
diff --git a/lib/api/concerns/packages/nuget_endpoints.rb b/lib/api/concerns/packages/nuget_endpoints.rb
index 5364eeb1880..208daeb3037 100644
--- a/lib/api/concerns/packages/nuget_endpoints.rb
+++ b/lib/api/concerns/packages/nuget_endpoints.rb
@@ -58,7 +58,8 @@ module API
end
get 'index', format: :json do
authorize_read_package!(project_or_group)
- track_package_event('cli_metadata', :nuget, category: 'API::NugetPackages')
+
+ track_package_event('cli_metadata', :nuget, **snowplow_gitlab_standard_context.merge(category: 'API::NugetPackages'))
present ::Packages::Nuget::ServiceIndexPresenter.new(project_or_group),
with: ::API::Entities::Nuget::ServiceIndex
@@ -117,7 +118,7 @@ module API
results = search_packages(params[:q], search_options)
- track_package_event('search_package', :nuget, category: 'API::NugetPackages')
+ track_package_event('search_package', :nuget, **snowplow_gitlab_standard_context.merge(category: 'API::NugetPackages'))
present ::Packages::Nuget::SearchResultsPresenter.new(results),
with: ::API::Entities::Nuget::SearchResults