79a091b12a
Even in AWS S3 compatibility mode, Google now appears to reject requests that includes this header with this error: ``` Requests cannot specify both x-amz and x-goog headers ``` This has been submitted upstream via https://github.com/carrierwaveuploader/carrierwave/pull/2356. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/53846.
42 lines
1.5 KiB
Ruby
42 lines
1.5 KiB
Ruby
# This monkey patches CarrierWave 1.2.3 to make Google Cloud Storage work with
|
|
# extra query parameters:
|
|
# https://github.com/carrierwaveuploader/carrierwave/pull/2332/files
|
|
module CarrierWave
|
|
module Storage
|
|
class Fog < Abstract
|
|
class File
|
|
def authenticated_url(options = {})
|
|
if %w(AWS Google Rackspace OpenStack).include?(@uploader.fog_credentials[:provider])
|
|
# avoid a get by using local references
|
|
local_directory = connection.directories.new(key: @uploader.fog_directory)
|
|
local_file = local_directory.files.new(key: path)
|
|
expire_at = ::Fog::Time.now + @uploader.fog_authenticated_url_expiration
|
|
case @uploader.fog_credentials[:provider]
|
|
when 'AWS', 'Google'
|
|
local_file.url(expire_at, options)
|
|
when 'Rackspace'
|
|
connection.get_object_https_url(@uploader.fog_directory, path, expire_at, options)
|
|
when 'OpenStack'
|
|
connection.get_object_https_url(@uploader.fog_directory, path, expire_at)
|
|
else
|
|
local_file.url(expire_at)
|
|
end
|
|
end
|
|
end
|
|
|
|
# Fix for https://github.com/carrierwaveuploader/carrierwave/pull/2356
|
|
def acl_header
|
|
if fog_provider == 'AWS'
|
|
{ 'x-amz-acl' => @uploader.fog_public ? 'public-read' : 'private' }
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
|
|
def fog_provider
|
|
@uploader.fog_credentials[:provider].to_s
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|