gitlab-fog-azure-rm 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff14f21c88b74f1fcebcd7b5b755fcfb0ce5e38878ea4bdc8742f3bd0bf9cfb6
4
- data.tar.gz: 0e98eeae909840a4bb1370ac392a171f3d017832c623efb7c3e2ba345b0715ef
3
+ metadata.gz: 9cc556f2028cd1a063691e4556dc1421014476690f700eb31fea81bcac574b41
4
+ data.tar.gz: e6e7d3c355e63cf6a0501d2bc85cbfd994ae54349c950657f6619244fecc9d02
5
5
  SHA512:
6
- metadata.gz: 6efb40c94a812fb275c8175972b8b41091c090bf05fbedd9cd57de61fd0baa2f98069006f8053af33a28b620a9cd1f2eb1de8fe3c8c02c1afd9a14c2f226886b
7
- data.tar.gz: ed51ec358917aaca4e042e7cf298b5b45e9898829edd250067e71e4d2a6f55154d1a54f4ade1c152a50ec718a2b4899f5f00d65a5ad95c74e772e4d922d0ff43
6
+ metadata.gz: c1ffb76c0ba61d39f675c90612afdf3ae06f0b0835c8f6162a874b73a637e58e4c2c07c0b193ede34ef84601c040920e7a93c2ade997abcdd3c39a64f45d9ff9
7
+ data.tar.gz: bae99d6843a450a5072a9a8e5a2e94de43a6849565fa38c2b288d3c14fbeb70066be960b08c0172a5a9eb61314119d1e78dfb890f90fa4b4af7f7784b028fcdd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 1.2.0
4
+
5
+ - Support setting returned Content-Disposition in GetBlob requests !25
6
+
3
7
  ## 1.1.1
4
8
 
5
9
  - Remove trailing periods per path segment when retrieving blob URLs !23
@@ -240,11 +240,19 @@ module Fog
240
240
  #
241
241
  def url(expires, options = {})
242
242
  requires :key
243
- collection.get_url(key, expires, options)
243
+ collection.get_url(key, expires, normalize_options(options))
244
244
  end
245
245
 
246
246
  private
247
247
 
248
+ def normalize_options(options)
249
+ # AWS S3 and Google Cloud Storage pass response-content-disposition
250
+ # as a query string, while Azure needs the content_disposition parameter
251
+ # to generate a SAS token.
252
+ options[:content_disposition] ||= options.dig(:query, 'response-content-disposition')
253
+ options
254
+ end
255
+
248
256
  # Upload blob
249
257
  def save_blob(options)
250
258
  if options[:blob_type].nil? || options[:blob_type] == 'BlockBlob'
@@ -123,10 +123,10 @@ module Fog
123
123
  #
124
124
  # @return [String] A http URL.
125
125
  #
126
- def get_http_url(key, expires, _options = {})
126
+ def get_http_url(key, expires, options = {})
127
127
  requires :directory
128
128
 
129
- service.get_blob_http_url(directory.key, key, expires)
129
+ service.get_blob_http_url(directory.key, key, expires, options)
130
130
  end
131
131
 
132
132
  # Get the https URL of the file(blob) with the given name.
@@ -139,10 +139,10 @@ module Fog
139
139
  #
140
140
  # @return [String] A https URL.
141
141
  #
142
- def get_https_url(key, expires, _options = {})
142
+ def get_https_url(key, expires, options = {})
143
143
  requires :directory
144
144
 
145
- service.get_blob_https_url(directory.key, key, expires)
145
+ service.get_blob_https_url(directory.key, key, expires, options)
146
146
  end
147
147
 
148
148
  # Get the file(blob) without content with the given name.
@@ -13,14 +13,15 @@ module Fog
13
13
  #
14
14
  # @see https://msdn.microsoft.com/en-us/library/azure/mt584140.aspx
15
15
  #
16
- def get_blob_http_url(container_name, blob_name, expires)
16
+ def get_blob_http_url(container_name, blob_name, expires, options = {})
17
17
  relative_path = "#{container_name}/#{blob_name}"
