Class: Packages::Npm::CreatePackageService
- Inherits:
-
CreatePackageService
- Object
- BaseService
- CreatePackageService
- Packages::Npm::CreatePackageService
- Includes:
- ExclusiveLeaseGuard, Gitlab::Utils::StrongMemoize
- Defined in:
- app/services/packages/npm/create_package_service.rb
Constant Summary collapse
- INSTALL_SCRIPT_KEYS =
%w[preinstall install postinstall].freeze
- PACKAGE_JSON_NOT_ALLOWED_FIELDS =
%w[readme readmeFilename licenseText contributors exports].freeze
- DEFAULT_LEASE_TIMEOUT =
1.hour.to_i
- ERROR_REASON_INVALID_PARAMETER =
:invalid_parameter
- ERROR_REASON_PACKAGE_EXISTS =
:package_already_exists
- ERROR_REASON_PACKAGE_LEASE_TAKEN =
:package_lease_taken
- ERROR_REASON_PACKAGE_PROTECTED =
:package_protected
- ERROR_REASON_UNAUTHORIZED =
:unauthorized
Instance Attribute Summary
Attributes inherited from BaseService
#current_user, #params, #project
Instance Method Summary collapse
Methods included from ExclusiveLeaseGuard
#exclusive_lease, #lease_release?, #lease_taken_log_level, #lease_taken_message, #log_lease_taken, #release_lease, #renew_lease!, #try_obtain_lease
Methods inherited from BaseService
Methods included from BaseServiceUtility
#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level
Methods included from Gitlab::Allowable
Constructor Details
This class inherits a constructor from BaseService
Instance Method Details
#execute ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/services/packages/npm/create_package_service.rb', line 19 def execute return error('Unauthorized', ERROR_REASON_UNAUTHORIZED) unless can_create_package? return error('Version is empty.', ERROR_REASON_INVALID_PARAMETER) if version.blank? return error('Attachment data is empty.', ERROR_REASON_INVALID_PARAMETER) if ['data'].blank? return error('Package already exists.', ERROR_REASON_PACKAGE_EXISTS) if current_package_exists? return error('Package protected.', ERROR_REASON_PACKAGE_PROTECTED) if current_package_protected? return error('File is too large.', ERROR_REASON_INVALID_PARAMETER) if file_size_exceeded? package, package_file = try_obtain_lease do ApplicationRecord.transaction { create_npm_package! } end unless package return error('Could not obtain package lease. Please try again.', ERROR_REASON_PACKAGE_LEASE_TAKEN) end ::Packages::Npm::ProcessPackageFileWorker.perform_async(package_file.id) if package.processing? ServiceResponse.success(payload: { package: package }) end |