aws-sdk-s3 1.109.0 → 1.156.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.rb +57 -0
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +241 -0
- data/lib/aws-sdk-s3/bucket.rb +585 -110
- data/lib/aws-sdk-s3/bucket_acl.rb +28 -6
- data/lib/aws-sdk-s3/bucket_cors.rb +34 -10
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +34 -10
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +34 -10
- data/lib/aws-sdk-s3/bucket_logging.rb +35 -6
- data/lib/aws-sdk-s3/bucket_notification.rb +12 -6
- data/lib/aws-sdk-s3/bucket_policy.rb +78 -10
- data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +28 -6
- data/lib/aws-sdk-s3/bucket_tagging.rb +34 -10
- data/lib/aws-sdk-s3/bucket_versioning.rb +72 -14
- data/lib/aws-sdk-s3/bucket_website.rb +34 -10
- data/lib/aws-sdk-s3/client.rb +7900 -3252
- data/lib/aws-sdk-s3/client_api.rb +706 -228
- data/lib/aws-sdk-s3/customizations/bucket.rb +23 -47
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/object.rb +97 -21
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +10 -0
- data/lib/aws-sdk-s3/encryption/client.rb +6 -2
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +6 -2
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
- 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 +2689 -0
- 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 +170 -45
- data/lib/aws-sdk-s3/file_uploader.rb +11 -4
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +30 -11
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +46 -17
- data/lib/aws-sdk-s3/multipart_upload.rb +194 -19
- data/lib/aws-sdk-s3/multipart_upload_part.rb +280 -30
- data/lib/aws-sdk-s3/object.rb +1753 -266
- data/lib/aws-sdk-s3/object_acl.rb +49 -13
- data/lib/aws-sdk-s3/object_copier.rb +7 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +46 -22
- data/lib/aws-sdk-s3/object_summary.rb +1497 -221
- data/lib/aws-sdk-s3/object_version.rb +383 -58
- data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -50
- data/lib/aws-sdk-s3/plugins/access_grants.rb +114 -0
- data/lib/aws-sdk-s3/plugins/arn.rb +0 -184
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
- data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -49
- data/lib/aws-sdk-s3/plugins/endpoints.rb +274 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +97 -0
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +53 -16
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +6 -3
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +42 -126
- data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +23 -2
- data/lib/aws-sdk-s3/presigned_post.rb +99 -78
- data/lib/aws-sdk-s3/presigner.rb +28 -37
- data/lib/aws-sdk-s3/resource.rb +89 -13
- data/lib/aws-sdk-s3/types.rb +6544 -4909
- data/lib/aws-sdk-s3.rb +5 -1
- data/sig/bucket.rbs +212 -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 +2381 -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 +110 -0
- data/sig/multipart_upload_part.rbs +105 -0
- data/sig/object.rbs +442 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +334 -0
- data/sig/object_version.rbs +137 -0
- data/sig/resource.rbs +127 -0
- data/sig/types.rbs +2568 -0
- data/sig/waiters.rbs +95 -0
- metadata +50 -16
- data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/multi_region_access_point_arn.rb +0 -68
- data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -74
- data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +0 -25
@@ -0,0 +1,274 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# WARNING ABOUT GENERATED CODE
|
4
|
+
#
|
5
|
+
# This file is generated. See the contributing guide for more information:
|
6
|
+
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
|
7
|
+
#
|
8
|
+
# WARNING ABOUT GENERATED CODE
|
9
|
+
|
10
|
+
|
11
|
+
module Aws::S3
|
12
|
+
module Plugins
|
13
|
+
class Endpoints < Seahorse::Client::Plugin
|
14
|
+
option(
|
15
|
+
:endpoint_provider,
|
16
|
+
doc_type: 'Aws::S3::EndpointProvider',
|
17
|
+
rbs_type: 'untyped',
|
18
|
+
docstring: 'The endpoint provider used to resolve endpoints. Any '\
|
19
|
+
'object that responds to `#resolve_endpoint(parameters)` '\
|
20
|
+
'where `parameters` is a Struct similar to '\
|
21
|
+
'`Aws::S3::EndpointParameters`'
|
22
|
+
) do |cfg|
|
23
|
+
Aws::S3::EndpointProvider.new
|
24
|
+
end
|
25
|
+
|
26
|
+
option(
|
27
|
+
:disable_s3_express_session_auth,
|
28
|
+
doc_type: 'Boolean',
|
29
|
+
default: nil,
|
30
|
+
docstring: "Parameter to indicate whether S3Express session auth should be disabled")
|
31
|
+
|
32
|
+
# @api private
|
33
|
+
class Handler < Seahorse::Client::Handler
|
34
|
+
def call(context)
|
35
|
+
unless context[:discovered_endpoint]
|
36
|
+
params = parameters_for_operation(context)
|
37
|
+
endpoint = context.config.endpoint_provider.resolve_endpoint(params)
|
38
|
+
|
39
|
+
context.http_request.endpoint = endpoint.url
|
40
|
+
apply_endpoint_headers(context, endpoint.headers)
|
41
|
+
|
42
|
+
context[:endpoint_params] = params
|
43
|
+
context[:endpoint_properties] = endpoint.properties
|
44
|
+
end
|
45
|
+
|
46
|
+
context[:auth_scheme] =
|
47
|
+
Aws::Endpoints.resolve_auth_scheme(context, endpoint)
|
48
|
+
|
49
|
+
@handler.call(context)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def apply_endpoint_headers(context, headers)
|
55
|
+
headers.each do |key, values|
|
56
|
+
value = values
|
57
|
+
.compact
|
58
|
+
.map { |s| Seahorse::Util.escape_header_list_string(s.to_s) }
|
59
|
+
.join(',')
|
60
|
+
|
61
|
+
context.http_request.headers[key] = value
|
62
|
+
end
|
63
|
+
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
|
+
end
|
268
|
+
|
269
|
+
def add_handlers(handlers, _config)
|
270
|
+
handlers.add(Handler, step: :build, priority: 75)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
@@ -16,7 +16,8 @@ module Aws
|
|
16
16
|
|
17
17
|
def call(context)
|
18
18
|
body = context.http_request.body
|
19
|
-
if body.respond_to?(:size) && body.size > 0
|
19
|
+
if body.respond_to?(:size) && body.size > 0 &&
|
20
|
+
!context[:use_accelerate_endpoint]
|
20
21
|
context.http_request.headers['expect'] = '100-continue'
|
21
22
|
end
|
22
23
|
@handler.call(context)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
module S3
|
5
|
+
module Plugins
|
6
|
+
# @api private
|
7
|
+
class ExpressSessionAuth < Seahorse::Client::Plugin
|
8
|
+
# This should be s3_disable_express_auth instead
|
9
|
+
# But this is not a built in. We're overwriting the generated value
|
10
|
+
option(:disable_s3_express_session_auth,
|
11
|
+
default: false,
|
12
|
+
doc_type: 'Boolean',
|
13
|
+
docstring: <<-DOCS) do |cfg|
|
14
|
+
When `true`, S3 Express session authentication is disabled.
|
15
|
+
DOCS
|
16
|
+
resolve_disable_s3_express_session_auth(cfg)
|
17
|
+
end
|
18
|
+
|
19
|
+
option(:express_credentials_provider,
|
20
|
+
doc_type: 'Aws::S3::ExpressCredentialsProvider',
|
21
|
+
rbs_type: 'untyped',
|
22
|
+
docstring: <<-DOCS) do |_cfg|
|
23
|
+
Credential Provider for S3 Express endpoints. Manages credentials
|
24
|
+
for different buckets.
|
25
|
+
DOCS
|
26
|
+
Aws::S3::ExpressCredentialsProvider.new
|
27
|
+
end
|
28
|
+
|
29
|
+
# @api private
|
30
|
+
class Handler < Seahorse::Client::Handler
|
31
|
+
def call(context)
|
32
|
+
if (props = context[:endpoint_properties])
|
33
|
+
# S3 Express endpoint - turn off md5 and enable crc32 default
|
34
|
+
if props['backend'] == 'S3Express'
|
35
|
+
if context.operation_name == :put_object || checksum_required?(context)
|
36
|
+
context[:default_request_checksum_algorithm] = 'CRC32'
|
37
|
+
end
|
38
|
+
context[:s3_express_endpoint] = true
|
39
|
+
end
|
40
|
+
|
41
|
+
# if s3 express auth, use new credentials and sign additional header
|
42
|
+
if context[:auth_scheme]['name'] == 'sigv4-s3express' &&
|
43
|
+
!context.config.disable_s3_express_session_auth
|
44
|
+
bucket = context.params[:bucket]
|
45
|
+
credentials_provider = context.config.express_credentials_provider
|
46
|
+
credentials = credentials_provider.express_credentials_for(bucket)
|
47
|
+
context[:sigv4_credentials] = credentials # Sign will use this
|
48
|
+
end
|
49
|
+
end
|
50
|
+
with_metric(credentials) { @handler.call(context) }
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def with_metric(credentials, &block)
|
56
|
+
return block.call unless credentials
|
57
|
+
|
58
|
+
Aws::Plugins::UserAgent.metric('S3_EXPRESS_BUCKET', &block)
|
59
|
+
end
|
60
|
+
|
61
|
+
def checksum_required?(context)
|
62
|
+
context.operation.http_checksum_required ||
|
63
|
+
(context.operation.http_checksum &&
|
64
|
+
context.operation.http_checksum['requestChecksumRequired'])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
handler(Handler)
|
69
|
+
|
70
|
+
# Optimization - sets this client as the client to create sessions.
|
71
|
+
def after_initialize(client)
|
72
|
+
provider = client.config.express_credentials_provider
|
73
|
+
provider.client = client unless provider.client
|
74
|
+
end
|
75
|
+
|
76
|
+
class << self
|
77
|
+
private
|
78
|
+
|
79
|
+
def resolve_disable_s3_express_session_auth(cfg)
|
80
|
+
value = ENV['AWS_S3_DISABLE_EXPRESS_SESSION_AUTH'] ||
|
81
|
+
Aws.shared_config.s3_disable_express_session_auth(profile: cfg.profile) ||
|
82
|
+
'false'
|
83
|
+
value = Aws::Util.str_2_bool(value)
|
84
|
+
# Raise if provided value is not true or false
|
85
|
+
if value.nil?
|
86
|
+
raise ArgumentError,
|
87
|
+
'Must provide either `true` or `false` for the '\
|
88
|
+
'`s3_disable_express_session_auth` profile option or for '\
|
89
|
+
"ENV['AWS_S3_DISABLE_EXPRESS_SESSION_AUTH']."
|
90
|
+
end
|
91
|
+
value
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -15,22 +15,67 @@ module Aws
|
|
15
15
|
|
16
16
|
def call(context)
|
17
17
|
@handler.call(context).on(200) do |response|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
return response if streaming_output?(context.operation.output)
|
19
|
+
|
20
|
+
error = check_for_error(context)
|
21
|
+
return response unless error
|
22
|
+
|
23
|
+
context.http_response.status_code = 500
|
24
|
+
response.data = nil
|
25
|
+
response.error = error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Streaming outputs are not subject to 200 errors.
|
32
|
+
def streaming_output?(output)
|
33
|
+
if (payload = output[:payload_member])
|
34
|
+
# checking ref and shape
|
35
|
+
payload['streaming'] || payload.shape['streaming'] ||
|
36
|
+
payload.eventstream
|
37
|
+
else
|
38
|
+
false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Checks if the output shape is a structure shape and has members that
|
43
|
+
# are in the body for the case of a payload and a normal structure. A
|
44
|
+
# non-structure shape will not have members in the body. In the case
|
45
|
+
# of a string or blob, the body contents would have been checked first
|
46
|
+
# before this method is called in incomplete_xml_body?.
|
47
|
+
def members_in_body?(output)
|
48
|
+
shape =
|
49
|
+
if output[:payload_member]
|
50
|
+
output[:payload_member].shape
|
51
|
+
else
|
52
|
+
output.shape
|
22
53
|
end
|
54
|
+
|
55
|
+
if structure_shape?(shape)
|
56
|
+
shape.members.any? { |_, k| k.location.nil? }
|
57
|
+
else
|
58
|
+
false
|
23
59
|
end
|
24
60
|
end
|
25
61
|
|
62
|
+
def structure_shape?(shape)
|
63
|
+
shape.is_a?(Seahorse::Model::Shapes::StructureShape)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Must have a member in the body and have the start of an XML Tag.
|
67
|
+
# Other incomplete xml bodies will result in an XML ParsingError.
|
68
|
+
def incomplete_xml_body?(xml, output)
|
69
|
+
members_in_body?(output) && !xml.match(/<\w/)
|
70
|
+
end
|
71
|
+
|
26
72
|
def check_for_error(context)
|
27
73
|
xml = context.http_response.body_contents
|
28
|
-
if xml.match(
|
74
|
+
if xml.match(/\?>\s*<Error>/)
|
29
75
|
error_code = xml.match(/<Code>(.+?)<\/Code>/)[1]
|
30
76
|
error_message = xml.match(/<Message>(.+?)<\/Message>/)[1]
|
31
77
|
S3::Errors.error_class(error_code).new(context, error_message)
|
32
|
-
elsif
|
33
|
-
# Other incomplete xml bodies will result in XML ParsingError
|
78
|
+
elsif incomplete_xml_body?(xml, context.operation.output)
|
34
79
|
Seahorse::Client::NetworkingError.new(
|
35
80
|
S3::Errors
|
36
81
|
.error_class('InternalError')
|
@@ -40,15 +85,7 @@ module Aws
|
|
40
85
|
end
|
41
86
|
end
|
42
87
|
|
43
|
-
handler(
|
44
|
-
Handler,
|
45
|
-
step: :sign,
|
46
|
-
operations: [
|
47
|
-
:complete_multipart_upload,
|
48
|
-
:copy_object,
|
49
|
-
:upload_part_copy,
|
50
|
-
]
|
51
|
-
)
|
88
|
+
handler(Handler, step: :sign)
|
52
89
|
end
|
53
90
|
end
|
54
91
|
end
|
@@ -16,40 +16,17 @@ Defaults to `legacy` mode which uses the global endpoint.
|
|
16
16
|
resolve_iad_regional_endpoint(cfg)
|
17
17
|
end
|
18
18
|
|
19
|
-
def add_handlers(handlers, config)
|
20
|
-
# only modify non-custom endpoints
|
21
|
-
if config.regional_endpoint && config.region == 'us-east-1'
|
22
|
-
handlers.add(Handler)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# @api private
|
27
|
-
class Handler < Seahorse::Client::Handler
|
28
|
-
|
29
|
-
def call(context)
|
30
|
-
# WriteGetObjectResponse does not have a global endpoint
|
31
|
-
# ARNs are regionalized, so don't touch those either.
|
32
|
-
if context.operation.name != 'WriteGetObjectResponse' &&
|
33
|
-
context.config.s3_us_east_1_regional_endpoint == 'legacy' &&
|
34
|
-
!context.metadata[:s3_arn]
|
35
|
-
host = context.http_request.endpoint.host
|
36
|
-
legacy_host = IADRegionalEndpoint.legacy_host(host)
|
37
|
-
context.http_request.endpoint.host = legacy_host
|
38
|
-
end
|
39
|
-
@handler.call(context)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.legacy_host(host)
|
45
|
-
host.sub(".us-east-1", '')
|
46
|
-
end
|
47
|
-
|
48
19
|
private
|
49
20
|
|
50
21
|
def self.resolve_iad_regional_endpoint(cfg)
|
22
|
+
default_mode_value =
|
23
|
+
if cfg.respond_to?(:defaults_mode_config_resolver)
|
24
|
+
cfg.defaults_mode_config_resolver.resolve(:s3_us_east_1_regional_endpoint)
|
25
|
+
end
|
26
|
+
|
51
27
|
mode = ENV['AWS_S3_US_EAST_1_REGIONAL_ENDPOINT'] ||
|
52
28
|
Aws.shared_config.s3_us_east_1_regional_endpoint(profile: cfg.profile) ||
|
29
|
+
default_mode_value ||
|
53
30
|
'legacy'
|
54
31
|
mode = mode.downcase
|
55
32
|
unless %w(legacy regional).include?(mode)
|
@@ -22,7 +22,9 @@ module Aws
|
|
22
22
|
|
23
23
|
def populate_location_constraint(params, region)
|
24
24
|
params[:create_bucket_configuration] ||= {}
|
25
|
-
params[:create_bucket_configuration][:
|
25
|
+
unless params[:create_bucket_configuration][:location]
|
26
|
+
params[:create_bucket_configuration][:location_constraint] ||= region
|
27
|
+
end
|
26
28
|
end
|
27
29
|
|
28
30
|
end
|
@@ -22,9 +22,12 @@ module Aws
|
|
22
22
|
CHUNK_SIZE = 1 * 1024 * 1024 # one MB
|
23
23
|
|
24
24
|
def call(context)
|
25
|
-
|
26
|
-
|
27
|
-
context.http_request.
|
25
|
+
if !context[:checksum_algorithms] && # skip in favor of flexible checksum
|
26
|
+
!context[:s3_express_endpoint] # s3 express endpoints do not support md5
|
27
|
+
body = context.http_request.body
|
28
|
+
if body.respond_to?(:size) && body.size > 0
|
29
|
+
context.http_request.headers['Content-Md5'] ||= md5(body)
|
30
|
+
end
|
28
31
|
end
|
29
32
|
@handler.call(context)
|
30
33
|
end
|