18
18
  relative_path = remove_trailing_periods_from_path_segments(relative_path)
19
19
  params = {
20
20
  service: 'b',
21
21
  resource: 'b',
22
22
  permissions: 'r',
23
- expiry: expires.utc.iso8601
23
+ expiry: expires.utc.iso8601,
24
+ content_disposition: options[:content_disposition]
24
25
  }
25
26
  token = @signature_client.generate_service_sas_token(relative_path, params)
26
27
  uri = @blob_client.generate_uri(relative_path, {}, { encode: true })
@@ -13,7 +13,7 @@ module Fog
13
13
  #
14
14
  # @see https://msdn.microsoft.com/en-us/library/azure/mt584140.aspx
15
15
  #
16
- def get_blob_https_url(container_name, blob_name, expires)
16
+ def get_blob_https_url(container_name, blob_name, expires, options = {})
17
17
  relative_path = "#{container_name}/#{blob_name}"
18
18
  relative_path = remove_trailing_periods_from_path_segments(relative_path)
19
19
  params = {
@@ -21,7 +21,8 @@ module Fog
21
21
  resource: 'b',
22
22
  permissions: 'r',
23
23
  expiry: expires.utc.iso8601,
24
- protocol: 'https'
24
+ protocol: 'https',
25
+ content_disposition: options[:content_disposition]
25
26
  }
26
27
  token = @signature_client.generate_service_sas_token(relative_path, params)
27
28
  uri = @blob_client.generate_uri(relative_path, {}, { encode: true })
@@ -5,15 +5,15 @@ module Fog
5
5
  class Real
6
6
  # Get a public blob url from Azure blob storage
7
7
  # This is to make this library compatible with CarrierWave.
8
- def get_object_url(container_name, blob_name, expires)
9
- get_blob_https_url(container_name, blob_name, expires)
8
+ def get_object_url(container_name, blob_name, expires, options = {})
9
+ get_blob_https_url(container_name, blob_name, expires, options)
10
10
  end
11
11
  end
12
12
 
13
13
  # This class provides the mock implementation for unit tests.
14
14
  class Mock
15
- def get_object_url(container_name, blob_name, expires)
16
- get_blob_https_url(container_name, blob_name, expires)
15
+ def get_object_url(container_name, blob_name, expires, options = {})
16
+ get_blob_https_url(container_name, blob_name, expires, options)
17
17
  end
18
18
  end
19
19
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AzureRM
3
- VERSION = '1.1.1'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path '../../test_helper', __dir__
2
2
 
3
3
  # Test class for Storage Container Model
4
- class TestFile < Minitest::Test
4
+ class TestFile < Minitest::Test # rubocop:disable Metrics/ClassLength
5
5
  def setup
6
6
  @service = Fog::Storage::AzureRM.new(storage_account_credentials)
7
7
  @directory = directory(@service)
@@ -283,6 +283,18 @@ class TestFile < Minitest::Test
283
283
  end
284
284
  end
285
285
 
286
+ def test_url_method_with_content_disposition
287
+ @file.collection.stub :get_url, @blob_https_url, { content_disposition: 'attachment' } do
288
+ assert @file.url(Time.now + 3600, content_disposition: 'attachment'), @blob_https_url
289
+ end
290
+ end
291
+
292
+ def test_url_method_with_response_content_disposition
293
+ @file.collection.stub :get_url, @blob_https_url, { content_disposition: 'attachment' } do
294
+ assert @file.url(Time.now + 3600, { query: { 'response-content-disposition' => 'attachment' } }), @blob_https_url
295
+ end
296
+ end
297
+
286
298
  def test_url_method_without_key_exception
287
299
  assert_raises(ArgumentError) do
288
300
  @file.attributes.delete(:key)
@@ -24,6 +24,27 @@ class TestGetBlobHttpUrl < Minitest::Test
24
24
  end
25
25
  end
26
26
 
