diff options
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/bulk_imports.rb | 2 | ||||
-rw-r--r-- | lib/api/group_export.rb | 116 | ||||
-rw-r--r-- | lib/api/project_export.rb | 167 |
3 files changed, 148 insertions, 137 deletions
diff --git a/lib/api/bulk_imports.rb b/lib/api/bulk_imports.rb index a28db321348..3f861249612 100644 --- a/lib/api/bulk_imports.rb +++ b/lib/api/bulk_imports.rb @@ -33,7 +33,7 @@ module API end before do - not_found! unless ::BulkImports::Features.enabled? + not_found! unless Gitlab::CurrentSettings.bulk_import_enabled? authenticate! end diff --git a/lib/api/group_export.rb b/lib/api/group_export.rb index eb0a01e0d3d..37dfbfdb925 100644 --- a/lib/api/group_export.rb +++ b/lib/api/group_export.rb @@ -64,67 +64,73 @@ module API end end - desc 'Start relations export' do - detail 'This feature was introduced in GitLab 13.12' - tags %w[group_export] - success code: 202 - failure [ - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 503, message: 'Service unavailable' } - ] - end - post ':id/export_relations' do - response = ::BulkImports::ExportService.new(portable: user_group, user: current_user).execute + resource do + before do + not_found! unless Gitlab::CurrentSettings.bulk_import_enabled? + end - if response.success? - accepted! - else - render_api_error!(message: 'Group relations export could not be started.') + desc 'Start relations export' do + detail 'This feature was introduced in GitLab 13.12' + tags %w[group_export] + success code: 202 + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 503, message: 'Service unavailable' } + ] end - end + post ':id/export_relations' do + response = ::BulkImports::ExportService.new(portable: user_group, user: current_user).execute - desc 'Download relations export' do - detail 'This feature was introduced in GitLab 13.12' - produces %w[application/octet-stream application/json] - tags %w[group_export] - success code: 200 - failure [ - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 503, message: 'Service unavailable' } - ] - end - params do - requires :relation, type: String, desc: 'Group relation name' - end - get ':id/export_relations/download' do - export = user_group.bulk_import_exports.find_by_relation(params[:relation]) - file = export&.upload&.export_file + if response.success? + accepted! + else + render_api_error!(message: 'Group relations export could not be started.') + end + end - if file - present_carrierwave_file!(file) - else - render_api_error!('404 Not found', 404) + desc 'Download relations export' do + detail 'This feature was introduced in GitLab 13.12' + produces %w[application/octet-stream application/json] + tags %w[group_export] + success code: 200 + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 503, message: 'Service unavailable' } + ] end - end + params do + requires :relation, type: String, desc: 'Group relation name' + end + get ':id/export_relations/download' do + export = user_group.bulk_import_exports.find_by_relation(params[:relation]) + file = export&.upload&.export_file - desc 'Relations export status' do - detail 'This feature was introduced in GitLab 13.12' - is_array true - tags %w[group_export] - success code: 200, model: Entities::BulkImports::ExportStatus - failure [ - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 503, message: 'Service unavailable' } - ] - end - get ':id/export_relations/status' do - present user_group.bulk_import_exports, with: Entities::BulkImports::ExportStatus + if file + present_carrierwave_file!(file) + else + render_api_error!('404 Not found', 404) + end + end + + desc 'Relations export status' do + detail 'This feature was introduced in GitLab 13.12' + is_array true + tags %w[group_export] + success code: 200, model: Entities::BulkImports::ExportStatus + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 503, message: 'Service unavailable' } + ] + end + get ':id/export_relations/status' do + present user_group.bulk_import_exports, with: Entities::BulkImports::ExportStatus + end end end end diff --git a/lib/api/project_export.rb b/lib/api/project_export.rb index e4e950fb603..19e5ed3f9e0 100644 --- a/lib/api/project_export.rb +++ b/lib/api/project_export.rb @@ -5,109 +5,114 @@ module API feature_category :importers urgency :low - before do - not_found! unless Gitlab::CurrentSettings.project_export_enabled? - authorize_admin_project - end - params do requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the project' end resource :projects, requirements: { id: %r{[^/]+} } do - desc 'Get export status' do - detail 'This feature was introduced in GitLab 10.6.' - success code: 200, model: Entities::ProjectExportStatus - failure [ - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 503, message: 'Service unavailable' } - ] - tags ['project_export'] - end - get ':id/export' do - present user_project, with: Entities::ProjectExportStatus - end + resource do + before do + not_found! unless Gitlab::CurrentSettings.project_export_enabled? - desc 'Download export' do - detail 'This feature was introduced in GitLab 10.6.' - success code: 200 - failure [ - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 503, message: 'Service unavailable' } - ] - tags ['project_export'] - produces %w[application/octet-stream application/json] - end - get ':id/export/download' do - check_rate_limit! :project_download_export, scope: [current_user, user_project.namespace] + authorize_admin_project + end + + desc 'Get export status' do + detail 'This feature was introduced in GitLab 10.6.' + success code: 200, model: Entities::ProjectExportStatus + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 503, message: 'Service unavailable' } + ] + tags ['project_export'] + end + get ':id/export' do + present user_project, with: Entities::ProjectExportStatus + end - if user_project.export_file_exists? - if user_project.export_archive_exists? - present_carrierwave_file!(user_project.export_file) + desc 'Download export' do + detail 'This feature was introduced in GitLab 10.6.' + success code: 200 + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 503, message: 'Service unavailable' } + ] + tags ['project_export'] + produces %w[application/octet-stream application/json] + end + get ':id/export/download' do + check_rate_limit! :project_download_export, scope: [current_user, user_project.namespace] + + if user_project.export_file_exists? + if user_project.export_archive_exists? + present_carrierwave_file!(user_project.export_file) + else + render_api_error!('The project export file is not available yet', 404) + end else - render_api_error!('The project export file is not available yet', 404) + render_api_error!('404 Not found or has expired', 404) end - else - render_api_error!('404 Not found or has expired', 404) end - end - desc 'Start export' do - detail 'This feature was introduced in GitLab 10.6.' - success code: 202 - failure [ - { code: 400, message: 'Bad request' }, - { code: 401, message: 'Unauthorized' }, - { code: 403, message: 'Forbidden' }, - { code: 404, message: 'Not found' }, - { code: 429, message: 'Too many requests' }, - { code: 503, message: 'Service unavailable' } - ] - tags ['project_export'] - end - params do - optional :description, type: String, desc: 'Override the project description' - optional :upload, type: Hash do - optional :url, type: String, desc: 'The URL to upload the project' - optional :http_method, type: String, default: 'PUT', values: %w[PUT POST], - desc: 'HTTP method to upload the exported project' + desc 'Start export' do + detail 'This feature was introduced in GitLab 10.6.' + success code: 202 + failure [ + { code: 400, message: 'Bad request' }, + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not found' }, + { code: 429, message: 'Too many requests' }, + { code: 503, message: 'Service unavailable' } + ] + tags ['project_export'] end - end - post ':id/export' do - check_rate_limit! :project_export, scope: current_user + params do + optional :description, type: String, desc: 'Override the project description' + optional :upload, type: Hash do + optional :url, type: String, desc: 'The URL to upload the project' + optional :http_method, type: String, default: 'PUT', values: %w[PUT POST], + desc: 'HTTP method to upload the exported project' + end + end + post ':id/export' do + check_rate_limit! :project_export, scope: current_user - user_project.remove_exports + user_project.remove_exports - project_export_params = declared_params(include_missing: false) - after_export_params = project_export_params.delete(:upload) || {} + project_export_params = declared_params(include_missing: false) + after_export_params = project_export_params.delete(:upload) || {} - export_strategy = if after_export_params[:url].present? - params = after_export_params.slice(:url, :http_method).symbolize_keys + export_strategy = if after_export_params[:url].present? + params = after_export_params.slice(:url, :http_method).symbolize_keys - Gitlab::ImportExport::AfterExportStrategies::WebUploadStrategy.new(**params) - end + Gitlab::ImportExport::AfterExportStrategies::WebUploadStrategy.new(**params) + end - if export_strategy&.invalid? - render_validation_error!(export_strategy) - else - begin - user_project.add_export_job(current_user: current_user, - after_export_strategy: export_strategy, - params: project_export_params) - rescue Project::ExportLimitExceeded => e - render_api_error!(e.message, 400) + if export_strategy&.invalid? + render_validation_error!(export_strategy) + else + begin + user_project.add_export_job(current_user: current_user, + after_export_strategy: export_strategy, + params: project_export_params) + rescue Project::ExportLimitExceeded => e + render_api_error!(e.message, 400) + end end - end - accepted! + accepted! + end end resource do before do - not_found! unless ::Feature.enabled?(:bulk_import) + not_found! unless Gitlab::CurrentSettings.bulk_import_enabled? + + authorize_admin_project end desc 'Start relations export' do |