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/nuget_project_packages.rb')
-rw-r--r--lib/api/nuget_project_packages.rb94
1 files changed, 64 insertions, 30 deletions
diff --git a/lib/api/nuget_project_packages.rb b/lib/api/nuget_project_packages.rb
index 2716d6f0b64..bff645700f5 100644
--- a/lib/api/nuget_project_packages.rb
+++ b/lib/api/nuget_project_packages.rb
@@ -98,9 +98,30 @@ module API
created!
end
+ def publish_package(symbol_package: false)
+ upload_nuget_package_file(symbol_package: symbol_package) do |package|
+ track_package_event(
+ symbol_package ? 'push_symbol_package' : 'push_package',
+ :nuget,
+ **{ category: 'API::NugetPackages',
+ project: package.project,
+ namespace: package.project.namespace }.tap { |args| args[:feed] = 'v2' if request.path.include?('nuget/v2') }
+ )
+ end
+ rescue ObjectStorage::RemoteStoreError => e
+ Gitlab::ErrorTracking.track_exception(e, extra: { file_name: params[:file_name], project_id: project_or_group.id })
+
+ forbidden!
+ end
+
def required_permission
:read_package
end
+
+ def format_filename(package)
+ return "#{params[:package_filename]}.#{params[:format]}" if Feature.disabled?(:nuget_normalized_version, project_or_group) || package.version == params[:package_version]
+ return "#{params[:package_filename].sub(params[:package_version], package.version)}.#{params[:format]}" if package.normalized_nuget_version == params[:package_version]
+ end
end
params do
@@ -159,8 +180,9 @@ module API
requires :package_filename, type: String, desc: 'The NuGet package filename', regexp: API::NO_SLASH_URL_PART_REGEX, documentation: { example: 'mynugetpkg.1.3.0.17.nupkg' }
end
get '*package_version/*package_filename', format: [:nupkg, :snupkg], urgency: :low do
- filename = "#{params[:package_filename]}.#{params[:format]}"
- package_file = ::Packages::PackageFileFinder.new(find_package(params[:package_name], params[:package_version]), filename, with_file_name_like: true)
+ package = find_package(params[:package_name], params[:package_version])
+ filename = format_filename(package)
+ package_file = ::Packages::PackageFileFinder.new(package, filename, with_file_name_like: true)
.execute
not_found!('Package') unless package_file
@@ -179,7 +201,7 @@ module API
end
end
- # To support an additional authentication option for download endpoints,
+ # To support an additional authentication option for publish endpoints,
# we redefine the `authenticate_with` method by combining the previous
# authentication option with the new one.
authenticate_with do |accept|
@@ -191,7 +213,7 @@ module API
namespace '/nuget' do
# https://docs.microsoft.com/en-us/nuget/api/package-publish-resource
- desc 'The NuGet Package Publish endpoint' do
+ desc 'The NuGet V3 Feed Package Publish endpoint' do
detail 'This feature was introduced in GitLab 12.6'
success code: 201
failure [
@@ -207,19 +229,7 @@ module API
use :file_params
end
put urgency: :low do
- upload_nuget_package_file do |package|
- track_package_event(
- 'push_package',
- :nuget,
- category: 'API::NugetPackages',
- project: package.project,
- namespace: package.project.namespace
- )
- end
- rescue ObjectStorage::RemoteStoreError => e
- Gitlab::ErrorTracking.track_exception(e, extra: { file_name: params[:file_name], project_id: project_or_group.id })
-
- forbidden!
+ publish_package
end
desc 'The NuGet Package Authorize endpoint' do
@@ -252,19 +262,7 @@ module API
use :file_params
end
put 'symbolpackage', urgency: :low do
- upload_nuget_package_file(symbol_package: true) do |package|
- track_package_event(
- 'push_symbol_package',
- :nuget,
- category: 'API::NugetPackages',
- project: package.project,
- namespace: package.project.namespace
- )
- end
- rescue ObjectStorage::RemoteStoreError => e
- Gitlab::ErrorTracking.track_exception(e, extra: { file_name: params[:file_name], project_id: project_or_group.id })
-
- forbidden!
+ publish_package(symbol_package: true)
end
desc 'The NuGet Symbol Package Authorize endpoint' do
@@ -280,6 +278,42 @@ module API
put 'symbolpackage/authorize', urgency: :low do
authorize_nuget_upload
end
+
+ namespace '/v2' do
+ desc 'The NuGet V2 Feed Package Publish endpoint' do
+ detail 'This feature was introduced in GitLab 16.2'
+ success code: 201
+ failure [
+ { code: 400, message: 'Bad Request' },
+ { code: 401, message: 'Unauthorized' },
+ { code: 403, message: 'Forbidden' },
+ { code: 404, message: 'Not Found' }
+ ]
+ tags %w[nuget_packages]
+ end
+
+ params do
+ use :file_params
+ end
+ put do
+ publish_package
+ end
+
+ desc 'The NuGet V2 Feed Package Authorize endpoint' do
+ detail 'This feature was introduced in GitLab 16.2'
+ success code: 200
+ failure [
+ { code: 401, message: 'Unauthorized' },
+ { code: 403, message: 'Forbidden' },
+ { code: 404, message: 'Not Found' }
+ ]
+ tags %w[nuget_packages]
+ end
+
+ put 'authorize', urgency: :low do
+ authorize_nuget_upload
+ end
+ end
end
end
end