gitlab-fog-azure-rm 1.9.1 → 2.0.1

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +1 -1
  3. data/.rubocop.yml +3 -0
  4. data/CHANGELOG.md +19 -0
  5. data/gitlab-fog-azure-rm.gemspec +6 -2
  6. data/lib/azure/core/auth/authorizer.rb +36 -0
  7. data/lib/azure/core/auth/shared_key.rb +125 -0
  8. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  9. data/lib/azure/core/auth/signer.rb +51 -0
  10. data/lib/azure/core/default.rb +23 -0
  11. data/lib/azure/core/error.rb +21 -0
  12. data/lib/azure/core/filtered_service.rb +45 -0
  13. data/lib/azure/core/http/debug_filter.rb +36 -0
  14. data/lib/azure/core/http/http_error.rb +135 -0
  15. data/lib/azure/core/http/http_filter.rb +53 -0
  16. data/lib/azure/core/http/http_request.rb +195 -0
  17. data/lib/azure/core/http/http_response.rb +102 -0
  18. data/lib/azure/core/http/retry_policy.rb +84 -0
  19. data/lib/azure/core/http/signer_filter.rb +33 -0
  20. data/lib/azure/core/service.rb +46 -0
  21. data/lib/azure/core/signed_service.rb +45 -0
  22. data/lib/azure/core/utility.rb +244 -0
  23. data/lib/azure/core/version.rb +33 -0
  24. data/lib/azure/core.rb +48 -0
  25. data/lib/azure/http_response_helper.rb +38 -0
  26. data/lib/azure/storage/blob/append.rb +244 -0
  27. data/lib/azure/storage/blob/autoload.rb +47 -0
  28. data/lib/azure/storage/blob/blob.rb +932 -0
  29. data/lib/azure/storage/blob/blob_service.rb +720 -0
  30. data/lib/azure/storage/blob/block.rb +530 -0
  31. data/lib/azure/storage/blob/container.rb +634 -0
  32. data/lib/azure/storage/blob/default.rb +171 -0
  33. data/lib/azure/storage/blob/page.rb +566 -0
  34. data/lib/azure/storage/blob/serialization.rb +351 -0
  35. data/lib/azure/storage/blob/version.rb +49 -0
  36. data/lib/azure/storage/blob.rb +26 -0
  37. data/lib/azure/storage/common/autoload.rb +62 -0
  38. data/lib/azure/storage/common/client.rb +162 -0
  39. data/lib/azure/storage/common/client_options.rb +363 -0
  40. data/lib/azure/storage/common/client_options_error.rb +41 -0
  41. data/lib/azure/storage/common/configurable.rb +212 -0
  42. data/lib/azure/storage/common/core/auth/anonymous_signer.rb +43 -0
  43. data/lib/azure/storage/common/core/auth/shared_access_signature.rb +30 -0
  44. data/lib/azure/storage/common/core/auth/shared_access_signature_generator.rb +399 -0
  45. data/lib/azure/storage/common/core/auth/shared_access_signature_signer.rb +57 -0
  46. data/lib/azure/storage/common/core/auth/shared_key.rb +60 -0
  47. data/lib/azure/storage/common/core/auth/token_signer.rb +43 -0
  48. data/lib/azure/storage/common/core/autoload.rb +53 -0
  49. data/lib/azure/storage/common/core/error.rb +43 -0
  50. data/lib/azure/storage/common/core/filter/exponential_retry_filter.rb +64 -0
  51. data/lib/azure/storage/common/core/filter/linear_retry_filter.rb +55 -0
  52. data/lib/azure/storage/common/core/filter/retry_filter.rb +300 -0
  53. data/lib/azure/storage/common/core/http_client.rb +82 -0
  54. data/lib/azure/storage/common/core/sr.rb +85 -0
  55. data/lib/azure/storage/common/core/token_credential.rb +64 -0
  56. data/lib/azure/storage/common/core/utility.rb +261 -0
  57. data/lib/azure/storage/common/core.rb +35 -0
  58. data/lib/azure/storage/common/default.rb +868 -0
  59. data/lib/azure/storage/common/service/access_policy.rb +37 -0
  60. data/lib/azure/storage/common/service/cors.rb +38 -0
  61. data/lib/azure/storage/common/service/cors_rule.rb +48 -0
  62. data/lib/azure/storage/common/service/enumeration_results.rb +32 -0
  63. data/lib/azure/storage/common/service/geo_replication.rb +40 -0
  64. data/lib/azure/storage/common/service/logging.rb +47 -0
  65. data/lib/azure/storage/common/service/metrics.rb +45 -0
  66. data/lib/azure/storage/common/service/retention_policy.rb +37 -0
  67. data/lib/azure/storage/common/service/serialization.rb +335 -0
  68. data/lib/azure/storage/common/service/signed_identifier.rb +40 -0
  69. data/lib/azure/storage/common/service/storage_service.rb +322 -0
  70. data/lib/azure/storage/common/service/storage_service_properties.rb +48 -0
  71. data/lib/azure/storage/common/service/storage_service_stats.rb +39 -0
  72. data/lib/azure/storage/common/service/user_delegation_key.rb +50 -0
  73. data/lib/azure/storage/common/version.rb +49 -0
  74. data/lib/azure/storage/common.rb +26 -0
  75. data/lib/fog/azurerm/version.rb +1 -1
  76. metadata +122 -5
