5 5 | import aws.sdk.kotlin.runtime.auth.credentials.DefaultChainCredentialsProvider
|
6 6 | import aws.sdk.kotlin.runtime.auth.credentials.internal.manage
|
7 7 | import aws.sdk.kotlin.runtime.config.AbstractAwsSdkClientFactory
|
8 8 | import aws.sdk.kotlin.runtime.config.AwsSdkClientConfig
|
9 9 | import aws.sdk.kotlin.runtime.config.endpoints.resolveEndpointUrl
|
10 10 | import aws.sdk.kotlin.runtime.config.profile.AwsProfile
|
11 11 | import aws.sdk.kotlin.runtime.config.profile.AwsSharedConfig
|
12 12 | import aws.sdk.kotlin.runtime.http.retries.AwsRetryPolicy
|
13 13 | import aws.sdk.kotlin.runtime.region.DefaultRegionProviderChain
|
14 14 | import aws.sdk.kotlin.runtime.region.resolveRegion
|
15 + | import aws.sdk.kotlin.runtime.region.validateRegion
|
15 16 | import aws.sdk.kotlin.services.s3.auth.DefaultS3AuthSchemeProvider
|
16 17 | import aws.sdk.kotlin.services.s3.auth.S3AuthSchemeProvider
|
17 18 | import aws.sdk.kotlin.services.s3.endpoints.DefaultS3EndpointProvider
|
18 19 | import aws.sdk.kotlin.services.s3.endpoints.S3EndpointParameters
|
19 20 | import aws.sdk.kotlin.services.s3.endpoints.S3EndpointProvider
|
20 21 | import aws.sdk.kotlin.services.s3.express.DefaultS3ExpressCredentialsProvider
|
21 22 | import aws.sdk.kotlin.services.s3.internal.finalizeS3Config
|
22 23 | import aws.sdk.kotlin.services.s3.model.AbortMultipartUploadRequest
|
23 24 | import aws.sdk.kotlin.services.s3.model.AbortMultipartUploadResponse
|
24 25 | import aws.sdk.kotlin.services.s3.model.CompleteMultipartUploadRequest
|
25 26 | import aws.sdk.kotlin.services.s3.model.CompleteMultipartUploadResponse
|
26 27 | import aws.sdk.kotlin.services.s3.model.CopyObjectRequest
|
27 28 | import aws.sdk.kotlin.services.s3.model.CopyObjectResponse
|
28 29 | import aws.sdk.kotlin.services.s3.model.CreateBucketMetadataConfigurationRequest
|
29 30 | import aws.sdk.kotlin.services.s3.model.CreateBucketMetadataConfigurationResponse
|
30 31 | import aws.sdk.kotlin.services.s3.model.CreateBucketMetadataTableConfigurationRequest
|
31 32 | import aws.sdk.kotlin.services.s3.model.CreateBucketMetadataTableConfigurationResponse
|
32 33 | import aws.sdk.kotlin.services.s3.model.CreateBucketRequest
|
33 34 | import aws.sdk.kotlin.services.s3.model.CreateBucketResponse
|
34 35 | import aws.sdk.kotlin.services.s3.model.CreateMultipartUploadRequest
|
35 36 | import aws.sdk.kotlin.services.s3.model.CreateMultipartUploadResponse
|
36 37 | import aws.sdk.kotlin.services.s3.model.CreateSessionRequest
|
37 38 | import aws.sdk.kotlin.services.s3.model.CreateSessionResponse
|
38 39 | import aws.sdk.kotlin.services.s3.model.DeleteBucketAnalyticsConfigurationRequest
|
39 40 | import aws.sdk.kotlin.services.s3.model.DeleteBucketAnalyticsConfigurationResponse
|
40 41 | import aws.sdk.kotlin.services.s3.model.DeleteBucketCorsRequest
|
41 42 | import aws.sdk.kotlin.services.s3.model.DeleteBucketCorsResponse
|
42 43 | import aws.sdk.kotlin.services.s3.model.DeleteBucketEncryptionRequest
|
43 44 | import aws.sdk.kotlin.services.s3.model.DeleteBucketEncryptionResponse
|
44 45 | import aws.sdk.kotlin.services.s3.model.DeleteBucketIntelligentTieringConfigurationRequest
|
287 288 |
|
288 289 | public companion object : AbstractAwsSdkClientFactory<Config, Config.Builder, S3Client, Builder>()
|
289 290 | {
|
290 291 | @JvmStatic
|
291 292 | override fun builder(): Builder = Builder()
|
292 293 |
|
293 294 | override fun finalizeConfig(builder: Builder) {
|
294 295 | super.finalizeConfig(builder)
|
295 296 | builder.config.interceptors.add(0, ClockSkewInterceptor())
|
296 297 | }
|
297 298 |
|
298 299 | override suspend fun finalizeEnvironmentalConfig(builder: Builder, sharedConfig: LazyAsyncValue<AwsSharedConfig>, activeProfile: LazyAsyncValue<AwsProfile>) {
|
299 300 | super.finalizeEnvironmentalConfig(builder, sharedConfig, activeProfile)
|
300 301 | builder.config.endpointUrl = builder.config.endpointUrl ?: resolveEndpointUrl(
|
301 302 | sharedConfig,
|
302 303 | "S3",
|
303 304 | "S3",
|
304 305 | "s3",
|
305 306 | )
|
306 307 | finalizeS3Config(builder, sharedConfig)
|
307 308 | }
|
308 309 | }
|
309 310 |
|
310 311 | public class Builder internal constructor(): AbstractSdkClientBuilder<Config, Config.Builder, S3Client>() {
|
311 312 | override val config: Config.Builder = Config.Builder()
|
312 313 | override fun newClient(config: Config): S3Client = DefaultS3Client(config)
|
313 314 | }
|
314 315 |
|
315 316 | public class Config private constructor(builder: Builder) : AwsSdkClientConfig, CredentialsProviderConfig, HttpAuthConfig, HttpChecksumConfig, HttpClientConfig, HttpEngineConfig by builder.buildHttpEngineConfig(), IdempotencyTokenConfig, RetryClientConfig, RetryStrategyClientConfig by builder.buildRetryStrategyClientConfig(), SdkClientConfig, SigV4aClientConfig, TelemetryConfig, TimeoutConfig {
|
316 317 | override val clientName: String = builder.clientName
|
317 - | override val region: String? = builder.region ?: runBlocking { builder.regionProvider?.getRegion() ?: resolveRegion() }
|
318 + | override val region: String? = (builder.region ?: runBlocking { builder.regionProvider?.getRegion() ?: resolveRegion() })?.let { validateRegion(it) }
|
318 319 | override val regionProvider: RegionProvider = builder.regionProvider ?: DefaultRegionProviderChain()
|
319 320 | override val attemptTimeout: Duration? = builder.attemptTimeout
|
320 321 | override val authSchemePreference: kotlin.collections.List<aws.smithy.kotlin.runtime.auth.AuthSchemeId>? = builder.authSchemePreference
|
321 322 | override val authSchemes: kotlin.collections.List<aws.smithy.kotlin.runtime.http.auth.AuthScheme> = builder.authSchemes
|
322 323 | override val callTimeout: Duration? = builder.callTimeout
|
323 324 | public val continueHeaderThresholdBytes: Long? = builder.continueHeaderThresholdBytes
|
324 325 | override val credentialsProvider: CredentialsProvider = builder.credentialsProvider ?: DefaultChainCredentialsProvider(httpClient = httpClient, region = region).manage()
|
325 326 | public val disableMrap: Boolean = builder.disableMrap ?: false
|
326 327 | public val disableS3ExpressSessionAuth: Boolean = builder.disableS3ExpressSessionAuth ?: false
|
327 328 | public val enableAccelerate: Boolean = builder.enableAccelerate ?: false
|
328 329 | public val enableAwsChunked: Boolean = builder.enableAwsChunked ?: true
|
329 330 | public val endpointProvider: S3EndpointProvider = builder.endpointProvider ?: DefaultS3EndpointProvider()
|
330 331 | public val endpointUrl: Url? = builder.endpointUrl
|
331 332 | public val expressCredentialsProvider: CredentialsProvider = builder.expressCredentialsProvider ?: DefaultS3ExpressCredentialsProvider()
|
332 333 | public val forcePathStyle: Boolean = builder.forcePathStyle ?: false
|
333 334 | override val idempotencyTokenProvider: IdempotencyTokenProvider = builder.idempotencyTokenProvider ?: IdempotencyTokenProvider.Default
|
334 335 | override val interceptors: kotlin.collections.List<aws.smithy.kotlin.runtime.http.interceptors.HttpInterceptor> = builder.interceptors
|
335 336 | override val logMode: LogMode = builder.logMode ?: LogMode.Default
|
336 337 | override val requestChecksumCalculation: RequestHttpChecksumConfig = builder.requestChecksumCalculation ?: RequestHttpChecksumConfig.WHEN_SUPPORTED
|
337 338 | override val responseChecksumValidation: ResponseHttpChecksumConfig = builder.responseChecksumValidation ?: ResponseHttpChecksumConfig.WHEN_SUPPORTED
|
338 339 | override val retryPolicy: RetryPolicy<Any?> = builder.retryPolicy ?: AwsRetryPolicy.Default
|
339 340 | override val sigV4aSigningRegionSet: kotlin.collections.Set<kotlin.String>? = builder.sigV4aSigningRegionSet
|
340 341 | override val telemetryProvider: TelemetryProvider = builder.telemetryProvider ?: TelemetryProvider.Global
|
341 342 | public val useArnRegion: Boolean = builder.useArnRegion ?: false
|
342 343 | override val useDualStack: Boolean = builder.useDualStack ?: false
|
343 344 | override val useFips: Boolean = builder.useFips ?: false
|
344 345 | override val applicationId: String? = builder.applicationId
|
345 346 | public val authSchemeProvider: S3AuthSchemeProvider = builder.authSchemeProvider ?: DefaultS3AuthSchemeProvider(endpointProvider, authSchemePreference)
|
346 347 | public companion object {
|
347 348 | public inline operator fun invoke(block: Builder.() -> kotlin.Unit): Config = Builder().apply(block).build()
|