aws-sdk-s3 1.151.0 → 1.208.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 +352 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +12 -3
- data/lib/aws-sdk-s3/bucket.rb +358 -109
- data/lib/aws-sdk-s3/bucket_acl.rb +10 -9
- data/lib/aws-sdk-s3/bucket_cors.rb +10 -9
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +11 -6
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +64 -7
- data/lib/aws-sdk-s3/bucket_logging.rb +5 -5
- data/lib/aws-sdk-s3/bucket_notification.rb +3 -3
- data/lib/aws-sdk-s3/bucket_policy.rb +14 -13
- data/lib/aws-sdk-s3/bucket_request_payment.rb +6 -6
- data/lib/aws-sdk-s3/bucket_tagging.rb +7 -7
- data/lib/aws-sdk-s3/bucket_versioning.rb +47 -14
- data/lib/aws-sdk-s3/bucket_website.rb +7 -7
- data/lib/aws-sdk-s3/client.rb +5530 -2075
- data/lib/aws-sdk-s3/client_api.rb +660 -162
- data/lib/aws-sdk-s3/customizations/bucket.rb +1 -1
- data/lib/aws-sdk-s3/customizations/object.rb +87 -91
- 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.rb +28 -39
- data/lib/aws-sdk-s3/default_executor.rb +103 -0
- data/lib/aws-sdk-s3/encryption/client.rb +4 -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 +4 -2
- data/lib/aws-sdk-s3/encryptionV2/client.rb +100 -25
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +7 -162
- data/lib/aws-sdk-s3/encryptionV2/decryption.rb +205 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +17 -0
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +2 -0
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -2
- 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 +37 -34
- data/lib/aws-sdk-s3/endpoint_provider.rb +572 -277
- data/lib/aws-sdk-s3/endpoints.rb +566 -1612
- data/lib/aws-sdk-s3/errors.rb +58 -0
- data/lib/aws-sdk-s3/file_downloader.rb +192 -146
- data/lib/aws-sdk-s3/file_uploader.rb +10 -14
- data/lib/aws-sdk-s3/legacy_signer.rb +2 -1
- data/lib/aws-sdk-s3/multipart_download_error.rb +8 -0
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +105 -102
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +97 -108
- data/lib/aws-sdk-s3/multipart_upload.rb +112 -12
- data/lib/aws-sdk-s3/multipart_upload_error.rb +3 -4
- data/lib/aws-sdk-s3/multipart_upload_part.rb +55 -39
- data/lib/aws-sdk-s3/object.rb +713 -227
- data/lib/aws-sdk-s3/object_acl.rb +15 -9
- data/lib/aws-sdk-s3/object_copier.rb +1 -1
- data/lib/aws-sdk-s3/object_multipart_copier.rb +2 -1
- data/lib/aws-sdk-s3/object_summary.rb +592 -173
- data/lib/aws-sdk-s3/object_version.rb +102 -17
- data/lib/aws-sdk-s3/plugins/access_grants.rb +75 -5
- data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +31 -0
- data/lib/aws-sdk-s3/plugins/endpoints.rb +25 -213
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +18 -21
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +55 -18
- data/lib/aws-sdk-s3/plugins/md5s.rb +10 -71
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +5 -7
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -1
- data/lib/aws-sdk-s3/presigner.rb +5 -5
- data/lib/aws-sdk-s3/resource.rb +53 -20
- data/lib/aws-sdk-s3/transfer_manager.rb +303 -0
- data/lib/aws-sdk-s3/types.rb +4705 -1528
- data/lib/aws-sdk-s3.rb +35 -31
- data/sig/bucket.rbs +28 -9
- data/sig/bucket_acl.rbs +1 -1
- data/sig/bucket_cors.rbs +1 -1
- data/sig/bucket_lifecycle.rbs +1 -1
- data/sig/bucket_lifecycle_configuration.rbs +8 -4
- data/sig/bucket_logging.rbs +1 -1
- data/sig/bucket_policy.rbs +1 -1
- data/sig/bucket_request_payment.rbs +1 -1
- data/sig/bucket_tagging.rbs +1 -1
- data/sig/bucket_versioning.rbs +3 -3
- data/sig/bucket_website.rbs +1 -1
- data/sig/client.rbs +322 -72
- data/sig/errors.rbs +10 -0
- data/sig/multipart_upload.rbs +13 -3
- data/sig/multipart_upload_part.rbs +5 -1
- data/sig/object.rbs +44 -16
- data/sig/object_acl.rbs +1 -1
- data/sig/object_summary.rbs +29 -16
- data/sig/object_version.rbs +15 -3
- data/sig/resource.rbs +20 -5
- data/sig/types.rbs +403 -66
- data/sig/waiters.rbs +12 -0
- metadata +29 -12
- data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +0 -31
|
@@ -62,6 +62,18 @@ module Aws::S3
|
|
|
62
62
|
data[:checksum_algorithm]
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
+
# The checksum type that is used to calculate the object’s checksum
|
|
66
|
+
# value. For more information, see [Checking object integrity][1] in the
|
|
67
|
+
# *Amazon S3 User Guide*.
|
|
68
|
+
#
|
|
69
|
+
#
|
|
70
|
+
#
|
|
71
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
|
72
|
+
# @return [String]
|
|
73
|
+
def checksum_type
|
|
74
|
+
data[:checksum_type]
|
|
75
|
+
end
|
|
76
|
+
|
|
65
77
|
# Size in bytes of the object.
|
|
66
78
|
# @return [Integer]
|
|
67
79
|
def size
|
|
@@ -243,7 +255,7 @@ module Aws::S3
|
|
|
243
255
|
:retry
|
|
244
256
|
end
|
|
245
257
|
end
|
|
246
|
-
Aws::Plugins::UserAgent.
|
|
258
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
247
259
|
Aws::Waiters::Waiter.new(options).wait({})
|
|
248
260
|
end
|
|
249
261
|
end
|
|
@@ -257,6 +269,9 @@ module Aws::S3
|
|
|
257
269
|
# request_payer: "requester", # accepts requester
|
|
258
270
|
# bypass_governance_retention: false,
|
|
259
271
|
# expected_bucket_owner: "AccountId",
|
|
272
|
+
# if_match: "IfMatch",
|
|
273
|
+
# if_match_last_modified_time: Time.now,
|
|
274
|
+
# if_match_size: 1,
|
|
260
275
|
# })
|
|
261
276
|
# @param [Hash] options ({})
|
|
262
277
|
# @option options [String] :mfa
|
|
@@ -296,6 +311,44 @@ module Aws::S3
|
|
|
296
311
|
# The account ID of the expected bucket owner. If the account ID that
|
|
297
312
|
# you provide does not match the actual owner of the bucket, the request
|
|
298
313
|
# fails with the HTTP status code `403 Forbidden` (access denied).
|
|
314
|
+
# @option options [String] :if_match
|
|
315
|
+
# Deletes the object if the ETag (entity tag) value provided during the
|
|
316
|
+
# delete operation matches the ETag of the object in S3. If the ETag
|
|
317
|
+
# values do not match, the operation returns a `412 Precondition Failed`
|
|
318
|
+
# error.
|
|
319
|
+
#
|
|
320
|
+
# Expects the ETag value as a string. `If-Match` does accept a string
|
|
321
|
+
# value of an '*' (asterisk) character to denote a match of any ETag.
|
|
322
|
+
#
|
|
323
|
+
# For more information about conditional requests, see [RFC 7232][1].
|
|
324
|
+
#
|
|
325
|
+
#
|
|
326
|
+
#
|
|
327
|
+
# [1]: https://tools.ietf.org/html/rfc7232
|
|
328
|
+
# @option options [Time,DateTime,Date,Integer,String] :if_match_last_modified_time
|
|
329
|
+
# If present, the object is deleted only if its modification times
|
|
330
|
+
# matches the provided `Timestamp`. If the `Timestamp` values do not
|
|
331
|
+
# match, the operation returns a `412 Precondition Failed` error. If the
|
|
332
|
+
# `Timestamp` matches or if the object doesn’t exist, the operation
|
|
333
|
+
# returns a `204 Success (No Content)` response.
|
|
334
|
+
#
|
|
335
|
+
# <note markdown="1"> This functionality is only supported for directory buckets.
|
|
336
|
+
#
|
|
337
|
+
# </note>
|
|
338
|
+
# @option options [Integer] :if_match_size
|
|
339
|
+
# If present, the object is deleted only if its size matches the
|
|
340
|
+
# provided size in bytes. If the `Size` value does not match, the
|
|
341
|
+
# operation returns a `412 Precondition Failed` error. If the `Size`
|
|
342
|
+
# matches or if the object doesn’t exist, the operation returns a `204
|
|
343
|
+
# Success (No Content)` response.
|
|
344
|
+
#
|
|
345
|
+
# <note markdown="1"> This functionality is only supported for directory buckets.
|
|
346
|
+
#
|
|
347
|
+
# </note>
|
|
348
|
+
#
|
|
349
|
+
# You can use the `If-Match`, `x-amz-if-match-last-modified-time` and
|
|
350
|
+
# `x-amz-if-match-size` conditional headers in conjunction with
|
|
351
|
+
# each-other or individually.
|
|
299
352
|
# @return [Types::DeleteObjectOutput]
|
|
300
353
|
def delete(options = {})
|
|
301
354
|
options = options.merge(
|
|
@@ -303,7 +356,7 @@ module Aws::S3
|
|
|
303
356
|
key: @object_key,
|
|
304
357
|
version_id: @id
|
|
305
358
|
)
|
|
306
|
-
resp = Aws::Plugins::UserAgent.
|
|
359
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
307
360
|
@client.delete_object(options)
|
|
308
361
|
end
|
|
309
362
|
resp.data
|
|
@@ -530,7 +583,7 @@ module Aws::S3
|
|
|
530
583
|
key: @object_key,
|
|
531
584
|
version_id: @id
|
|
532
585
|
)
|
|
533
|
-
resp = Aws::Plugins::UserAgent.
|
|
586
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
534
587
|
@client.get_object(options, &block)
|
|
535
588
|
end
|
|
536
589
|
resp.data
|
|
@@ -544,6 +597,12 @@ module Aws::S3
|
|
|
544
597
|
# if_none_match: "IfNoneMatch",
|
|
545
598
|
# if_unmodified_since: Time.now,
|
|
546
599
|
# range: "Range",
|
|
600
|
+
# response_cache_control: "ResponseCacheControl",
|
|
601
|
+
# response_content_disposition: "ResponseContentDisposition",
|
|
602
|
+
# response_content_encoding: "ResponseContentEncoding",
|
|
603
|
+
# response_content_language: "ResponseContentLanguage",
|
|
604
|
+
# response_content_type: "ResponseContentType",
|
|
605
|
+
# response_expires: Time.now,
|
|
547
606
|
# sse_customer_algorithm: "SSECustomerAlgorithm",
|
|
548
607
|
# sse_customer_key: "SSECustomerKey",
|
|
549
608
|
# sse_customer_key_md5: "SSECustomerKeyMD5",
|
|
@@ -630,6 +689,18 @@ module Aws::S3
|
|
|
630
689
|
# satisfiable, only the `ContentLength` is affected in the response. If
|
|
631
690
|
# the Range is not satisfiable, S3 returns a `416 - Requested Range Not
|
|
632
691
|
# Satisfiable` error.
|
|
692
|
+
# @option options [String] :response_cache_control
|
|
693
|
+
# Sets the `Cache-Control` header of the response.
|
|
694
|
+
# @option options [String] :response_content_disposition
|
|
695
|
+
# Sets the `Content-Disposition` header of the response.
|
|
696
|
+
# @option options [String] :response_content_encoding
|
|
697
|
+
# Sets the `Content-Encoding` header of the response.
|
|
698
|
+
# @option options [String] :response_content_language
|
|
699
|
+
# Sets the `Content-Language` header of the response.
|
|
700
|
+
# @option options [String] :response_content_type
|
|
701
|
+
# Sets the `Content-Type` header of the response.
|
|
702
|
+
# @option options [Time,DateTime,Date,Integer,String] :response_expires
|
|
703
|
+
# Sets the `Expires` header of the response.
|
|
633
704
|
# @option options [String] :sse_customer_algorithm
|
|
634
705
|
# Specifies the algorithm to use when encrypting the object (for
|
|
635
706
|
# example, AES256).
|
|
@@ -683,10 +754,20 @@ module Aws::S3
|
|
|
683
754
|
# @option options [String] :checksum_mode
|
|
684
755
|
# To retrieve the checksum, this parameter must be enabled.
|
|
685
756
|
#
|
|
686
|
-
#
|
|
687
|
-
#
|
|
688
|
-
# KMS), you must have permission to use the
|
|
689
|
-
#
|
|
757
|
+
# **General purpose buckets** - If you enable checksum mode and the
|
|
758
|
+
# object is uploaded with a [checksum][1] and encrypted with an Key
|
|
759
|
+
# Management Service (KMS) key, you must have permission to use the
|
|
760
|
+
# `kms:Decrypt` action to retrieve the checksum.
|
|
761
|
+
#
|
|
762
|
+
# **Directory buckets** - If you enable `ChecksumMode` and the object is
|
|
763
|
+
# encrypted with Amazon Web Services Key Management Service (Amazon Web
|
|
764
|
+
# Services KMS), you must also have the `kms:GenerateDataKey` and
|
|
765
|
+
# `kms:Decrypt` permissions in IAM identity-based policies and KMS key
|
|
766
|
+
# policies for the KMS key to retrieve the checksum of the object.
|
|
767
|
+
#
|
|
768
|
+
#
|
|
769
|
+
#
|
|
770
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html
|
|
690
771
|
# @return [Types::HeadObjectOutput]
|
|
691
772
|
def head(options = {})
|
|
692
773
|
options = options.merge(
|
|
@@ -694,7 +775,7 @@ module Aws::S3
|
|
|
694
775
|
key: @object_key,
|
|
695
776
|
version_id: @id
|
|
696
777
|
)
|
|
697
|
-
resp = Aws::Plugins::UserAgent.
|
|
778
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
698
779
|
@client.head_object(options)
|
|
699
780
|
end
|
|
700
781
|
resp.data
|
|
@@ -768,7 +849,7 @@ module Aws::S3
|
|
|
768
849
|
# request_payer: "requester", # accepts requester
|
|
769
850
|
# bypass_governance_retention: false,
|
|
770
851
|
# expected_bucket_owner: "AccountId",
|
|
771
|
-
# checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
|
|
852
|
+
# checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256, CRC64NVME
|
|
772
853
|
# })
|
|
773
854
|
# @param options ({})
|
|
774
855
|
# @option options [String] :mfa
|
|
@@ -832,22 +913,23 @@ module Aws::S3
|
|
|
832
913
|
# For the `x-amz-checksum-algorithm ` header, replace ` algorithm ` with
|
|
833
914
|
# the supported algorithm from the following list:
|
|
834
915
|
#
|
|
835
|
-
# * CRC32
|
|
916
|
+
# * `CRC32`
|
|
917
|
+
#
|
|
918
|
+
# * `CRC32C`
|
|
836
919
|
#
|
|
837
|
-
# *
|
|
920
|
+
# * `CRC64NVME`
|
|
838
921
|
#
|
|
839
|
-
# * SHA1
|
|
922
|
+
# * `SHA1`
|
|
840
923
|
#
|
|
841
|
-
# * SHA256
|
|
924
|
+
# * `SHA256`
|
|
842
925
|
#
|
|
843
926
|
# For more information, see [Checking object integrity][1] in the
|
|
844
927
|
# *Amazon S3 User Guide*.
|
|
845
928
|
#
|
|
846
929
|
# If the individual checksum value you provide through
|
|
847
930
|
# `x-amz-checksum-algorithm ` doesn't match the checksum algorithm you
|
|
848
|
-
# set through `x-amz-sdk-checksum-algorithm`, Amazon S3
|
|
849
|
-
#
|
|
850
|
-
# that matches the provided value in `x-amz-checksum-algorithm `.
|
|
931
|
+
# set through `x-amz-sdk-checksum-algorithm`, Amazon S3 fails the
|
|
932
|
+
# request with a `BadDigest` error.
|
|
851
933
|
#
|
|
852
934
|
# If you provide an individual checksum, Amazon S3 ignores any provided
|
|
853
935
|
# `ChecksumAlgorithm` parameter.
|
|
@@ -868,7 +950,7 @@ module Aws::S3
|
|
|
868
950
|
version_id: item.id
|
|
869
951
|
}
|
|
870
952
|
end
|
|
871
|
-
Aws::Plugins::UserAgent.
|
|
953
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
872
954
|
batch[0].client.delete_objects(params)
|
|
873
955
|
end
|
|
874
956
|
end
|
|
@@ -880,3 +962,6 @@ module Aws::S3
|
|
|
880
962
|
end
|
|
881
963
|
end
|
|
882
964
|
end
|
|
965
|
+
|
|
966
|
+
# Load customizations if they exist
|
|
967
|
+
require 'aws-sdk-s3/customizations/object_version'
|
|
@@ -44,36 +44,70 @@ setting, caching, and fallback behavior.
|
|
|
44
44
|
list_objects_v2: 'READ',
|
|
45
45
|
list_object_versions: 'READ',
|
|
46
46
|
list_parts: 'READ',
|
|
47
|
+
head_bucket: 'READ',
|
|
48
|
+
get_object_attributes: 'READ',
|
|
47
49
|
put_object: 'WRITE',
|
|
48
50
|
put_object_acl: 'WRITE',
|
|
49
51
|
delete_object: 'WRITE',
|
|
50
52
|
abort_multipart_upload: 'WRITE',
|
|
51
53
|
create_multipart_upload: 'WRITE',
|
|
52
54
|
upload_part: 'WRITE',
|
|
53
|
-
complete_multipart_upload: 'WRITE'
|
|
55
|
+
complete_multipart_upload: 'WRITE',
|
|
56
|
+
delete_objects: 'WRITE',
|
|
57
|
+
copy_object: 'READWRITE'
|
|
54
58
|
}.freeze
|
|
55
59
|
|
|
56
60
|
def call(context)
|
|
61
|
+
provider = context.config.access_grants_credentials_provider
|
|
62
|
+
|
|
57
63
|
if access_grants_operation?(context) &&
|
|
58
|
-
!s3_express_endpoint?(context)
|
|
64
|
+
!s3_express_endpoint?(context) &&
|
|
65
|
+
!credentials_head_bucket_call?(provider)
|
|
59
66
|
params = context[:endpoint_params]
|
|
60
67
|
permission = PERMISSION_MAP[context.operation_name]
|
|
61
68
|
|
|
62
|
-
|
|
69
|
+
key =
|
|
70
|
+
case context.operation_name
|
|
71
|
+
when :delete_objects
|
|
72
|
+
delete_params = context.params[:delete]
|
|
73
|
+
common_prefixes(delete_params[:objects].map { |o| o[:key] })
|
|
74
|
+
when :copy_object
|
|
75
|
+
source_bucket, source_key = params[:copy_source].split('/', 2)
|
|
76
|
+
if params[:bucket] != source_bucket
|
|
77
|
+
raise ArgumentError,
|
|
78
|
+
'source and destination bucket must be the same'
|
|
79
|
+
end
|
|
80
|
+
common_prefixes([params[:key], source_key])
|
|
81
|
+
else
|
|
82
|
+
params[:key]
|
|
83
|
+
end
|
|
84
|
+
|
|
63
85
|
credentials = provider.access_grants_credentials_for(
|
|
64
86
|
bucket: params[:bucket],
|
|
65
|
-
key:
|
|
87
|
+
key: key,
|
|
66
88
|
prefix: params[:prefix],
|
|
67
89
|
permission: permission
|
|
68
90
|
)
|
|
69
91
|
context[:sigv4_credentials] = credentials # Sign will use this
|
|
70
92
|
end
|
|
71
93
|
|
|
72
|
-
@handler.call(context)
|
|
94
|
+
with_metric(credentials) { @handler.call(context) }
|
|
73
95
|
end
|
|
74
96
|
|
|
75
97
|
private
|
|
76
98
|
|
|
99
|
+
def with_metric(credentials, &block)
|
|
100
|
+
return block.call unless credentials
|
|
101
|
+
|
|
102
|
+
Aws::Plugins::UserAgent.metric('S3_ACCESS_GRANTS', &block)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# HeadBucket is a supported call. When fetching credentials,
|
|
106
|
+
# this plugin is executed again, and becomes recursive.
|
|
107
|
+
def credentials_head_bucket_call?(provider)
|
|
108
|
+
provider.instance_variable_get(:@head_bucket_call)
|
|
109
|
+
end
|
|
110
|
+
|
|
77
111
|
def access_grants_operation?(context)
|
|
78
112
|
params = context[:endpoint_params]
|
|
79
113
|
params[:bucket] && PERMISSION_MAP[context.operation_name]
|
|
@@ -82,6 +116,42 @@ setting, caching, and fallback behavior.
|
|
|
82
116
|
def s3_express_endpoint?(context)
|
|
83
117
|
context[:endpoint_properties]['backend'] == 'S3Express'
|
|
84
118
|
end
|
|
119
|
+
|
|
120
|
+
# Return the common prefix of the keys, regardless of the delimiter.
|
|
121
|
+
# For example, given keys ['foo/bar', 'foo/baz'], the common prefix
|
|
122
|
+
# is 'foo/ba'.
|
|
123
|
+
def common_prefixes(keys)
|
|
124
|
+
return '' if keys.empty?
|
|
125
|
+
|
|
126
|
+
first_key = keys[0]
|
|
127
|
+
common_ancestor = first_key
|
|
128
|
+
last_prefix = ''
|
|
129
|
+
keys.each do |k|
|
|
130
|
+
until common_ancestor.empty?
|
|
131
|
+
break if k.start_with?(common_ancestor)
|
|
132
|
+
|
|
133
|
+
last_index = common_ancestor.rindex('/')
|
|
134
|
+
return '' if last_index.nil?
|
|
135
|
+
|
|
136
|
+
last_prefix = common_ancestor[(last_index + 1)..-1]
|
|
137
|
+
common_ancestor = common_ancestor[0...last_index]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
new_common_ancestor = "#{common_ancestor}/#{last_prefix}"
|
|
141
|
+
keys.each do |k|
|
|
142
|
+
until last_prefix.empty?
|
|
143
|
+
break if k.start_with?(new_common_ancestor)
|
|
144
|
+
|
|
145
|
+
last_prefix = last_prefix[0...-1]
|
|
146
|
+
new_common_ancestor = "#{common_ancestor}/#{last_prefix}"
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
if new_common_ancestor == "#{first_key}/"
|
|
150
|
+
first_key
|
|
151
|
+
else
|
|
152
|
+
new_common_ancestor
|
|
153
|
+
end
|
|
154
|
+
end
|
|
85
155
|
end
|
|
86
156
|
|
|
87
157
|
def add_handlers(handlers, config)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module S3
|
|
5
|
+
module Plugins
|
|
6
|
+
# @api private
|
|
7
|
+
class ChecksumAlgorithm < Seahorse::Client::Plugin
|
|
8
|
+
|
|
9
|
+
# S3 GetObject results for whole Multipart Objects contain a checksum
|
|
10
|
+
# that cannot be validated. These should be skipped by the
|
|
11
|
+
# ChecksumAlgorithm plugin.
|
|
12
|
+
class SkipWholeMultipartGetChecksumsHandler < Seahorse::Client::Handler
|
|
13
|
+
def call(context)
|
|
14
|
+
context[:http_checksum] ||= {}
|
|
15
|
+
context[:http_checksum][:skip_on_suffix] = true
|
|
16
|
+
|
|
17
|
+
@handler.call(context)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add_handlers(handlers, _config)
|
|
22
|
+
handlers.add(
|
|
23
|
+
SkipWholeMultipartGetChecksumsHandler,
|
|
24
|
+
step: :initialize,
|
|
25
|
+
operations: [:get_object]
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -15,25 +15,28 @@ module Aws::S3
|
|
|
15
15
|
:endpoint_provider,
|
|
16
16
|
doc_type: 'Aws::S3::EndpointProvider',
|
|
17
17
|
rbs_type: 'untyped',
|
|
18
|
-
docstring:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
docstring: <<~DOCS) do |_cfg|
|
|
19
|
+
The endpoint provider used to resolve endpoints. Any object that responds to
|
|
20
|
+
`#resolve_endpoint(parameters)` where `parameters` is a Struct similar to
|
|
21
|
+
`Aws::S3::EndpointParameters`.
|
|
22
|
+
DOCS
|
|
23
23
|
Aws::S3::EndpointProvider.new
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
option(
|
|
27
27
|
:disable_s3_express_session_auth,
|
|
28
|
-
doc_type: '
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
doc_type: 'boolean',
|
|
29
|
+
docstring: <<~DOCS) do |cfg|
|
|
30
|
+
Parameter to indicate whether S3Express session auth should be disabled
|
|
31
|
+
DOCS
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
31
34
|
|
|
32
35
|
# @api private
|
|
33
36
|
class Handler < Seahorse::Client::Handler
|
|
34
37
|
def call(context)
|
|
35
38
|
unless context[:discovered_endpoint]
|
|
36
|
-
params = parameters_for_operation(context)
|
|
39
|
+
params = Aws::S3::Endpoints.parameters_for_operation(context)
|
|
37
40
|
endpoint = context.config.endpoint_provider.resolve_endpoint(params)
|
|
38
41
|
|
|
39
42
|
context.http_request.endpoint = endpoint.url
|
|
@@ -46,11 +49,23 @@ module Aws::S3
|
|
|
46
49
|
context[:auth_scheme] =
|
|
47
50
|
Aws::Endpoints.resolve_auth_scheme(context, endpoint)
|
|
48
51
|
|
|
49
|
-
@handler.call(context)
|
|
52
|
+
with_metrics(context) { @handler.call(context) }
|
|
50
53
|
end
|
|
51
54
|
|
|
52
55
|
private
|
|
53
56
|
|
|
57
|
+
def with_metrics(context, &block)
|
|
58
|
+
metrics = []
|
|
59
|
+
metrics << 'ENDPOINT_OVERRIDE' unless context.config.regional_endpoint
|
|
60
|
+
if context[:auth_scheme] && context[:auth_scheme]['name'] == 'sigv4a'
|
|
61
|
+
metrics << 'SIGV4A_SIGNING'
|
|
62
|
+
end
|
|
63
|
+
if context.config.credentials&.credentials&.account_id
|
|
64
|
+
metrics << 'RESOLVED_ACCOUNT_ID'
|
|
65
|
+
end
|
|
66
|
+
Aws::Plugins::UserAgent.metric(*metrics, &block)
|
|
67
|
+
end
|
|
68
|
+
|
|
54
69
|
def apply_endpoint_headers(context, headers)
|
|
55
70
|
headers.each do |key, values|
|
|
56
71
|
value = values
|
|
@@ -61,209 +76,6 @@ module Aws::S3
|
|
|
61
76
|
context.http_request.headers[key] = value
|
|
62
77
|
end
|
|
63
78
|
end
|
|
64
|
-
|
|
65
|
-
def parameters_for_operation(context)
|
|
66
|
-
case context.operation_name
|
|
67
|
-
when :abort_multipart_upload
|
|
68
|
-
Aws::S3::Endpoints::AbortMultipartUpload.build(context)
|
|
69
|
-
when :complete_multipart_upload
|
|
70
|
-
Aws::S3::Endpoints::CompleteMultipartUpload.build(context)
|
|
71
|
-
when :copy_object
|
|
72
|
-
Aws::S3::Endpoints::CopyObject.build(context)
|
|
73
|
-
when :create_bucket
|
|
74
|
-
Aws::S3::Endpoints::CreateBucket.build(context)
|
|
75
|
-
when :create_multipart_upload
|
|
76
|
-
Aws::S3::Endpoints::CreateMultipartUpload.build(context)
|
|
77
|
-
when :create_session
|
|
78
|
-
Aws::S3::Endpoints::CreateSession.build(context)
|
|
79
|
-
when :delete_bucket
|
|
80
|
-
Aws::S3::Endpoints::DeleteBucket.build(context)
|
|
81
|
-
when :delete_bucket_analytics_configuration
|
|
82
|
-
Aws::S3::Endpoints::DeleteBucketAnalyticsConfiguration.build(context)
|
|
83
|
-
when :delete_bucket_cors
|
|
84
|
-
Aws::S3::Endpoints::DeleteBucketCors.build(context)
|
|
85
|
-
when :delete_bucket_encryption
|
|
86
|
-
Aws::S3::Endpoints::DeleteBucketEncryption.build(context)
|
|
87
|
-
when :delete_bucket_intelligent_tiering_configuration
|
|
88
|
-
Aws::S3::Endpoints::DeleteBucketIntelligentTieringConfiguration.build(context)
|
|
89
|
-
when :delete_bucket_inventory_configuration
|
|
90
|
-
Aws::S3::Endpoints::DeleteBucketInventoryConfiguration.build(context)
|
|
91
|
-
when :delete_bucket_lifecycle
|
|
92
|
-
Aws::S3::Endpoints::DeleteBucketLifecycle.build(context)
|
|
93
|
-
when :delete_bucket_metrics_configuration
|
|
94
|
-
Aws::S3::Endpoints::DeleteBucketMetricsConfiguration.build(context)
|
|
95
|
-
when :delete_bucket_ownership_controls
|
|
96
|
-
Aws::S3::Endpoints::DeleteBucketOwnershipControls.build(context)
|
|
97
|
-
when :delete_bucket_policy
|
|
98
|
-
Aws::S3::Endpoints::DeleteBucketPolicy.build(context)
|
|
99
|
-
when :delete_bucket_replication
|
|
100
|
-
Aws::S3::Endpoints::DeleteBucketReplication.build(context)
|
|
101
|
-
when :delete_bucket_tagging
|
|
102
|
-
Aws::S3::Endpoints::DeleteBucketTagging.build(context)
|
|
103
|
-
when :delete_bucket_website
|
|
104
|
-
Aws::S3::Endpoints::DeleteBucketWebsite.build(context)
|
|
105
|
-
when :delete_object
|
|
106
|
-
Aws::S3::Endpoints::DeleteObject.build(context)
|
|
107
|
-
when :delete_object_tagging
|
|
108
|
-
Aws::S3::Endpoints::DeleteObjectTagging.build(context)
|
|
109
|
-
when :delete_objects
|
|
110
|
-
Aws::S3::Endpoints::DeleteObjects.build(context)
|
|
111
|
-
when :delete_public_access_block
|
|
112
|
-
Aws::S3::Endpoints::DeletePublicAccessBlock.build(context)
|
|
113
|
-
when :get_bucket_accelerate_configuration
|
|
114
|
-
Aws::S3::Endpoints::GetBucketAccelerateConfiguration.build(context)
|
|
115
|
-
when :get_bucket_acl
|
|
116
|
-
Aws::S3::Endpoints::GetBucketAcl.build(context)
|
|
117
|
-
when :get_bucket_analytics_configuration
|
|
118
|
-
Aws::S3::Endpoints::GetBucketAnalyticsConfiguration.build(context)
|
|
119
|
-
when :get_bucket_cors
|
|
120
|
-
Aws::S3::Endpoints::GetBucketCors.build(context)
|
|
121
|
-
when :get_bucket_encryption
|
|
122
|
-
Aws::S3::Endpoints::GetBucketEncryption.build(context)
|
|
123
|
-
when :get_bucket_intelligent_tiering_configuration
|
|
124
|
-
Aws::S3::Endpoints::GetBucketIntelligentTieringConfiguration.build(context)
|
|
125
|
-
when :get_bucket_inventory_configuration
|
|
126
|
-
Aws::S3::Endpoints::GetBucketInventoryConfiguration.build(context)
|
|
127
|
-
when :get_bucket_lifecycle
|
|
128
|
-
Aws::S3::Endpoints::GetBucketLifecycle.build(context)
|
|
129
|
-
when :get_bucket_lifecycle_configuration
|
|
130
|
-
Aws::S3::Endpoints::GetBucketLifecycleConfiguration.build(context)
|
|
131
|
-
when :get_bucket_location
|
|
132
|
-
Aws::S3::Endpoints::GetBucketLocation.build(context)
|
|
133
|
-
when :get_bucket_logging
|
|
134
|
-
Aws::S3::Endpoints::GetBucketLogging.build(context)
|
|
135
|
-
when :get_bucket_metrics_configuration
|
|
136
|
-
Aws::S3::Endpoints::GetBucketMetricsConfiguration.build(context)
|
|
137
|
-
when :get_bucket_notification
|
|
138
|
-
Aws::S3::Endpoints::GetBucketNotification.build(context)
|
|
139
|
-
when :get_bucket_notification_configuration
|
|
140
|
-
Aws::S3::Endpoints::GetBucketNotificationConfiguration.build(context)
|
|
141
|
-
when :get_bucket_ownership_controls
|
|
142
|
-
Aws::S3::Endpoints::GetBucketOwnershipControls.build(context)
|
|
143
|
-
when :get_bucket_policy
|
|
144
|
-
Aws::S3::Endpoints::GetBucketPolicy.build(context)
|
|
145
|
-
when :get_bucket_policy_status
|
|
146
|
-
Aws::S3::Endpoints::GetBucketPolicyStatus.build(context)
|
|
147
|
-
when :get_bucket_replication
|
|
148
|
-
Aws::S3::Endpoints::GetBucketReplication.build(context)
|
|
149
|
-
when :get_bucket_request_payment
|
|
150
|
-
Aws::S3::Endpoints::GetBucketRequestPayment.build(context)
|
|
151
|
-
when :get_bucket_tagging
|
|
152
|
-
Aws::S3::Endpoints::GetBucketTagging.build(context)
|
|
153
|
-
when :get_bucket_versioning
|
|
154
|
-
Aws::S3::Endpoints::GetBucketVersioning.build(context)
|
|
155
|
-
when :get_bucket_website
|
|
156
|
-
Aws::S3::Endpoints::GetBucketWebsite.build(context)
|
|
157
|
-
when :get_object
|
|
158
|
-
Aws::S3::Endpoints::GetObject.build(context)
|
|
159
|
-
when :get_object_acl
|
|
160
|
-
Aws::S3::Endpoints::GetObjectAcl.build(context)
|
|
161
|
-
when :get_object_attributes
|
|
162
|
-
Aws::S3::Endpoints::GetObjectAttributes.build(context)
|
|
163
|
-
when :get_object_legal_hold
|
|
164
|
-
Aws::S3::Endpoints::GetObjectLegalHold.build(context)
|
|
165
|
-
when :get_object_lock_configuration
|
|
166
|
-
Aws::S3::Endpoints::GetObjectLockConfiguration.build(context)
|
|
167
|
-
when :get_object_retention
|
|
168
|
-
Aws::S3::Endpoints::GetObjectRetention.build(context)
|
|
169
|
-
when :get_object_tagging
|
|
170
|
-
Aws::S3::Endpoints::GetObjectTagging.build(context)
|
|
171
|
-
when :get_object_torrent
|
|
172
|
-
Aws::S3::Endpoints::GetObjectTorrent.build(context)
|
|
173
|
-
when :get_public_access_block
|
|
174
|
-
Aws::S3::Endpoints::GetPublicAccessBlock.build(context)
|
|
175
|
-
when :head_bucket
|
|
176
|
-
Aws::S3::Endpoints::HeadBucket.build(context)
|
|
177
|
-
when :head_object
|
|
178
|
-
Aws::S3::Endpoints::HeadObject.build(context)
|
|
179
|
-
when :list_bucket_analytics_configurations
|
|
180
|
-
Aws::S3::Endpoints::ListBucketAnalyticsConfigurations.build(context)
|
|
181
|
-
when :list_bucket_intelligent_tiering_configurations
|
|
182
|
-
Aws::S3::Endpoints::ListBucketIntelligentTieringConfigurations.build(context)
|
|
183
|
-
when :list_bucket_inventory_configurations
|
|
184
|
-
Aws::S3::Endpoints::ListBucketInventoryConfigurations.build(context)
|
|
185
|
-
when :list_bucket_metrics_configurations
|
|
186
|
-
Aws::S3::Endpoints::ListBucketMetricsConfigurations.build(context)
|
|
187
|
-
when :list_buckets
|
|
188
|
-
Aws::S3::Endpoints::ListBuckets.build(context)
|
|
189
|
-
when :list_directory_buckets
|
|
190
|
-
Aws::S3::Endpoints::ListDirectoryBuckets.build(context)
|
|
191
|
-
when :list_multipart_uploads
|
|
192
|
-
Aws::S3::Endpoints::ListMultipartUploads.build(context)
|
|
193
|
-
when :list_object_versions
|
|
194
|
-
Aws::S3::Endpoints::ListObjectVersions.build(context)
|
|
195
|
-
when :list_objects
|
|
196
|
-
Aws::S3::Endpoints::ListObjects.build(context)
|
|
197
|
-
when :list_objects_v2
|
|
198
|
-
Aws::S3::Endpoints::ListObjectsV2.build(context)
|
|
199
|
-
when :list_parts
|
|
200
|
-
Aws::S3::Endpoints::ListParts.build(context)
|
|
201
|
-
when :put_bucket_accelerate_configuration
|
|
202
|
-
Aws::S3::Endpoints::PutBucketAccelerateConfiguration.build(context)
|
|
203
|
-
when :put_bucket_acl
|
|
204
|
-
Aws::S3::Endpoints::PutBucketAcl.build(context)
|
|
205
|
-
when :put_bucket_analytics_configuration
|
|
206
|
-
Aws::S3::Endpoints::PutBucketAnalyticsConfiguration.build(context)
|
|
207
|
-
when :put_bucket_cors
|
|
208
|
-
Aws::S3::Endpoints::PutBucketCors.build(context)
|
|
209
|
-
when :put_bucket_encryption
|
|
210
|
-
Aws::S3::Endpoints::PutBucketEncryption.build(context)
|
|
211
|
-
when :put_bucket_intelligent_tiering_configuration
|
|
212
|
-
Aws::S3::Endpoints::PutBucketIntelligentTieringConfiguration.build(context)
|
|
213
|
-
when :put_bucket_inventory_configuration
|
|
214
|
-
Aws::S3::Endpoints::PutBucketInventoryConfiguration.build(context)
|
|
215
|
-
when :put_bucket_lifecycle
|
|
216
|
-
Aws::S3::Endpoints::PutBucketLifecycle.build(context)
|
|
217
|
-
when :put_bucket_lifecycle_configuration
|
|
218
|
-
Aws::S3::Endpoints::PutBucketLifecycleConfiguration.build(context)
|
|
219
|
-
when :put_bucket_logging
|
|
220
|
-
Aws::S3::Endpoints::PutBucketLogging.build(context)
|
|
221
|
-
when :put_bucket_metrics_configuration
|
|
222
|
-
Aws::S3::Endpoints::PutBucketMetricsConfiguration.build(context)
|
|
223
|
-
when :put_bucket_notification
|
|
224
|
-
Aws::S3::Endpoints::PutBucketNotification.build(context)
|
|
225
|
-
when :put_bucket_notification_configuration
|
|
226
|
-
Aws::S3::Endpoints::PutBucketNotificationConfiguration.build(context)
|
|
227
|
-
when :put_bucket_ownership_controls
|
|
228
|
-
Aws::S3::Endpoints::PutBucketOwnershipControls.build(context)
|
|
229
|
-
when :put_bucket_policy
|
|
230
|
-
Aws::S3::Endpoints::PutBucketPolicy.build(context)
|
|
231
|
-
when :put_bucket_replication
|
|
232
|
-
Aws::S3::Endpoints::PutBucketReplication.build(context)
|
|
233
|
-
when :put_bucket_request_payment
|
|
234
|
-
Aws::S3::Endpoints::PutBucketRequestPayment.build(context)
|
|
235
|
-
when :put_bucket_tagging
|
|
236
|
-
Aws::S3::Endpoints::PutBucketTagging.build(context)
|
|
237
|
-
when :put_bucket_versioning
|
|
238
|
-
Aws::S3::Endpoints::PutBucketVersioning.build(context)
|
|
239
|
-
when :put_bucket_website
|
|
240
|
-
Aws::S3::Endpoints::PutBucketWebsite.build(context)
|
|
241
|
-
when :put_object
|
|
242
|
-
Aws::S3::Endpoints::PutObject.build(context)
|
|
243
|
-
when :put_object_acl
|
|
244
|
-
Aws::S3::Endpoints::PutObjectAcl.build(context)
|
|
245
|
-
when :put_object_legal_hold
|
|
246
|
-
Aws::S3::Endpoints::PutObjectLegalHold.build(context)
|
|
247
|
-
when :put_object_lock_configuration
|
|
248
|
-
Aws::S3::Endpoints::PutObjectLockConfiguration.build(context)
|
|
249
|
-
when :put_object_retention
|
|
250
|
-
Aws::S3::Endpoints::PutObjectRetention.build(context)
|
|
251
|
-
when :put_object_tagging
|
|
252
|
-
Aws::S3::Endpoints::PutObjectTagging.build(context)
|
|
253
|
-
when :put_public_access_block
|
|
254
|
-
Aws::S3::Endpoints::PutPublicAccessBlock.build(context)
|
|
255
|
-
when :restore_object
|
|
256
|
-
Aws::S3::Endpoints::RestoreObject.build(context)
|
|
257
|
-
when :select_object_content
|
|
258
|
-
Aws::S3::Endpoints::SelectObjectContent.build(context)
|
|
259
|
-
when :upload_part
|
|
260
|
-
Aws::S3::Endpoints::UploadPart.build(context)
|
|
261
|
-
when :upload_part_copy
|
|
262
|
-
Aws::S3::Endpoints::UploadPartCopy.build(context)
|
|
263
|
-
when :write_get_object_response
|
|
264
|
-
Aws::S3::Endpoints::WriteGetObjectResponse.build(context)
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
79
|
end
|
|
268
80
|
|
|
269
81
|
def add_handlers(handlers, _config)
|