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/rubygem_packages.rb')
-rw-r--r--lib/api/rubygem_packages.rb39
1 files changed, 34 insertions, 5 deletions
diff --git a/lib/api/rubygem_packages.rb b/lib/api/rubygem_packages.rb
index 7819aab879c..5bacf9b122d 100644
--- a/lib/api/rubygem_packages.rb
+++ b/lib/api/rubygem_packages.rb
@@ -12,7 +12,7 @@ module API
# The Marshal version can be found by "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
# Updating the version should require a GitLab API version change.
MARSHAL_VERSION = '4.8'
-
+ PACKAGE_FILENAME = 'package.gem'
FILE_NAME_REQUIREMENTS = {
file_name: API::NO_SLASH_URL_PART_REGEX
}.freeze
@@ -73,16 +73,45 @@ module API
detail 'This feature was introduced in GitLab 13.9'
end
post 'gems/authorize' do
- # To be implemented in https://gitlab.com/gitlab-org/gitlab/-/issues/299263
- not_found!
+ authorize_workhorse!(
+ subject: user_project,
+ has_length: false,
+ maximum_size: user_project.actual_limits.rubygems_max_file_size
+ )
end
desc 'Upload a gem' do
detail 'This feature was introduced in GitLab 13.9'
end
+ params do
+ requires :file, type: ::API::Validations::Types::WorkhorseFile, desc: 'The package file to be published (generated by Multipart middleware)'
+ end
post 'gems' do
- # To be implemented in https://gitlab.com/gitlab-org/gitlab/-/issues/299263
- not_found!
+ authorize_upload!(user_project)
+ bad_request!('File is too large') if user_project.actual_limits.exceeded?(:rubygems_max_file_size, params[:file].size)
+
+ track_package_event('push_package', :rubygems)
+
+ ActiveRecord::Base.transaction do
+ package = ::Packages::CreateTemporaryPackageService.new(
+ user_project, current_user, declared_params.merge(build: current_authenticated_job)
+ ).execute(:rubygems, name: ::Packages::Rubygems::TEMPORARY_PACKAGE_NAME)
+
+ file_params = {
+ file: params[:file],
+ file_name: PACKAGE_FILENAME
+ }
+
+ ::Packages::CreatePackageFileService.new(
+ package, file_params.merge(build: current_authenticated_job)
+ ).execute
+ end
+
+ created!
+ rescue ObjectStorage::RemoteStoreError => e
+ Gitlab::ErrorTracking.track_exception(e, extra: { file_name: params[:file_name], project_id: user_project.id })
+
+ forbidden!
end
desc 'Fetch a list of dependencies' do