diff options
Diffstat (limited to 'lib/api/project_export.rb')
-rw-r--r-- | lib/api/project_export.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/api/project_export.rb b/lib/api/project_export.rb new file mode 100644 index 00000000000..8b2c5bedc60 --- /dev/null +++ b/lib/api/project_export.rb @@ -0,0 +1,36 @@ +module API + class ProjectExport < Grape::API + before do + not_found! unless Gitlab::CurrentSettings.current_application_settings.project_export_enabled? + authorize_admin_project + end + + params do + requires :id, type: String, desc: 'The ID of a project' + end + resource :projects, requirements: { id: %r{[^/]+} } do + desc 'Get export status' do + success Entities::ProjectExportStatus + end + get ':id/export' do + present user_project, with: Entities::ProjectExportStatus + end + + desc 'Download export' + get ':id/export/download' do + path = user_project.export_project_path + + render_api_error!('404 Not found or has expired', 404) unless path + + present_file!(path, File.basename(path), 'application/gzip') + end + + desc 'Start export' + post ':id/export' do + user_project.add_export_job(current_user: current_user) + + accepted! + end + end + end +end |