@@ -0,0 +1,351 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+ require "base64"
27
+
28
+ module Azure::Storage
29
+ module Blob
30
+ module Serialization
31
+ include Azure::Storage::Common::Service::Serialization
32
+
33
+ def self.container_enumeration_results_from_xml(xml)
34
+ xml = slopify(xml)
35
+ expect_node("EnumerationResults", xml)
36
+
37
+ results = enumeration_results_from_xml(xml, Azure::Storage::Common::Service::EnumerationResults.new)
38
+
39
+ return results unless (xml > "Containers").any? && ((xml > "Containers") > "Container").any?
40
+
41
+ if xml.Containers.Container.count == 0
42
+ results.push(container_from_xml(xml.Containers.Container))
43
+ else
44
+ xml.Containers.Container.each { |container_node|
45
+ results.push(container_from_xml(container_node))
46
+ }
47
+ end
48
+
49
+ results
50
+ end
51
+
52
+ def self.key_info_to_xml(start, expiry)
53
+ builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
54
+ xml.KeyInfo {
55
+ xml.Start start.utc.iso8601
56
+ xml.Expiry expiry.utc.iso8601
57
+ }
58
+ end
59
+ builder.to_xml
60
+ end
61
+
62
+ def self.user_delegation_key_from_xml(xml)
63
+ xml = slopify(xml)
64
+ expect_node("UserDelegationKey", xml)
65
+
66
+ Azure::Storage::Common::Service::UserDelegationKey.new do |user_delegation_key|
67
+ user_delegation_key.signed_oid = xml.SignedOid.text if (xml > "SignedOid").any?
68
+ user_delegation_key.signed_tid = xml.SignedTid.text if (xml > "SignedTid").any?
69
+ user_delegation_key.signed_start = xml.SignedStart.text if (xml > "SignedStart").any?
70
+ user_delegation_key.signed_expiry = xml.SignedExpiry.text if (xml > "SignedExpiry").any?
71
+ user_delegation_key.signed_service = xml.SignedService.text if (xml > "SignedService").any?
72
+ user_delegation_key.signed_version = xml.SignedVersion.text if (xml > "SignedVersion").any?
73
+ user_delegation_key.value = xml.Value.text if (xml > "Value").any?
74
+ end
75
+ end
76
+
77
+ def self.container_from_xml(xml)
78
+ xml = slopify(xml)
79
+ expect_node("Container", xml)
80
+
81
+ Container::Container.new do |container|
82
+ container.name = xml.Name.text if (xml > "Name").any?
83
+ container.properties = container_properties_from_xml(xml.Properties) if (xml > "Properties").any?
84
+ container.metadata = metadata_from_xml(xml.Metadata) if (xml > "Metadata").any?
85
+ container.public_access_level = public_access_level_from_properties_xml(xml.Properties) if (xml > "Properties").any?
86
+ end
87
+ end
88
+
89
+ def self.container_from_headers(headers)
90
+ Container::Container.new do |container|
91
+ container.properties = container_properties_from_headers(headers)
92
+ container.public_access_level = public_access_level_from_headers(headers)
93
+ container.metadata = metadata_from_headers(headers)
94
+ end
95
+ end
96
+
97
+ def self.container_properties_from_xml(xml)
98
+ xml = slopify(xml)
99
+ expect_node("Properties", xml)
100
+
101
+ props = {}
102
+
103
+ props[:last_modified] = (xml > "Last-Modified").text if (xml > "Last-Modified").any?
104
+ props[:etag] = xml.Etag.text if (xml > "Etag").any?
105
+ props[:lease_status] = xml.LeaseStatus.text if (xml > "LeaseStatus").any?
106
+ props[:lease_state] = xml.LeaseState.text if (xml > "LeaseState").any?
107
+ props[:lease_duration] = xml.LeaseDuration.text if (xml > "LeaseDuration").any?
108
+
109
+ props
110
+ end
111
+
112
+ def self.container_properties_from_headers(headers)
113
+ props = {}
114
+
115
+ props[:last_modified] = headers["Last-Modified"]
116
+ props[:etag] = headers["Etag"]
117
+ props[:lease_status] = headers["x-ms-lease-status"]
118
+ props[:lease_state] = headers["x-ms-lease-state"]
119
+ props[:lease_duration] = headers["x-ms-lease-duration"]
120
+
121
+ props
122
+ end
123
+
124
+ def self.public_access_level_from_headers(headers)
125
+ headers["x-ms-blob-public-access"]
126
+ end
127
+
128
+ def self.public_access_level_from_properties_xml(xml)
129
+ (xml > "PublicAccess").any? ? xml.PublicAccess.text : nil
130
+ end
131
+
132
+ def self.blob_enumeration_results_from_xml(xml)
133
+ xml = slopify(xml)
134
+ expect_node("EnumerationResults", xml)
135
+
136
+ results = enumeration_results_from_xml(xml, Azure::Storage::Common::Service::EnumerationResults.new)
137
+
138
+ return results unless (xml > "Blobs").any?
139
+
140
+ if ((xml > "Blobs") > "Blob").any?
141
+ if xml.Blobs.Blob.count == 0
142
+ results.push(blob_from_xml(xml.Blobs.Blob))
143
+ else
144
+ xml.Blobs.Blob.each { |blob_node|
145
+ results.push(blob_from_xml(blob_node))
146
+ }
147
+ end
148
+ end
149
+
150
+ if ((xml > "Blobs") > "BlobPrefix").any?
151
+ if xml.Blobs.BlobPrefix.count == 0
152
+ results.push(blob_prefix_from_xml(xml.Blobs.BlobPrefix))
153
+ else
154
+ xml.Blobs.BlobPrefix.each { |blob_prefix|
155
+ results.push(blob_prefix_from_xml(blob_prefix))
156
+ }
157
+ end
158
+ end
159
+
160
+ results
161
+ end
162
+
163
+ def self.blob_prefix_from_xml(xml)
164
+ xml = slopify(xml)
165
+ expect_node("BlobPrefix", xml)
166
+
167
+ name = xml.Name.text if (xml > "Name").any?
168
+ name
169
+ end
170
+
171
+ def self.blob_from_xml(xml)
172
+ xml = slopify(xml)
173
+ expect_node("Blob", xml)
174
+
175
+ Blob.new do |blob|
176
+ blob.name = xml.Name.text if (xml > "Name").any?
177
+ blob.snapshot = xml.Snapshot.text if (xml > "Snapshot").any?
178
+
179
+ blob.metadata = metadata_from_xml(xml.Metadata) if (xml > "Metadata").any?
180
+ if (xml > "Properties").any?
181
+ blob.properties = blob_properties_from_xml(xml.Properties)
182
+ blob.encrypted = xml.Properties.ServerEncrypted.text == "true" if (xml.Properties > "ServerEncrypted").any?
183
+ end
184
+ end
185
+ end
186
+
187
+ def self.blob_from_headers(headers)
188
+ Blob.new do |blob|
189
+ blob.properties = blob_properties_from_headers(headers)
190
+ blob.metadata = metadata_from_headers(headers)
191
+ blob.encrypted = headers[Azure::Storage::Common::HeaderConstants::REQUEST_SERVER_ENCRYPTED] || headers[Azure::Storage::Common::HeaderConstants::SERVER_ENCRYPTED]
192
+ blob.encrypted = blob.encrypted.to_s == "true" unless blob.encrypted.nil?
193
+ end
194
+ end
195
+
196
+ def self.blob_properties_from_xml(xml)
197
+ xml = slopify(xml)
198
+ expect_node("Properties", xml)
199
+
200
+ props = {}
201
+
202
+ props[:access_tier] = (xml > "AccessTier").text if (xml > "AccessTier").any?
203
+ props[:access_tier_change_time] = (xml > "AccessTierChangeTime").text if (xml > "AccessTierChangeTime").any?
204
+ props[:creation_Time] = (xml > "Creation-Time").text if (xml > "Creation-Time").any?
205
+ props[:last_modified] = (xml > "Last-Modified").text if (xml > "Last-Modified").any?
206
+ props[:etag] = xml.Etag.text if (xml > "Etag").any?
207
+ props[:lease_status] = xml.LeaseStatus.text if (xml > "LeaseStatus").any?
208
+ props[:lease_state] = xml.LeaseState.text if (xml > "LeaseState").any?
209
+ props[:lease_duration] = xml.LeaseDuration.text if (xml > "LeaseDuration").any?
210
+ props[:content_length] = (xml > "Content-Length").text.to_i if (xml > "Content-Length").any?
211
+ props[:content_type] = (xml > "Content-Type").text if (xml > "Content-Type").any?
212
+ props[:content_encoding] = (xml > "Content-Encoding").text if (xml > "Content-Encoding").any?
213
+ props[:content_language] = (xml > "Content-Language").text if (xml > "Content-Language").any?
214
+ props[:content_md5] = (xml > "Content-MD5").text if (xml > "Content-MD5").any?
215
+
216
+ props[:cache_control] = (xml > "Cache-Control").text if (xml > "Cache-Control").any?
217
+ props[:sequence_number] = (xml > "x-ms-blob-sequence-number").text.to_i if (xml > "x-ms-blob-sequence-number").any?
218
+ props[:blob_type] = xml.BlobType.text if (xml > "BlobType").any?
219
+ props[:copy_id] = xml.CopyId.text if (xml > "CopyId").any?
220
+ props[:copy_status] = xml.CopyStatus.text if (xml > "CopyStatus").any?
221
+ props[:copy_source] = xml.CopySource.text if (xml > "CopySource").any?
222
+ props[:copy_progress] = xml.CopyProgress.text if (xml > "CopyProgress").any?
223
+ props[:copy_completion_time] = xml.CopyCompletionTime.text if (xml > "CopyCompletionTime").any?
224
+ props[:copy_status_description] = xml.CopyStatusDescription.text if (xml > "CopyStatusDescription").any?
225
+ props[:incremental_copy] = xml.IncrementalCopy.text == "true" if (xml > "IncrementalCopy").any?
226
+
227
+ props
228
+ end
229
+
230
+ def self.blob_properties_from_headers(headers)
231
+ props = {}
232
+
233
+ props[:last_modified] = headers["Last-Modified"]
234
+ props[:etag] = headers["Etag"]
235
+ props[:lease_status] = headers["x-ms-lease-status"]
236
+ props[:lease_state] = headers["x-ms-lease-state"]
237
+ props[:lease_duration] = headers["x-ms-lease-duration"]
238
+
239
+ props[:content_length] = headers["x-ms-blob-content-length"] || headers["Content-Length"]
240
+ props[:content_length] = props[:content_length].to_i if props[:content_length]
241
+
242
+ props[:content_type] = headers["x-ms-blob-content-type"] || headers["Content-Type"]
243
+ props[:content_encoding] = headers["x-ms-blob-content-encoding"] || headers["Content-Encoding"]
244
+ props[:content_language] = headers["x-ms-blob-content-language"] || headers["Content-Language"]
245
+ props[:content_disposition] = headers["x-ms-blob-content-disposition"] || headers["Content-Disposition"]
246
+ props[:content_md5] = headers["x-ms-blob-content-md5"] || headers["Content-MD5"]
247
+ props[:range_md5] = headers["Content-MD5"] if headers["x-ms-blob-content-md5"] && headers["Content-MD5"]
248
+
249
+ props[:cache_control] = headers["x-ms-blob-cache-control"] || headers["Cache-Control"]
250
+ props[:sequence_number] = headers["x-ms-blob-sequence-number"].to_i if headers["x-ms-blob-sequence-number"]
251
+ props[:blob_type] = headers["x-ms-blob-type"]
252
+
253
+ props[:copy_id] = headers["x-ms-copy-id"]
254
+ props[:copy_status] = headers["x-ms-copy-status"]
255
+ props[:copy_source] = headers["x-ms-copy-source"]
256
+ props[:copy_progress] = headers["x-ms-copy-progress"]
257
+ props[:copy_completion_time] = headers["x-ms-copy-completion-time"]
258
+ props[:copy_status_description] = headers["x-ms-copy-status-description"]
259
+
260
+ props[:accept_ranges] = headers["Accept-Ranges"].to_i if headers["Accept-Ranges"]
261
+
262
+ props[:append_offset] = headers["x-ms-blob-append-offset"].to_i if headers["x-ms-blob-append-offset"]
263
+ props[:committed_count] = headers["x-ms-blob-committed-block-count"].to_i if headers["x-ms-blob-committed-block-count"]
264
+ props[:incremental_copy] = headers["x-ms-incremental-copy"].to_s == "true" if headers["x-ms-incremental-copy"]
265
+
266
+ props
267
+ end
268
+
269
+ def self.block_list_to_xml(block_list)
270
+ builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
271
+ xml.BlockList {
272
+ block_list.each { |block|
273
+ encoded_id = Base64.strict_encode64(block[0])
274
+ case block[1]
275
+ when :uncommitted
276
+ xml.Uncommitted encoded_id
277
+ when :committed
278
+ xml.Committed encoded_id
279
+ else
280
+ xml.Latest encoded_id
281
+ end
282
+ }
283
+ }
284
+ end
285
+ builder.to_xml
286
+ end
287
+
288
+ def self.block_list_from_xml(xml)
289
+ xml = slopify(xml)
290
+ expect_node("BlockList", xml)
291
+
292
+ block_list = {
293
+ committed: [],
294
+ uncommitted: []
295
+ }
296
+
297
+ if ((xml > "CommittedBlocks") > "Block").any?
298
+ if xml.CommittedBlocks.Block.count == 0
299
+ add_block(:committed, xml.CommittedBlocks.Block, block_list)
300
+ else
301
+ xml.CommittedBlocks.Block.each { |block_node|
302
+ add_block(:committed, block_node, block_list)
303
+ }
304
+ end
305
+ end
306
+
307
+ return block_list unless (xml > "UncommittedBlocks")
308
+
309
+ if ((xml > "UncommittedBlocks") > "Block").any?
310
+ if xml.UncommittedBlocks.Block.count == 0
311
+ add_block(:uncommitted, xml.UncommittedBlocks.Block, block_list)
312
+ else
313
+ xml.UncommittedBlocks.Block.each { |block_node|
314
+ add_block(:uncommitted, block_node, block_list)
315
+ }
316
+ end
317
+ end
318
+
319
+ block_list
320
+ end
321
+
322
+ def self.add_block(type, block_node, block_list)
323
+ block = Block.new do |b|
324
+ b.name = Base64.strict_decode64(block_node.Name.text) if (block_node > "Name").any?
325
+ b.size = block_node.Size.text.to_i if (block_node > "Size").any?
326
+ b.type = type
327
+ end
328
+ block_list[type].push block
329
+ end
330
+
331
+ def self.page_list_from_xml(xml)
332
+ xml = slopify(xml)
333
+ expect_node("PageList", xml)
334
+
335
+ page_list = []
336
+
337
+ return page_list unless (xml > "PageRange").any?
338
+
339
+ if xml.PageRange.count == 0
340
+ page_list.push [xml.PageRange.Start.text.to_i, xml.PageRange.End.text.to_i]
341
+ else
342
+ xml.PageRange.each { |page_range|
343
+ page_list.push [page_range.Start.text.to_i, page_range.End.text.to_i]
344
+ }
345
+ end
346
+
347
+ page_list
348
+ end
349
+ end
350
+ end
351
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ module Azure
28
+ module Storage
29
+ module Blob
30
+ class Version
31
+ # Fields represent the parts defined in http://semver.org/
32
+ MAJOR = 2 unless defined? MAJOR
33
+ MINOR = 0 unless defined? MINOR
34
+ UPDATE = 3 unless defined? UPDATE
35
+
36
+ class << self
37
+ # @return [String]
38
+ def to_s
39
+ [MAJOR, MINOR, UPDATE].compact.join(".")
40
+ end
41
+
42
+ def to_uas
43
+ [MAJOR, MINOR, UPDATE].join(".")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+ require "azure/storage/blob/autoload"
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ require "rubygems"
28
+ require "nokogiri"
29
+ require "base64"
30
+ require "openssl"
31
+ require "uri"
32
+ require "faraday"
33
+ require 'faraday/follow_redirects'
34
+
35
+ require "azure/storage/common/core/autoload"
36
+ require "azure/storage/common/default"
37
+
38
+ module Azure
39
+ module Storage
40
+ autoload :Common, "azure/storage/common/core"
41
+ module Common
42
+ autoload :Default, "azure/storage/common/default"
43
+ autoload :Configurable, "azure/storage/common/configurable"
44
+ autoload :Client, "azure/storage/common/client"
45
+ autoload :ClientOptions, "azure/storage/common/client_options"
46
+
47
+ module Auth
48
+ autoload :SharedAccessSignature, "azure/storage/common/core/auth/shared_access_signature"
49
+ end
50
+
51
+ module Service
52
+ autoload :Serialization, "azure/storage/common/service/serialization"
53
+ autoload :SignedIdentifier, "azure/storage/common/service/signed_identifier"
54
+ autoload :AccessPolicy, "azure/storage/common/service/access_policy"
55
+ autoload :StorageService, "azure/storage/common/service/storage_service"
56
+ autoload :CorsRule, "azure/storage/common/service/cors_rule"
57
+ autoload :EnumerationResults, "azure/storage/common/service/enumeration_results"
58
+ autoload :UserDelegationKey, "azure/storage/common/service/user_delegation_key"
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ module Azure::Storage::Common
28
+ class Client
29
+ include Azure::Storage::Common::Configurable
30
+ include Azure::Storage::Common::ClientOptions
31
+ include Azure::Storage::Common::Core::HttpClient
32
+
33
+ # Public: Creates an instance of [Azure::Storage::Common::Client]
34
+ #
35
+ # ==== Attributes
36
+ #
37
+ # * +options+ - Hash. Optional parameters.
38
+ #
39
+ # ==== Options
40
+ #
41
+ # Accepted key/value pairs in options parameter are:
42
+ #
43
+ # * +:use_development_storage+ - TrueClass|FalseClass. Whether to use storage emulator.
44
+ # * +:development_storage_proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
45
+ # * +:storage_connection_string+ - String. The storage connection string.
46
+ # * +:storage_account_name+ - String. The name of the storage account.
47
+ # * +:storage_access_key+ - Base64 String. The access key of the storage account.
48
+ # * +:storage_sas_token+ - String. The signed access signature for the storage account or one of its service.
49
+ # * +:storage_blob_host+ - String. Specified Blob serivce endpoint or hostname
50
+ # * +:storage_table_host+ - String. Specified Table serivce endpoint or hostname
51
+ # * +:storage_queue_host+ - String. Specified Queue serivce endpoint or hostname
52
+ # * +:storage_dns_suffix+ - String. The suffix of a regional Storage Serivce, to
53
+ # * +:default_endpoints_protocol+ - String. http or https
54
+ # * +:use_path_style_uri+ - String. Whether use path style URI for specified endpoints
55
+ # * +:ca_file+ - String. File path of the CA file if having issue with SSL
56
+ # * +:user_agent_prefix+ - String. The user agent prefix that can identify the application calls the library
57
+ #
58
+ # The valid set of options include:
59
+ # * Storage Emulator: +:use_development_storage+ required, +:development_storage_proxy_uri+ optionally
60
+ # * Storage account name and key: +:storage_account_name+ and +:storage_access_key+ required, set +:storage_dns_suffix+ necessarily
61
+ # * Storage account name and SAS token: +:storage_account_name+ and +:storage_sas_token+ required, set +:storage_dns_suffix+ necessarily
62
+ # * Specified hosts and SAS token: At least one of the service host and SAS token. It's up to user to ensure the SAS token is suitable for the serivce
63
+ # * Anonymous Blob: only +:storage_blob_host+, if it is to only access blobs within a container
64
+ #
65
+ # Additional notes:
66
+ # * Specified hosts can be set when use account name with access key or sas token
67
+ # * +:default_endpoints_protocol+ can be set if the scheme is not specified in hosts
68
+ # * Storage emulator always use path style URI
69
+ # * +:ca_file+ is independent.
70
+ #
71
+ # When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship
72
+ #
73
+ # @return [Azure::Storage::Common::Client]
74
+ def initialize(options = {}, &block)
75
+ if options.is_a?(Hash) && options.has_key?(:user_agent_prefix)
76
+ Azure::Storage::Common::Service::StorageService.user_agent_prefix = options[:user_agent_prefix]
77
+ options.delete :user_agent_prefix
78
+ end
79
+ Azure::Storage::Common::Service::StorageService.register_request_callback(&block) if block_given?
80
+ reset!(options)
81
+ end
82
+
83
+ class << self
84
+ # Public: Creates an instance of [Azure::Storage::Common::Client]
85
+ #
86
+ # ==== Attributes
87
+ #
88
+ # * +options+ - Hash. Optional parameters.
89
+ #
90
+ # ==== Options
91
+ #
92
+ # Accepted key/value pairs in options parameter are:
93
+ #
94
+ # * +:use_development_storage+ - TrueClass|FalseClass. Whether to use storage emulator.
95
+ # * +:development_storage_proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
96
+ # * +:storage_account_name+ - String. The name of the storage account.
97
+ # * +:storage_access_key+ - Base64 String. The access key of the storage account.
98
+ # * +:storage_sas_token+ - String. The signed access signature for the storage account or one of its service.
99
+ # * +:storage_blob_host+ - String. Specified Blob service endpoint or hostname
100
+ # * +:storage_table_host+ - String. Specified Table service endpoint or hostname
101
+ # * +:storage_queue_host+ - String. Specified Queue service endpoint or hostname
102
+ # * +:storage_dns_suffix+ - String. The suffix of a regional Storage Service, to
103
+ # * +:default_endpoints_protocol+ - String. http or https
104
+ # * +:use_path_style_uri+ - String. Whether use path style URI for specified endpoints
105
+ # * +:ca_file+ - String. File path of the CA file if having issue with SSL
106
+ # * +:ssl_version+ - Symbol. The ssl version to be used, sample: :TLSv1_1, :TLSv1_2, for the details, see https://github.com/ruby/openssl/blob/master/lib/openssl/ssl.rb
107
+ # * +:ssl_min_version+ - Symbol. The min ssl version supported, only supported in Ruby 2.5+
108
+ # * +:ssl_max_version+ - Symbol. The max ssl version supported, only supported in Ruby 2.5+
109
+ # * +:user_agent_prefix+ - String. The user agent prefix that can identify the application calls the library
110
+ #
111
+ # The valid set of options include:
112
+ # * Storage Emulator: +:use_development_storage+ required, +:development_storage_proxy_uri+ optionally
113
+ # * Storage account name and key: +:storage_account_name+ and +:storage_access_key+ required, set +:storage_dns_suffix+ necessarily
114
+ # * Storage account name and SAS token: +:storage_account_name+ and +:storage_sas_token+ required, set +:storage_dns_suffix+ necessarily
115
+ # * Specified hosts and SAS token: At least one of the service host and SAS token. It's up to user to ensure the SAS token is suitable for the serivce
116
+ # * Anonymous Blob: only +:storage_blob_host+, if it is to only access blobs within a container
117
+ #
118
+ # Additional notes:
119
+ # * Specified hosts can be set when use account name with access key or sas token
120
+ # * +:default_endpoints_protocol+ can be set if the scheme is not specified in hosts
121
+ # * Storage emulator always use path style URI
122
+ # * +:ca_file+ is independent.
123
+ #
124
+ # When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship
125
+ #
126
+ # @return [Azure::Storage::Common::Client]
127
+ def create(options = {}, &block)
128
+ Client.new(options, &block)
129
+ end
130
+
131
+ # Public: Creates an instance of [Azure::Storage::Common::Client] with Storage Emulator
132
+ #
133
+ # ==== Attributes
134
+ #
135
+ # * +proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
136
+ #
137
+ # @return [Azure::Storage::Common::Client]
138
+ def create_development(proxy_uri = nil, &block)
139
+ proxy_uri ||= StorageServiceClientConstants::DEV_STORE_URI
140
+ create(use_development_storage: true, development_storage_proxy_uri: proxy_uri, &block)
141
+ end
142
+
143
+ # Public: Creates an instance of [Azure::Storage::Common::Client] from Environment Variables
144
+ #
145
+ # @return [Azure::Storage::Client]
146
+ def create_from_env(&block)
147
+ create(&block)
148
+ end
149
+
150
+ # Public: Creates an instance of [Azure::Storage::Common::Client] from Environment Variables
151
+ #
152
+ # ==== Attributes
153
+ #
154
+ # * +connection_string+ - String. Please refer to https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/.
155
+ #
156
+ # @return [Azure::Storage::Common::Client]
157
+ def create_from_connection_string(connection_string, &block)
158
+ Client.new(connection_string, &block)
159
+ end
160
+ end
161
+ end
162
+ end