aws-sdk-s3 1.61.1 → 1.166.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 +4 -4
- data/CHANGELOG.md +1255 -0
- data/LICENSE.txt +202 -0
- data/VERSION +1 -0
- data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +250 -0
- data/lib/aws-sdk-s3/bucket.rb +814 -112
- data/lib/aws-sdk-s3/bucket_acl.rb +54 -17
- data/lib/aws-sdk-s3/bucket_cors.rb +63 -20
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +63 -19
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +64 -19
- data/lib/aws-sdk-s3/bucket_logging.rb +58 -17
- data/lib/aws-sdk-s3/bucket_notification.rb +47 -20
- data/lib/aws-sdk-s3/bucket_policy.rb +104 -17
- data/lib/aws-sdk-s3/bucket_region_cache.rb +11 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +53 -19
- data/lib/aws-sdk-s3/bucket_tagging.rb +60 -17
- data/lib/aws-sdk-s3/bucket_versioning.rb +106 -17
- data/lib/aws-sdk-s3/bucket_website.rb +64 -19
- data/lib/aws-sdk-s3/client.rb +11280 -3232
- data/lib/aws-sdk-s3/client_api.rb +1078 -197
- data/lib/aws-sdk-s3/customizations/bucket.rb +33 -45
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/multipart_upload.rb +2 -0
- data/lib/aws-sdk-s3/customizations/object.rb +237 -39
- data/lib/aws-sdk-s3/customizations/object_summary.rb +10 -0
- data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
- data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +2 -0
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +27 -28
- data/lib/aws-sdk-s3/encryption/client.rb +25 -8
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +71 -29
- data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +43 -5
- data/lib/aws-sdk-s3/encryption/default_key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +13 -2
- data/lib/aws-sdk-s3/encryption/errors.rb +2 -0
- data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryption/io_decrypter.rb +11 -3
- data/lib/aws-sdk-s3/encryption/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryption/key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +46 -11
- data/lib/aws-sdk-s3/encryption/materials.rb +8 -6
- data/lib/aws-sdk-s3/encryption/utils.rb +25 -0
- data/lib/aws-sdk-s3/encryption.rb +4 -0
- data/lib/aws-sdk-s3/encryptionV2/client.rb +570 -0
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +223 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +170 -0
- data/lib/aws-sdk-s3/encryptionV2/default_key_provider.rb +40 -0
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +65 -0
- data/lib/aws-sdk-s3/encryptionV2/errors.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_auth_decrypter.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV2/io_decrypter.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +73 -0
- data/lib/aws-sdk-s3/encryptionV2/key_provider.rb +31 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +173 -0
- data/lib/aws-sdk-s3/encryptionV2/materials.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV2/utils.rb +103 -0
- data/lib/aws-sdk-s3/encryption_v2.rb +23 -0
- data/lib/aws-sdk-s3/endpoint_parameters.rb +186 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +592 -0
- data/lib/aws-sdk-s3/endpoints.rb +2392 -0
- data/lib/aws-sdk-s3/errors.rb +27 -1
- data/lib/aws-sdk-s3/event_streams.rb +8 -1
- data/lib/aws-sdk-s3/express_credentials.rb +55 -0
- data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
- data/lib/aws-sdk-s3/file_downloader.rb +176 -44
- data/lib/aws-sdk-s3/file_part.rb +2 -0
- data/lib/aws-sdk-s3/file_uploader.rb +28 -8
- data/lib/aws-sdk-s3/legacy_signer.rb +17 -25
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +69 -13
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +49 -18
- data/lib/aws-sdk-s3/multipart_upload.rb +242 -25
- data/lib/aws-sdk-s3/multipart_upload_error.rb +2 -0
- data/lib/aws-sdk-s3/multipart_upload_part.rb +343 -31
- data/lib/aws-sdk-s3/object.rb +2240 -218
- data/lib/aws-sdk-s3/object_acl.rb +80 -21
- data/lib/aws-sdk-s3/object_copier.rb +9 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +48 -22
- data/lib/aws-sdk-s3/object_summary.rb +1900 -178
- data/lib/aws-sdk-s3/object_version.rb +449 -59
- data/lib/aws-sdk-s3/plugins/accelerate.rb +17 -64
- data/lib/aws-sdk-s3/plugins/access_grants.rb +178 -0
- data/lib/aws-sdk-s3/plugins/arn.rb +70 -0
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +5 -41
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +3 -6
- data/lib/aws-sdk-s3/plugins/dualstack.rb +7 -50
- data/lib/aws-sdk-s3/plugins/endpoints.rb +289 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +5 -4
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +97 -0
- data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +3 -1
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +60 -15
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +11 -27
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +5 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +32 -26
- data/lib/aws-sdk-s3/plugins/redirects.rb +2 -0
- data/lib/aws-sdk-s3/plugins/s3_host_id.rb +2 -0
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +50 -88
- data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
- data/lib/aws-sdk-s3/plugins/sse_cpk.rb +3 -1
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +139 -0
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -0
- data/lib/aws-sdk-s3/presigned_post.rb +160 -103
- data/lib/aws-sdk-s3/presigner.rb +136 -61
- data/lib/aws-sdk-s3/resource.rb +120 -15
- data/lib/aws-sdk-s3/types.rb +9683 -4358
- data/lib/aws-sdk-s3/waiters.rb +67 -1
- data/lib/aws-sdk-s3.rb +40 -29
- data/sig/bucket.rbs +213 -0
- data/sig/bucket_acl.rbs +78 -0
- data/sig/bucket_cors.rbs +69 -0
- data/sig/bucket_lifecycle.rbs +88 -0
- data/sig/bucket_lifecycle_configuration.rbs +111 -0
- data/sig/bucket_logging.rbs +76 -0
- data/sig/bucket_notification.rbs +114 -0
- data/sig/bucket_policy.rbs +59 -0
- data/sig/bucket_request_payment.rbs +54 -0
- data/sig/bucket_tagging.rbs +65 -0
- data/sig/bucket_versioning.rbs +77 -0
- data/sig/bucket_website.rbs +93 -0
- data/sig/client.rbs +2397 -0
- data/sig/customizations/bucket.rbs +19 -0
- data/sig/customizations/object.rbs +38 -0
- data/sig/customizations/object_summary.rbs +35 -0
- data/sig/errors.rbs +34 -0
- data/sig/multipart_upload.rbs +111 -0
- data/sig/multipart_upload_part.rbs +105 -0
- data/sig/object.rbs +443 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +335 -0
- data/sig/object_version.rbs +137 -0
- data/sig/resource.rbs +130 -0
- data/sig/types.rbs +2585 -0
- data/sig/waiters.rbs +95 -0
- metadata +73 -15
- data/lib/aws-sdk-s3/plugins/bucket_arn.rb +0 -211
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'openssl'
|
|
2
4
|
require 'base64'
|
|
3
5
|
|
|
@@ -96,7 +98,7 @@ module Aws
|
|
|
96
98
|
# or call the associated method.
|
|
97
99
|
#
|
|
98
100
|
# ```ruby
|
|
99
|
-
# post = Aws::S3::PresignedPost.new(creds, region, bucket)
|
|
101
|
+
# post = Aws::S3::PresignedPost.new(creds, region, bucket)
|
|
100
102
|
# post.content_type('text/plain')
|
|
101
103
|
# ```
|
|
102
104
|
#
|
|
@@ -174,44 +176,76 @@ module Aws
|
|
|
174
176
|
# ```
|
|
175
177
|
#
|
|
176
178
|
class PresignedPost
|
|
179
|
+
@@allowed_fields = []
|
|
177
180
|
|
|
178
181
|
# @param [Credentials] credentials Security credentials for signing
|
|
179
182
|
# the post policy.
|
|
180
183
|
# @param [String] bucket_region Region of the target bucket.
|
|
181
184
|
# @param [String] bucket_name Name of the target bucket.
|
|
185
|
+
# @option options [Boolean] :use_accelerate_endpoint (false) When `true`,
|
|
186
|
+
# PresignedPost will attempt to use accelerated endpoint.
|
|
187
|
+
# @option options [String] :url See {PresignedPost#url}.
|
|
188
|
+
# @option options [Sting, Array<String>] :allow_any
|
|
189
|
+
# See {PresignedPost#allow_any}.
|
|
182
190
|
# @option options [Time] :signature_expiration Specify when the signature on
|
|
183
191
|
# the post will expire. Defaults to one hour from creation of the
|
|
184
192
|
# presigned post. May not exceed one week from creation time.
|
|
185
193
|
# @option options [String] :key See {PresignedPost#key}.
|
|
186
|
-
# @option options [String] :key_starts_with
|
|
194
|
+
# @option options [String] :key_starts_with
|
|
195
|
+
# See {PresignedPost#key_starts_with}.
|
|
187
196
|
# @option options [String] :acl See {PresignedPost#acl}.
|
|
188
|
-
# @option options [String] :acl_starts_with
|
|
189
|
-
#
|
|
190
|
-
# @option options [String] :
|
|
197
|
+
# @option options [String] :acl_starts_with
|
|
198
|
+
# See {PresignedPost#acl_starts_with}.
|
|
199
|
+
# @option options [String] :cache_control
|
|
200
|
+
# See {PresignedPost#cache_control}.
|
|
201
|
+
# @option options [String] :cache_control_starts_with
|
|
202
|
+
# See {PresignedPost#cache_control_starts_with}.
|
|
191
203
|
# @option options [String] :content_type See {PresignedPost#content_type}.
|
|
192
|
-
# @option options [String] :content_type_starts_with
|
|
193
|
-
#
|
|
194
|
-
# @option options [String] :
|
|
195
|
-
#
|
|
196
|
-
# @option options [String] :
|
|
197
|
-
#
|
|
198
|
-
# @option options [String] :
|
|
199
|
-
#
|
|
200
|
-
# @option options [String] :
|
|
201
|
-
#
|
|
202
|
-
# @option options [
|
|
203
|
-
# @option options [String] :
|
|
204
|
-
#
|
|
205
|
-
# @option options [
|
|
206
|
-
#
|
|
207
|
-
# @option options [String] :
|
|
208
|
-
#
|
|
209
|
-
# @option options [String] :
|
|
210
|
-
#
|
|
204
|
+
# @option options [String] :content_type_starts_with
|
|
205
|
+
# See {PresignedPost#content_type_starts_with}.
|
|
206
|
+
# @option options [String] :content_disposition
|
|
207
|
+
# See {PresignedPost#content_disposition}.
|
|
208
|
+
# @option options [String] :content_disposition_starts_with
|
|
209
|
+
# See {PresignedPost#content_disposition_starts_with}.
|
|
210
|
+
# @option options [String] :content_encoding
|
|
211
|
+
# See {PresignedPost#content_encoding}.
|
|
212
|
+
# @option options [String] :content_encoding_starts_with
|
|
213
|
+
# See {PresignedPost#content_encoding_starts_with}.
|
|
214
|
+
# @option options [Time] :expires See {PresignedPost#expires}.
|
|
215
|
+
# @option options [String] :expires_starts_with
|
|
216
|
+
# See {PresignedPost#expires_starts_with}.
|
|
217
|
+
# @option options [Range<Integer>] :content_length_range
|
|
218
|
+
# See {PresignedPost#content_length_range}.
|
|
219
|
+
# @option options [String] :success_action_redirect
|
|
220
|
+
# See {PresignedPost#success_action_redirect}.
|
|
221
|
+
# @option options [String] :success_action_redirect_starts_with
|
|
222
|
+
# See {PresignedPost#success_action_redirect_starts_with}.
|
|
223
|
+
# @option options [String] :success_action_status
|
|
224
|
+
# See {PresignedPost#success_action_status}.
|
|
225
|
+
# @option options [String] :storage_class
|
|
226
|
+
# See {PresignedPost#storage_class}.
|
|
227
|
+
# @option options [String] :website_redirect_location
|
|
228
|
+
# See {PresignedPost#website_redirect_location}.
|
|
229
|
+
# @option options [Hash<String,String>] :metadata
|
|
230
|
+
# See {PresignedPost#metadata}.
|
|
231
|
+
# @option options [Hash<String,String>] :metadata_starts_with
|
|
232
|
+
# See {PresignedPost#metadata_starts_with}.
|
|
233
|
+
# @option options [String] :server_side_encryption
|
|
234
|
+
# See {PresignedPost#server_side_encryption}.
|
|
235
|
+
# @option options [String] :server_side_encryption_aws_kms_key_id
|
|
236
|
+
# See {PresignedPost#server_side_encryption_aws_kms_key_id}.
|
|
237
|
+
# @option options [String] :server_side_encryption_customer_algorithm
|
|
238
|
+
# See {PresignedPost#server_side_encryption_customer_algorithm}.
|
|
239
|
+
# @option options [String] :server_side_encryption_customer_key
|
|
240
|
+
# See {PresignedPost#server_side_encryption_customer_key}.
|
|
241
|
+
# @option options [String] :server_side_encryption_customer_key_starts_with
|
|
242
|
+
# See {PresignedPost#server_side_encryption_customer_key_starts_with}.
|
|
211
243
|
def initialize(credentials, bucket_region, bucket_name, options = {})
|
|
212
244
|
@credentials = credentials.credentials
|
|
213
245
|
@bucket_region = bucket_region
|
|
214
246
|
@bucket_name = bucket_name
|
|
247
|
+
@accelerate = !!options.delete(:use_accelerate_endpoint)
|
|
248
|
+
options.delete(:url) if @accelerate # resource methods pass url
|
|
215
249
|
@url = options.delete(:url) || bucket_url
|
|
216
250
|
@fields = {}
|
|
217
251
|
@key_set = false
|
|
@@ -221,7 +255,12 @@ module Aws
|
|
|
221
255
|
case option_name
|
|
222
256
|
when :allow_any then allow_any(option_value)
|
|
223
257
|
when :signature_expiration then @signature_expiration = option_value
|
|
224
|
-
else
|
|
258
|
+
else
|
|
259
|
+
if @@allowed_fields.include?(option_name)
|
|
260
|
+
send("#{option_name}", option_value)
|
|
261
|
+
else
|
|
262
|
+
raise ArgumentError, "Unsupported option: #{option_name}"
|
|
263
|
+
end
|
|
225
264
|
end
|
|
226
265
|
end
|
|
227
266
|
end
|
|
@@ -234,7 +273,7 @@ module Aws
|
|
|
234
273
|
# as hidden input fields.
|
|
235
274
|
def fields
|
|
236
275
|
check_required_values!
|
|
237
|
-
datetime = Time.now.utc.strftime(
|
|
276
|
+
datetime = Time.now.utc.strftime('%Y%m%dT%H%M%SZ')
|
|
238
277
|
fields = @fields.dup
|
|
239
278
|
fields.update('policy' => policy(datetime))
|
|
240
279
|
fields.update(signature_fields(datetime))
|
|
@@ -253,44 +292,52 @@ module Aws
|
|
|
253
292
|
end
|
|
254
293
|
|
|
255
294
|
# @api private
|
|
256
|
-
def self.define_field(field, *args)
|
|
295
|
+
def self.define_field(field, *args, &block)
|
|
296
|
+
@@allowed_fields << field
|
|
257
297
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
258
298
|
field_name = args.last || field.to_s
|
|
259
299
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
300
|
+
if block_given?
|
|
301
|
+
define_method("#{field}", block)
|
|
302
|
+
else
|
|
303
|
+
define_method("#{field}") do |value|
|
|
304
|
+
with(field_name, value)
|
|
305
|
+
end
|
|
263
306
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
307
|
+
if options[:starts_with]
|
|
308
|
+
@@allowed_fields << "#{field}_starts_with".to_sym
|
|
309
|
+
define_method("#{field}_starts_with") do |value|
|
|
310
|
+
starts_with(field_name, value)
|
|
311
|
+
end
|
|
267
312
|
end
|
|
268
313
|
end
|
|
269
314
|
end
|
|
270
315
|
|
|
271
316
|
# @!group Fields
|
|
272
317
|
|
|
273
|
-
#
|
|
274
|
-
#
|
|
275
|
-
#
|
|
318
|
+
# @!method key(key)
|
|
319
|
+
# The key to use for the uploaded object. You can use `${filename}`
|
|
320
|
+
# as a variable in the key. This will be replaced with the name
|
|
321
|
+
# of the file as provided by the user.
|
|
276
322
|
#
|
|
277
|
-
#
|
|
278
|
-
#
|
|
279
|
-
#
|
|
323
|
+
# For example, if the key is given as `/user/betty/${filename}` and
|
|
324
|
+
# the file uploaded is named `lolcatz.jpg`, the resultant key will
|
|
325
|
+
# be `/user/betty/lolcatz.jpg`.
|
|
280
326
|
#
|
|
281
|
-
#
|
|
282
|
-
#
|
|
283
|
-
#
|
|
284
|
-
|
|
327
|
+
# @param [String] key
|
|
328
|
+
# @see http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html)
|
|
329
|
+
# @return [self]
|
|
330
|
+
define_field(:key) do |key|
|
|
285
331
|
@key_set = true
|
|
286
332
|
with('key', key)
|
|
287
333
|
end
|
|
288
334
|
|
|
289
|
-
#
|
|
290
|
-
#
|
|
291
|
-
#
|
|
292
|
-
#
|
|
293
|
-
|
|
335
|
+
# @!method key_starts_with(prefix)
|
|
336
|
+
# Specify a prefix the uploaded
|
|
337
|
+
# @param [String] prefix
|
|
338
|
+
# @see #key
|
|
339
|
+
# @return [self]
|
|
340
|
+
define_field(:key_starts_with) do |prefix|
|
|
294
341
|
@key_set = true
|
|
295
342
|
starts_with('key', prefix)
|
|
296
343
|
end
|
|
@@ -367,27 +414,30 @@ module Aws
|
|
|
367
414
|
# @return [self]
|
|
368
415
|
define_field(:content_encoding, 'Content-Encoding', starts_with: true)
|
|
369
416
|
|
|
370
|
-
#
|
|
371
|
-
#
|
|
372
|
-
#
|
|
373
|
-
#
|
|
374
|
-
#
|
|
375
|
-
#
|
|
376
|
-
|
|
417
|
+
# @!method expires(time)
|
|
418
|
+
# The date and time at which the object is no longer cacheable.
|
|
419
|
+
# @note This does not affect the expiration of the presigned post
|
|
420
|
+
# signature.
|
|
421
|
+
# @param [Time] time
|
|
422
|
+
# @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21
|
|
423
|
+
# @return [self]
|
|
424
|
+
define_field(:expires) do |time|
|
|
377
425
|
with('Expires', time.httpdate)
|
|
378
426
|
end
|
|
379
427
|
|
|
380
|
-
#
|
|
381
|
-
#
|
|
382
|
-
#
|
|
383
|
-
|
|
428
|
+
# @!method expires_starts_with(prefix)
|
|
429
|
+
# @param [String] prefix
|
|
430
|
+
# @see #expires
|
|
431
|
+
# @return [self]
|
|
432
|
+
define_field(:expires_starts_with) do |prefix|
|
|
384
433
|
starts_with('Expires', prefix)
|
|
385
434
|
end
|
|
386
435
|
|
|
387
|
-
#
|
|
388
|
-
#
|
|
389
|
-
#
|
|
390
|
-
|
|
436
|
+
# @!method content_length_range(byte_range)
|
|
437
|
+
# The minimum and maximum allowable size for the uploaded content.
|
|
438
|
+
# @param [Range<Integer>] byte_range
|
|
439
|
+
# @return [self]
|
|
440
|
+
define_field(:content_length_range) do |byte_range|
|
|
391
441
|
min = byte_range.begin
|
|
392
442
|
max = byte_range.end
|
|
393
443
|
max -= 1 if byte_range.exclude_end?
|
|
@@ -462,22 +512,24 @@ module Aws
|
|
|
462
512
|
# @return [self]
|
|
463
513
|
define_field(:website_redirect_location, 'x-amz-website-redirect-location')
|
|
464
514
|
|
|
465
|
-
#
|
|
466
|
-
#
|
|
467
|
-
#
|
|
468
|
-
#
|
|
469
|
-
|
|
515
|
+
# @!method metadata(hash)
|
|
516
|
+
# Metadata hash to store with the uploaded object. Hash keys will be
|
|
517
|
+
# prefixed with "x-amz-meta-".
|
|
518
|
+
# @param [Hash<String,String>] hash
|
|
519
|
+
# @return [self]
|
|
520
|
+
define_field(:metadata) do |hash|
|
|
470
521
|
hash.each do |key, value|
|
|
471
522
|
with("x-amz-meta-#{key}", value)
|
|
472
523
|
end
|
|
473
524
|
self
|
|
474
525
|
end
|
|
475
526
|
|
|
476
|
-
#
|
|
477
|
-
#
|
|
478
|
-
#
|
|
479
|
-
#
|
|
480
|
-
|
|
527
|
+
# @!method metadata_starts_with(hash)
|
|
528
|
+
# Specify allowable prefix for each key in the metadata hash.
|
|
529
|
+
# @param [Hash<String,String>] hash
|
|
530
|
+
# @see #metadata
|
|
531
|
+
# @return [self]
|
|
532
|
+
define_field(:metadata_starts_with) do |hash|
|
|
481
533
|
hash.each do |key, value|
|
|
482
534
|
starts_with("x-amz-meta-#{key}", value)
|
|
483
535
|
end
|
|
@@ -505,7 +557,10 @@ module Aws
|
|
|
505
557
|
# (KMS) master encryption key to use for the object.
|
|
506
558
|
# @param [String] value
|
|
507
559
|
# @return [self]
|
|
508
|
-
define_field(
|
|
560
|
+
define_field(
|
|
561
|
+
:server_side_encryption_aws_kms_key_id,
|
|
562
|
+
'x-amz-server-side-encryption-aws-kms-key-id'
|
|
563
|
+
)
|
|
509
564
|
|
|
510
565
|
# @!endgroup
|
|
511
566
|
|
|
@@ -518,27 +573,32 @@ module Aws
|
|
|
518
573
|
# @param [String] value
|
|
519
574
|
# @see #server_side_encryption_customer_key
|
|
520
575
|
# @return [self]
|
|
521
|
-
define_field(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
576
|
+
define_field(
|
|
577
|
+
:server_side_encryption_customer_algorithm,
|
|
578
|
+
'x-amz-server-side-encryption-customer-algorithm'
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
# @!method server_side_encryption_customer_key(value)
|
|
582
|
+
# Specifies the customer-provided encryption key for Amazon S3 to use
|
|
583
|
+
# in encrypting data. This value is used to store the object and then
|
|
584
|
+
# it is discarded; Amazon does not store the encryption key.
|
|
526
585
|
#
|
|
527
|
-
#
|
|
586
|
+
# You must also call {#server_side_encryption_customer_algorithm}.
|
|
528
587
|
#
|
|
529
|
-
#
|
|
530
|
-
#
|
|
531
|
-
#
|
|
532
|
-
|
|
588
|
+
# @param [String] value
|
|
589
|
+
# @see #server_side_encryption_customer_algorithm
|
|
590
|
+
# @return [self]
|
|
591
|
+
define_field(:server_side_encryption_customer_key) do |value|
|
|
533
592
|
field_name = 'x-amz-server-side-encryption-customer-key'
|
|
534
593
|
with(field_name, base64(value))
|
|
535
594
|
with(field_name + '-MD5', base64(OpenSSL::Digest::MD5.digest(value)))
|
|
536
595
|
end
|
|
537
596
|
|
|
538
|
-
#
|
|
539
|
-
#
|
|
540
|
-
#
|
|
541
|
-
|
|
597
|
+
# @!method server_side_encryption_customer_key_starts_with(prefix)
|
|
598
|
+
# @param [String] prefix
|
|
599
|
+
# @see #server_side_encryption_customer_key
|
|
600
|
+
# @return [self]
|
|
601
|
+
define_field(:server_side_encryption_customer_key_starts_with) do |prefix|
|
|
542
602
|
field_name = 'x-amz-server-side-encryption-customer-key'
|
|
543
603
|
starts_with(field_name, prefix)
|
|
544
604
|
end
|
|
@@ -571,25 +631,22 @@ module Aws
|
|
|
571
631
|
|
|
572
632
|
def check_required_values!
|
|
573
633
|
unless @key_set
|
|
574
|
-
msg =
|
|
575
|
-
|
|
634
|
+
msg = 'key required; you must provide a key via :key, '\
|
|
635
|
+
":key_starts_with, or :allow_any => ['key']"
|
|
576
636
|
raise msg
|
|
577
637
|
end
|
|
578
638
|
end
|
|
579
639
|
|
|
580
640
|
def bucket_url
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
url.host = Plugins::IADRegionalEndpoint.legacy_host(url.host)
|
|
591
|
-
end
|
|
592
|
-
url.to_s
|
|
641
|
+
# Taken from Aws::S3::Endpoints module
|
|
642
|
+
params = Aws::S3::EndpointParameters.new(
|
|
643
|
+
bucket: @bucket_name,
|
|
644
|
+
region: @bucket_region,
|
|
645
|
+
accelerate: @accelerate,
|
|
646
|
+
use_global_endpoint: true
|
|
647
|
+
)
|
|
648
|
+
endpoint = Aws::S3::EndpointProvider.new.resolve_endpoint(params)
|
|
649
|
+
endpoint.url
|
|
593
650
|
end
|
|
594
651
|
|
|
595
652
|
# @return [Hash]
|
|
@@ -617,7 +674,7 @@ module Aws
|
|
|
617
674
|
|
|
618
675
|
def signature(datetime, string_to_sign)
|
|
619
676
|
k_secret = @credentials.secret_access_key
|
|
620
|
-
k_date = hmac(
|
|
677
|
+
k_date = hmac('AWS4' + k_secret, datetime[0,8])
|
|
621
678
|
k_region = hmac(k_date, @bucket_region)
|
|
622
679
|
k_service = hmac(k_region, 's3')
|
|
623
680
|
k_credentials = hmac(k_service, 'aws4_request')
|