aws-sdk-s3 1.79.1 → 1.212.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 +1548 -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 +900 -98
- data/lib/aws-sdk-s3/bucket_acl.rb +44 -10
- data/lib/aws-sdk-s3/bucket_cors.rb +51 -11
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +53 -8
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +107 -9
- data/lib/aws-sdk-s3/bucket_logging.rb +43 -6
- data/lib/aws-sdk-s3/bucket_notification.rb +32 -9
- data/lib/aws-sdk-s3/bucket_policy.rb +90 -6
- data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +38 -8
- data/lib/aws-sdk-s3/bucket_tagging.rb +46 -7
- data/lib/aws-sdk-s3/bucket_versioning.rb +127 -9
- data/lib/aws-sdk-s3/bucket_website.rb +46 -7
- data/lib/aws-sdk-s3/client.rb +13729 -3146
- data/lib/aws-sdk-s3/client_api.rb +1604 -277
- data/lib/aws-sdk-s3/customizations/bucket.rb +31 -47
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/object.rb +253 -82
- data/lib/aws-sdk-s3/customizations/object_summary.rb +5 -0
- data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +28 -29
- data/lib/aws-sdk-s3/default_executor.rb +103 -0
- data/lib/aws-sdk-s3/encryption/client.rb +9 -5
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +0 -4
- data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +2 -0
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +15 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +105 -26
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +7 -165
- data/lib/aws-sdk-s3/encryptionV2/decryption.rb +205 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +20 -3
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +2 -4
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +18 -6
- data/lib/aws-sdk-s3/encryptionV2/utils.rb +5 -0
- data/lib/aws-sdk-s3/encryptionV3/client.rb +885 -0
- data/lib/aws-sdk-s3/encryptionV3/decrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/decryption.rb +244 -0
- data/lib/aws-sdk-s3/encryptionV3/default_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/default_key_provider.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/encrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/errors.rb +47 -0
- data/lib/aws-sdk-s3/encryptionV3/io_auth_decrypter.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV3/io_decrypter.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/io_encrypter.rb +84 -0
- data/lib/aws-sdk-s3/encryptionV3/key_provider.rb +28 -0
- data/lib/aws-sdk-s3/encryptionV3/kms_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/materials.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV3/utils.rb +321 -0
- data/lib/aws-sdk-s3/encryption_v2.rb +1 -0
- data/lib/aws-sdk-s3/encryption_v3.rb +24 -0
- data/lib/aws-sdk-s3/endpoint_parameters.rb +181 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +889 -0
- data/lib/aws-sdk-s3/endpoints.rb +1544 -0
- data/lib/aws-sdk-s3/errors.rb +80 -1
- data/lib/aws-sdk-s3/event_streams.rb +1 -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 +258 -82
- data/lib/aws-sdk-s3/file_uploader.rb +25 -14
- data/lib/aws-sdk-s3/legacy_signer.rb +17 -26
- data/lib/aws-sdk-s3/multipart_download_error.rb +8 -0
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +111 -86
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +110 -92
- data/lib/aws-sdk-s3/multipart_upload.rb +304 -14
- data/lib/aws-sdk-s3/multipart_upload_error.rb +3 -4
- data/lib/aws-sdk-s3/multipart_upload_part.rb +344 -20
- data/lib/aws-sdk-s3/object.rb +2457 -225
- data/lib/aws-sdk-s3/object_acl.rb +76 -15
- data/lib/aws-sdk-s3/object_copier.rb +7 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +48 -23
- data/lib/aws-sdk-s3/object_summary.rb +2033 -169
- data/lib/aws-sdk-s3/object_version.rb +470 -53
- data/lib/aws-sdk-s3/plugins/accelerate.rb +1 -39
- 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 +3 -41
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
- data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +44 -0
- data/lib/aws-sdk-s3/plugins/dualstack.rb +2 -49
- data/lib/aws-sdk-s3/plugins/endpoints.rb +86 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +3 -1
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +88 -0
- data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +1 -1
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +87 -26
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +8 -26
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +10 -68
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +48 -88
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +28 -9
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -1
- data/lib/aws-sdk-s3/presigned_post.rb +99 -78
- data/lib/aws-sdk-s3/presigner.rb +50 -42
- data/lib/aws-sdk-s3/resource.rb +144 -15
- data/lib/aws-sdk-s3/transfer_manager.rb +321 -0
- data/lib/aws-sdk-s3/types.rb +12223 -4723
- data/lib/aws-sdk-s3/waiters.rb +1 -1
- data/lib/aws-sdk-s3.rb +37 -28
- data/sig/bucket.rbs +231 -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 +115 -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 +2612 -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 +44 -0
- data/sig/multipart_upload.rbs +120 -0
- data/sig/multipart_upload_part.rbs +109 -0
- data/sig/object.rbs +464 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +347 -0
- data/sig/object_version.rbs +143 -0
- data/sig/resource.rbs +141 -0
- data/sig/types.rbs +2899 -0
- data/sig/waiters.rbs +95 -0
- metadata +74 -16
- data/lib/aws-sdk-s3/plugins/bucket_arn.rb +0 -212
|
@@ -98,7 +98,7 @@ module Aws
|
|
|
98
98
|
# or call the associated method.
|
|
99
99
|
#
|
|
100
100
|
# ```ruby
|
|
101
|
-
# post = Aws::S3::PresignedPost.new(creds, region, bucket)
|
|
101
|
+
# post = Aws::S3::PresignedPost.new(creds, region, bucket)
|
|
102
102
|
# post.content_type('text/plain')
|
|
103
103
|
# ```
|
|
104
104
|
#
|
|
@@ -176,11 +176,17 @@ module Aws
|
|
|
176
176
|
# ```
|
|
177
177
|
#
|
|
178
178
|
class PresignedPost
|
|
179
|
+
@@allowed_fields = []
|
|
179
180
|
|
|
180
181
|
# @param [Credentials] credentials Security credentials for signing
|
|
181
182
|
# the post policy.
|
|
182
183
|
# @param [String] bucket_region Region of the target bucket.
|
|
183
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}.
|
|
184
190
|
# @option options [Time] :signature_expiration Specify when the signature on
|
|
185
191
|
# the post will expire. Defaults to one hour from creation of the
|
|
186
192
|
# presigned post. May not exceed one week from creation time.
|
|
@@ -205,7 +211,7 @@ module Aws
|
|
|
205
211
|
# See {PresignedPost#content_encoding}.
|
|
206
212
|
# @option options [String] :content_encoding_starts_with
|
|
207
213
|
# See {PresignedPost#content_encoding_starts_with}.
|
|
208
|
-
# @option options [
|
|
214
|
+
# @option options [Time] :expires See {PresignedPost#expires}.
|
|
209
215
|
# @option options [String] :expires_starts_with
|
|
210
216
|
# See {PresignedPost#expires_starts_with}.
|
|
211
217
|
# @option options [Range<Integer>] :content_length_range
|
|
@@ -232,6 +238,8 @@ module Aws
|
|
|
232
238
|
# See {PresignedPost#server_side_encryption_customer_algorithm}.
|
|
233
239
|
# @option options [String] :server_side_encryption_customer_key
|
|
234
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}.
|
|
235
243
|
def initialize(credentials, bucket_region, bucket_name, options = {})
|
|
236
244
|
@credentials = credentials.credentials
|
|
237
245
|
@bucket_region = bucket_region
|
|
@@ -247,7 +255,12 @@ module Aws
|
|
|
247
255
|
case option_name
|
|
248
256
|
when :allow_any then allow_any(option_value)
|
|
249
257
|
when :signature_expiration then @signature_expiration = option_value
|
|
250
|
-
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
|
|
251
264
|
end
|
|
252
265
|
end
|
|
253
266
|
end
|
|
@@ -279,44 +292,52 @@ module Aws
|
|
|
279
292
|
end
|
|
280
293
|
|
|
281
294
|
# @api private
|
|
282
|
-
def self.define_field(field, *args)
|
|
295
|
+
def self.define_field(field, *args, &block)
|
|
296
|
+
@@allowed_fields << field
|
|
283
297
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
284
298
|
field_name = args.last || field.to_s
|
|
285
299
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
300
|
+
if block_given?
|
|
301
|
+
define_method("#{field}", block)
|
|
302
|
+
else
|
|
303
|
+
define_method("#{field}") do |value|
|
|
304
|
+
with(field_name, value)
|
|
305
|
+
end
|
|
289
306
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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
|
|
293
312
|
end
|
|
294
313
|
end
|
|
295
314
|
end
|
|
296
315
|
|
|
297
316
|
# @!group Fields
|
|
298
317
|
|
|
299
|
-
#
|
|
300
|
-
#
|
|
301
|
-
#
|
|
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.
|
|
302
322
|
#
|
|
303
|
-
#
|
|
304
|
-
#
|
|
305
|
-
#
|
|
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`.
|
|
306
326
|
#
|
|
307
|
-
#
|
|
308
|
-
#
|
|
309
|
-
#
|
|
310
|
-
|
|
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|
|
|
311
331
|
@key_set = true
|
|
312
332
|
with('key', key)
|
|
313
333
|
end
|
|
314
334
|
|
|
315
|
-
#
|
|
316
|
-
#
|
|
317
|
-
#
|
|
318
|
-
#
|
|
319
|
-
|
|
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|
|
|
320
341
|
@key_set = true
|
|
321
342
|
starts_with('key', prefix)
|
|
322
343
|
end
|
|
@@ -393,27 +414,30 @@ module Aws
|
|
|
393
414
|
# @return [self]
|
|
394
415
|
define_field(:content_encoding, 'Content-Encoding', starts_with: true)
|
|
395
416
|
|
|
396
|
-
#
|
|
397
|
-
#
|
|
398
|
-
#
|
|
399
|
-
#
|
|
400
|
-
#
|
|
401
|
-
#
|
|
402
|
-
|
|
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|
|
|
403
425
|
with('Expires', time.httpdate)
|
|
404
426
|
end
|
|
405
427
|
|
|
406
|
-
#
|
|
407
|
-
#
|
|
408
|
-
#
|
|
409
|
-
|
|
428
|
+
# @!method expires_starts_with(prefix)
|
|
429
|
+
# @param [String] prefix
|
|
430
|
+
# @see #expires
|
|
431
|
+
# @return [self]
|
|
432
|
+
define_field(:expires_starts_with) do |prefix|
|
|
410
433
|
starts_with('Expires', prefix)
|
|
411
434
|
end
|
|
412
435
|
|
|
413
|
-
#
|
|
414
|
-
#
|
|
415
|
-
#
|
|
416
|
-
|
|
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|
|
|
417
441
|
min = byte_range.begin
|
|
418
442
|
max = byte_range.end
|
|
419
443
|
max -= 1 if byte_range.exclude_end?
|
|
@@ -488,22 +512,24 @@ module Aws
|
|
|
488
512
|
# @return [self]
|
|
489
513
|
define_field(:website_redirect_location, 'x-amz-website-redirect-location')
|
|
490
514
|
|
|
491
|
-
#
|
|
492
|
-
#
|
|
493
|
-
#
|
|
494
|
-
#
|
|
495
|
-
|
|
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|
|
|
496
521
|
hash.each do |key, value|
|
|
497
522
|
with("x-amz-meta-#{key}", value)
|
|
498
523
|
end
|
|
499
524
|
self
|
|
500
525
|
end
|
|
501
526
|
|
|
502
|
-
#
|
|
503
|
-
#
|
|
504
|
-
#
|
|
505
|
-
#
|
|
506
|
-
|
|
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|
|
|
507
533
|
hash.each do |key, value|
|
|
508
534
|
starts_with("x-amz-meta-#{key}", value)
|
|
509
535
|
end
|
|
@@ -552,25 +578,27 @@ module Aws
|
|
|
552
578
|
'x-amz-server-side-encryption-customer-algorithm'
|
|
553
579
|
)
|
|
554
580
|
|
|
555
|
-
#
|
|
556
|
-
#
|
|
557
|
-
#
|
|
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.
|
|
558
585
|
#
|
|
559
|
-
#
|
|
586
|
+
# You must also call {#server_side_encryption_customer_algorithm}.
|
|
560
587
|
#
|
|
561
|
-
#
|
|
562
|
-
#
|
|
563
|
-
#
|
|
564
|
-
|
|
588
|
+
# @param [String] value
|
|
589
|
+
# @see #server_side_encryption_customer_algorithm
|
|
590
|
+
# @return [self]
|
|
591
|
+
define_field(:server_side_encryption_customer_key) do |value|
|
|
565
592
|
field_name = 'x-amz-server-side-encryption-customer-key'
|
|
566
593
|
with(field_name, base64(value))
|
|
567
594
|
with(field_name + '-MD5', base64(OpenSSL::Digest::MD5.digest(value)))
|
|
568
595
|
end
|
|
569
596
|
|
|
570
|
-
#
|
|
571
|
-
#
|
|
572
|
-
#
|
|
573
|
-
|
|
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|
|
|
574
602
|
field_name = 'x-amz-server-side-encryption-customer-key'
|
|
575
603
|
starts_with(field_name, prefix)
|
|
576
604
|
end
|
|
@@ -610,22 +638,15 @@ module Aws
|
|
|
610
638
|
end
|
|
611
639
|
|
|
612
640
|
def bucket_url
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
url.path = "/#{@bucket_name}"
|
|
623
|
-
end
|
|
624
|
-
if @bucket_region == 'us-east-1'
|
|
625
|
-
# keep legacy behavior by default
|
|
626
|
-
url.host = Plugins::IADRegionalEndpoint.legacy_host(url.host)
|
|
627
|
-
end
|
|
628
|
-
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
|
|
629
650
|
end
|
|
630
651
|
|
|
631
652
|
# @return [Hash]
|
data/lib/aws-sdk-s3/presigner.rb
CHANGED
|
@@ -12,6 +12,7 @@ module Aws
|
|
|
12
12
|
# @api private
|
|
13
13
|
BLACKLISTED_HEADERS = [
|
|
14
14
|
'accept',
|
|
15
|
+
'amz-sdk-request',
|
|
15
16
|
'cache-control',
|
|
16
17
|
'content-length', # due to a ELB bug
|
|
17
18
|
'expect',
|
|
@@ -48,7 +49,8 @@ module Aws
|
|
|
48
49
|
# before the presigned URL expires. Defaults to 15 minutes. As signature
|
|
49
50
|
# version 4 has a maximum expiry time of one week for presigned URLs,
|
|
50
51
|
# attempts to set this value to greater than one week (604800) will
|
|
51
|
-
# raise an exception.
|
|
52
|
+
# raise an exception. The min value of this option and the credentials
|
|
53
|
+
# expiration time is used in the presigned URL.
|
|
52
54
|
#
|
|
53
55
|
# @option params [Time] :time (Time.now) The starting time for when the
|
|
54
56
|
# presigned url becomes active.
|
|
@@ -57,8 +59,7 @@ module Aws
|
|
|
57
59
|
# is returned instead of the default HTTPS URL.
|
|
58
60
|
#
|
|
59
61
|
# @option params [Boolean] :virtual_host (false) When `true`, the
|
|
60
|
-
# bucket name will be used as the hostname.
|
|
61
|
-
# the returned URL to be 'http' and not 'https'.
|
|
62
|
+
# bucket name will be used as the hostname.
|
|
62
63
|
#
|
|
63
64
|
# @option params [Boolean] :use_accelerate_endpoint (false) When `true`,
|
|
64
65
|
# Presigner will attempt to use accelerated endpoint.
|
|
@@ -96,7 +97,8 @@ module Aws
|
|
|
96
97
|
# before the presigned URL expires. Defaults to 15 minutes. As signature
|
|
97
98
|
# version 4 has a maximum expiry time of one week for presigned URLs,
|
|
98
99
|
# attempts to set this value to greater than one week (604800) will
|
|
99
|
-
# raise an exception.
|
|
100
|
+
# raise an exception. The min value of this option and the credentials
|
|
101
|
+
# expiration time is used in the presigned URL.
|
|
100
102
|
#
|
|
101
103
|
# @option params [Time] :time (Time.now) The starting time for when the
|
|
102
104
|
# presigned url becomes active.
|
|
@@ -133,14 +135,15 @@ module Aws
|
|
|
133
135
|
virtual_host = params.delete(:virtual_host)
|
|
134
136
|
time = params.delete(:time)
|
|
135
137
|
unsigned_headers = unsigned_headers(params)
|
|
136
|
-
|
|
138
|
+
secure = params.delete(:secure) != false
|
|
137
139
|
expires_in = expires_in(params)
|
|
138
140
|
|
|
139
141
|
req = @client.build_request(method, params)
|
|
140
142
|
use_bucket_as_hostname(req) if virtual_host
|
|
143
|
+
handle_presigned_url_context(req)
|
|
141
144
|
|
|
142
145
|
x_amz_headers = sign_but_dont_send(
|
|
143
|
-
req, expires_in,
|
|
146
|
+
req, expires_in, secure, time, unsigned_headers, hoist
|
|
144
147
|
)
|
|
145
148
|
[req.send_request.data, x_amz_headers]
|
|
146
149
|
end
|
|
@@ -150,14 +153,6 @@ module Aws
|
|
|
150
153
|
BLACKLISTED_HEADERS - whitelist_headers
|
|
151
154
|
end
|
|
152
155
|
|
|
153
|
-
def http_scheme(params)
|
|
154
|
-
if params.delete(:secure) == false
|
|
155
|
-
'http'
|
|
156
|
-
else
|
|
157
|
-
@client.config.endpoint.scheme
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
156
|
def expires_in(params)
|
|
162
157
|
if (expires_in = params.delete(:expires_in))
|
|
163
158
|
if expires_in > ONE_WEEK
|
|
@@ -174,8 +169,7 @@ module Aws
|
|
|
174
169
|
end
|
|
175
170
|
|
|
176
171
|
def use_bucket_as_hostname(req)
|
|
177
|
-
req.
|
|
178
|
-
req.handle do |context|
|
|
172
|
+
req.handle(priority: 35) do |context|
|
|
179
173
|
uri = context.http_request.endpoint
|
|
180
174
|
uri.host = context.params[:bucket]
|
|
181
175
|
uri.path.sub!("/#{context.params[:bucket]}", '')
|
|
@@ -183,26 +177,35 @@ module Aws
|
|
|
183
177
|
end
|
|
184
178
|
end
|
|
185
179
|
|
|
180
|
+
# Used for excluding presigned_urls from API request count.
|
|
181
|
+
#
|
|
182
|
+
# Store context information as early as possible, to allow
|
|
183
|
+
# handlers to perform decisions based on this flag if need.
|
|
184
|
+
def handle_presigned_url_context(req)
|
|
185
|
+
req.handle(step: :initialize, priority: 98) do |context|
|
|
186
|
+
context[:presigned_url] = true
|
|
187
|
+
@handler.call(context)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
186
191
|
# @param [Seahorse::Client::Request] req
|
|
187
192
|
def sign_but_dont_send(
|
|
188
|
-
req, expires_in,
|
|
193
|
+
req, expires_in, secure, time, unsigned_headers, hoist = true
|
|
189
194
|
)
|
|
190
195
|
x_amz_headers = {}
|
|
191
|
-
|
|
192
196
|
http_req = req.context.http_request
|
|
193
|
-
|
|
194
|
-
req.handlers.remove(Aws::S3::Plugins::S3Signer::LegacyHandler)
|
|
195
|
-
req.handlers.remove(Aws::S3::Plugins::S3Signer::V4Handler)
|
|
196
197
|
req.handlers.remove(Seahorse::Client::Plugins::ContentLength::Handler)
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
req.handlers.remove(Aws::Rest::ContentTypeHandler)
|
|
199
|
+
req.handlers.remove(Aws::Plugins::ChecksumAlgorithm::OptionHandler)
|
|
200
|
+
req.handlers.remove(Aws::Plugins::ChecksumAlgorithm::ChecksumHandler)
|
|
201
|
+
req.handlers.remove(Aws::Plugins::InvocationId::Handler)
|
|
202
|
+
req.handlers.remove(Aws::Plugins::Sign::Handler)
|
|
203
|
+
req.handlers.remove(Aws::S3::Plugins::S3Signer::LegacyHandler)
|
|
200
204
|
req.handle(step: :send) do |context|
|
|
201
|
-
if
|
|
202
|
-
|
|
203
|
-
endpoint.scheme =
|
|
204
|
-
endpoint.port =
|
|
205
|
-
http_req.endpoint = URI.parse(endpoint.to_s)
|
|
205
|
+
# if an endpoint was not provided, force secure or insecure
|
|
206
|
+
if context.config.regional_endpoint
|
|
207
|
+
http_req.endpoint.scheme = secure ? 'https' : 'http'
|
|
208
|
+
http_req.endpoint.port = secure ? 443 : 80
|
|
206
209
|
end
|
|
207
210
|
|
|
208
211
|
query = http_req.endpoint.query ? http_req.endpoint.query.split('&') : []
|
|
@@ -221,6 +224,24 @@ module Aws
|
|
|
221
224
|
end
|
|
222
225
|
http_req.endpoint.query = query.join('&') unless query.empty?
|
|
223
226
|
|
|
227
|
+
auth_scheme = context[:auth_scheme]
|
|
228
|
+
scheme_name = auth_scheme['name']
|
|
229
|
+
region = if scheme_name == 'sigv4a'
|
|
230
|
+
auth_scheme['signingRegionSet'].first
|
|
231
|
+
else
|
|
232
|
+
auth_scheme['signingRegion']
|
|
233
|
+
end
|
|
234
|
+
signer = Aws::Sigv4::Signer.new(
|
|
235
|
+
service: auth_scheme['signingName'] || 's3',
|
|
236
|
+
region: context[:sigv4_region] || region || context.config.region,
|
|
237
|
+
credentials_provider: context[:sigv4_credentials] || context.config.credentials,
|
|
238
|
+
signing_algorithm: scheme_name.to_sym,
|
|
239
|
+
uri_escape_path: !!!auth_scheme['disableDoubleEncoding'],
|
|
240
|
+
normalize_path: !!!auth_scheme['disableNormalizePath'],
|
|
241
|
+
unsigned_headers: unsigned_headers,
|
|
242
|
+
apply_checksum_header: false
|
|
243
|
+
)
|
|
244
|
+
|
|
224
245
|
url = signer.presign_url(
|
|
225
246
|
http_method: http_req.http_method,
|
|
226
247
|
url: http_req.endpoint,
|
|
@@ -230,24 +251,11 @@ module Aws
|
|
|
230
251
|
time: time
|
|
231
252
|
).to_s
|
|
232
253
|
|
|
233
|
-
# Used for excluding presigned_urls from API request count
|
|
234
|
-
context[:presigned_url] = true
|
|
235
|
-
|
|
236
254
|
Seahorse::Client::Response.new(context: context, data: url)
|
|
237
255
|
end
|
|
238
256
|
# Return the headers
|
|
239
257
|
x_amz_headers
|
|
240
258
|
end
|
|
241
|
-
|
|
242
|
-
def build_signer(cfg, unsigned_headers)
|
|
243
|
-
Aws::Sigv4::Signer.new(
|
|
244
|
-
service: 's3',
|
|
245
|
-
region: cfg.region,
|
|
246
|
-
credentials_provider: cfg.credentials,
|
|
247
|
-
unsigned_headers: unsigned_headers,
|
|
248
|
-
uri_escape_path: false
|
|
249
|
-
)
|
|
250
|
-
end
|
|
251
259
|
end
|
|
252
260
|
end
|
|
253
261
|
end
|