27
+ def test_get_blob_http_url_with_content_disposition
28
+ mock_generate_uri = Minitest::Mock.new
29
+ mock_generate_service_token = Minitest::Mock.new
30
+ url_params = { content_disposition: 'attachment' }
31
+
32
+ mock_generate_uri.expect(:call, @url, ['test_container/test_blob', {}, { encode: true }])
33
+ mock_generate_service_token.expect(:call, @token) do |_relative_path, params|
34
+ params[:service] == 'b' &&
35
+ params[:resource] == 'b' &&
36
+ params[:permissions] == 'r' &&
37
+ params[:protocol].nil? &&
38
+ params[:content_disposition] == url_params[:content_disposition]
39
+ end
40
+
41
+ @blob_client.stub :generate_uri, mock_generate_uri do
42
+ @signature_client.stub :generate_service_sas_token, mock_generate_service_token do
43
+ assert_equal "#{@url}?#{@token}", @service.get_blob_http_url('test_container', 'test_blob', Time.now.utc + 3600, url_params)
44
+ end
45
+ end
46
+ end
47
+
27
48
  def test_get_url_remove_trailing_periods_from_path_segments
28
49
  mock_generate_uri = Minitest::Mock.new
29
50
  mock_generate_service_token = Minitest::Mock.new
@@ -31,6 +31,29 @@ class TestGetBlobHttpsUrl < Minitest::Test
31
31
  end
32
32
  end
33
33
 
34
+ def test_get_blob_https_url_with_content_disposition
35
+ mock_generate_uri = Minitest::Mock.new
36
+ mock_generate_service_token = Minitest::Mock.new
37
+ url_params = { content_disposition: 'attachment' }
38
+
39
+ 2.times do
40
+ mock_generate_uri.expect(:call, @url, ['test_container/test_blob', {}, { encode: true }])
41
+ mock_generate_service_token.expect(:call, @token) do |_relative_path, params|
42
+ params[:service] == 'b' &&
43
+ params[:resource] == 'b' &&
44
+ params[:permissions] == 'r' &&
45
+ params[:content_disposition] == url_params[:content_disposition]
46
+ end
47
+ end
48
+
49
+ @blob_client.stub :generate_uri, mock_generate_uri do
50
+ @signature_client.stub :generate_service_sas_token, mock_generate_service_token do
51
+ assert_equal "#{@url}?#{@token}", @service.get_blob_https_url('test_container', 'test_blob', Time.now.utc + 3600, url_params)
52
+ assert_equal "#{@url}?#{@token}", @service.get_object_url('test_container', 'test_blob', Time.now.utc + 3600, url_params)
53
+ end
54
+ end
55
+ end
56
+
34
57
  def test_get_url_remove_trailing_periods_from_path_segments
35
58
  mock_generate_uri = Minitest::Mock.new
36
59
  mock_generate_service_token = Minitest::Mock.new
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-fog-azure-rm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaffan Chaudhry
@@ -15,10 +15,10 @@ authors:
15
15
  - Azeem Sajid
16
16
  - Maham Nazir
17
17
  - Abbas Sheikh
18
- autorequire:
18
+ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2021-06-09 00:00:00.000000000 Z
21
+ date: 2021-09-20 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: codeclimate-test-reporter
@@ -176,7 +176,7 @@ dependencies:
176
176
  version: 0.12.0
177
177
  description: This is a stripped-down fork of fog-azure-rm that enables Azure Blob
178
178
  Storage to be used with CarrierWave and Fog.
179
- email:
179
+ email:
180
180
  executables: []
181
181
  extensions: []
182
182
  extra_rdoc_files:
@@ -338,8 +338,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
338
338
  - !ruby/object:Gem::Version
339
339
  version: '0'
340
340
  requirements: []
341
- rubygems_version: 3.1.4
342
- signing_key:
341
+ rubygems_version: 3.1.6
342
+ signing_key:
343
343
  specification_version: 4
344
344
  summary: Module for the 'fog' gem to support Azure Blob Storage with CarrierWave and
345
345
  Fog.