debian-mirror-gitlab/lib/gitlab/import_export/after_export_strategies/web_upload_strategy.rb

72 lines
1.6 KiB
Ruby
Raw Normal View History

2019-02-15 15:39:39 +05:30
# frozen_string_literal: true
2018-05-09 12:01:36 +05:30
module Gitlab
module ImportExport
module AfterExportStrategies
class WebUploadStrategy < BaseAfterExportStrategy
2019-12-04 20:38:33 +05:30
PUT_METHOD = 'PUT'
POST_METHOD = 'POST'
INVALID_HTTP_METHOD = 'invalid. Only PUT and POST methods allowed.'
2018-05-09 12:01:36 +05:30
2019-07-31 22:56:46 +05:30
validates :url, addressable_url: true
2018-05-09 12:01:36 +05:30
validate do
unless [PUT_METHOD, POST_METHOD].include?(http_method.upcase)
errors.add(:http_method, INVALID_HTTP_METHOD)
end
end
def initialize(url:, http_method: PUT_METHOD)
super
end
protected
def strategy_execute
handle_response_error(send_file)
end
def handle_response_error(response)
unless response.success?
2021-06-08 01:23:25 +05:30
raise StrategyError, "Error uploading the project. Code #{response.code}: #{response.message}"
2018-05-09 12:01:36 +05:30
end
end
2021-09-04 01:27:46 +05:30
def delete_export?
false
end
2018-05-09 12:01:36 +05:30
private
def send_file
2018-11-08 19:23:39 +05:30
Gitlab::HTTP.public_send(http_method.downcase, url, send_file_options) # rubocop:disable GitlabSecurity/PublicSend
2018-05-09 12:01:36 +05:30
ensure
2018-11-20 20:47:30 +05:30
export_file.close if export_file
2018-11-08 19:23:39 +05:30
end
def export_file
2018-11-20 20:47:30 +05:30
project.export_file.open
2018-05-09 12:01:36 +05:30
end
2018-11-08 19:23:39 +05:30
def send_file_options
2018-05-09 12:01:36 +05:30
{
body_stream: export_file,
headers: headers
}
end
def headers
2020-05-24 23:13:21 +05:30
{
'Content-Type' => 'application/gzip',
'Content-Length' => export_size.to_s
}
2018-11-08 19:23:39 +05:30
end
def export_size
2018-11-20 20:47:30 +05:30
project.export_file.file.size
2018-05-09 12:01:36 +05:30
end
end
end
end
end