Skip to content

Commit 85b78d7

Browse files
committed
PR feedback
1 parent 573facd commit 85b78d7

24 files changed

+92
-117
lines changed

aws-runtime/aws-config/api/aws-config.api

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,6 @@ public final class aws/sdk/kotlin/runtime/auth/credentials/InvalidSsoTokenExcept
9797
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
9898
}
9999

100-
public final class aws/sdk/kotlin/runtime/auth/credentials/LazilyInitializedCredentialsProvider : aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider {
101-
public fun <init> (Ljava/lang/String;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;Lkotlin/jvm/functions/Function0;)V
102-
public synthetic fun <init> (Ljava/lang/String;Laws/smithy/kotlin/runtime/businessmetrics/BusinessMetric;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
103-
public fun resolve (Laws/smithy/kotlin/runtime/collections/Attributes;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
104-
public fun toString ()Ljava/lang/String;
105-
}
106-
107100
public final class aws/sdk/kotlin/runtime/auth/credentials/ProcessCredentialsProvider : aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider {
108101
public fun <init> (Ljava/lang/String;Laws/smithy/kotlin/runtime/util/PlatformProvider;JJ)V
109102
public synthetic fun <init> (Ljava/lang/String;Laws/smithy/kotlin/runtime/util/PlatformProvider;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -216,6 +209,17 @@ public final class aws/sdk/kotlin/runtime/auth/credentials/StsWebIdentityCredent
216209
public static synthetic fun fromEnvironment-TUY-ock$default (Laws/sdk/kotlin/runtime/auth/credentials/StsWebIdentityCredentialsProvider$Companion;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLaws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/http/engine/HttpClientEngine;ILjava/lang/Object;)Laws/sdk/kotlin/runtime/auth/credentials/StsWebIdentityCredentialsProvider;
217210
}
218211

212+
public final class aws/sdk/kotlin/runtime/auth/credentials/StsWebIdentityProvider : aws/smithy/kotlin/runtime/auth/awscredentials/CloseableCredentialsProvider {
213+
public fun <init> ()V
214+
public fun <init> (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/http/engine/HttpClientEngine;Ljava/lang/String;)V
215+
public synthetic fun <init> (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/http/engine/HttpClientEngine;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
216+
public fun close ()V
217+
public final fun getHttpClient ()Laws/smithy/kotlin/runtime/http/engine/HttpClientEngine;
218+
public final fun getPlatformProvider ()Laws/smithy/kotlin/runtime/util/PlatformProvider;
219+
public final fun getRegion ()Ljava/lang/String;
220+
public fun resolve (Laws/smithy/kotlin/runtime/collections/Attributes;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
221+
}
222+
219223
public final class aws/sdk/kotlin/runtime/auth/credentials/SystemPropertyCredentialsProvider : aws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider {
220224
public fun <init> ()V
221225
public fun <init> (Lkotlin/jvm/functions/Function1;)V

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/DefaultChainCredentialsProvider.kt

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package aws.sdk.kotlin.runtime.auth.credentials
88
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
99
import aws.sdk.kotlin.runtime.config.imds.ImdsClient
1010
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
11+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1112
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1213
import aws.smithy.kotlin.runtime.collections.Attributes
1314
import aws.smithy.kotlin.runtime.http.engine.DefaultHttpEngine
@@ -53,17 +54,8 @@ public class DefaultChainCredentialsProvider constructor(
5354
private val chain = CredentialsProviderChain(
5455
SystemPropertyCredentialsProvider(platformProvider::getProperty),
5556
EnvironmentCredentialsProvider(platformProvider::getenv),
56-
LazilyInitializedCredentialsProvider(
57-
"EnvironmentStsWebIdentityCredentialsProvider",
58-
AwsBusinessMetric.Credentials.CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN,
59-
) {
60-
// STS web identity provider can be constructed from either the profile OR 100% from the environment
61-
StsWebIdentityCredentialsProvider.fromEnvironment(
62-
platformProvider = platformProvider,
63-
httpClient = httpClient,
64-
region = region,
65-
)
66-
},
57+
// STS web identity provider can be constructed from either the profile OR 100% from the environment
58+
StsWebIdentityProvider(platformProvider = platformProvider, httpClient = engine, region = region),
6759
ProfileCredentialsProvider(profileName = profileName, platformProvider = platformProvider, httpClient = engine, region = region),
6860
EcsCredentialsProvider(platformProvider, engine),
6961
ImdsCredentialsProvider(
@@ -90,3 +82,20 @@ public class DefaultChainCredentialsProvider constructor(
9082

9183
override fun toString(): String = this.simpleClassName + ": " + this.chain
9284
}
85+
86+
/**
87+
* Wrapper around [StsWebIdentityCredentialsProvider] that delays any exceptions until [resolve] is invoked.
88+
* This allows it to be part of the default chain and any failures result in the chain to move onto the next provider.
89+
*/
90+
public class StsWebIdentityProvider(
91+
public val platformProvider: PlatformProvider = PlatformProvider.System,
92+
public val httpClient: HttpClientEngine? = null,
93+
public val region: String? = null,
94+
) : CloseableCredentialsProvider {
95+
override suspend fun resolve(attributes: Attributes): Credentials {
96+
val wrapped = StsWebIdentityCredentialsProvider.fromEnvironment(platformProvider = platformProvider, httpClient = httpClient, region = region)
97+
return wrapped.resolve(attributes).withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN)
98+
}
99+
100+
override fun close() { }
101+
}

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/EcsCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package aws.sdk.kotlin.runtime.auth.credentials
88
import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials
99
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
1010
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
11-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
11+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1212
import aws.smithy.kotlin.runtime.ErrorMetadata
1313
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1414
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint
@@ -113,7 +113,7 @@ public class EcsCredentialsProvider(
113113

114114
logger.debug { "obtained credentials from container metadata service; expiration=${creds.expiration?.format(TimestampFormat.ISO_8601)}" }
115115

116-
return creds.emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_HTTP)
116+
return creds.withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_HTTP)
117117
}
118118

119119
private suspend fun loadAuthToken(): String? {

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/EnvironmentCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package aws.sdk.kotlin.runtime.auth.credentials
88
import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials
99
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
1010
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
11-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
11+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1212
import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials
1313
import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider
1414
import aws.smithy.kotlin.runtime.auth.awscredentials.simpleClassName
@@ -45,7 +45,7 @@ public class EnvironmentCredentialsProvider(
4545
sessionToken = getEnv(SESSION_TOKEN),
4646
providerName = PROVIDER_NAME,
4747
accountId = getEnv(ACCOUNT_ID),
48-
).emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_ENV_VARS)
48+
).withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_ENV_VARS)
4949
}
5050

5151
override fun toString(): String = this.simpleClassName

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/ImdsCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import aws.sdk.kotlin.runtime.config.imds.EC2MetadataError
1010
import aws.sdk.kotlin.runtime.config.imds.ImdsClient
1111
import aws.sdk.kotlin.runtime.config.imds.InstanceMetadataProvider
1212
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
13-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
13+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1414
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1515
import aws.smithy.kotlin.runtime.collections.Attributes
1616
import aws.smithy.kotlin.runtime.config.resolve
@@ -108,7 +108,7 @@ public class ImdsCredentialsProvider(
108108
resp.sessionToken,
109109
resp.expiration,
110110
PROVIDER_NAME,
111-
).emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_IMDS)
111+
).withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_IMDS)
112112

113113
creds.also {
114114
mu.withLock { previousCredentials = it }

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/LazilyInitializedCredentialsProvider.kt

Lines changed: 0 additions & 33 deletions
This file was deleted.

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/ProcessCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package aws.sdk.kotlin.runtime.auth.credentials
66

77
import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials
88
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
9-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
9+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1010
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1111
import aws.smithy.kotlin.runtime.collections.Attributes
1212
import aws.smithy.kotlin.runtime.serde.json.JsonDeserializer
@@ -75,7 +75,7 @@ public class ProcessCredentialsProvider(
7575
resp.expiration ?: Instant.MAX_VALUE,
7676
PROVIDER_NAME,
7777
resp.accountId,
78-
).emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_PROCESS)
78+
).withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_PROCESS)
7979
}
8080
else -> throw CredentialsProviderException("Credentials response was not of expected format")
8181
}

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/ProfileCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import aws.sdk.kotlin.runtime.config.imds.ImdsClient
1616
import aws.sdk.kotlin.runtime.config.profile.AwsConfigurationSource
1717
import aws.sdk.kotlin.runtime.config.profile.loadAwsSharedConfig
1818
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
19-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetrics
19+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetrics
2020
import aws.sdk.kotlin.runtime.region.resolveRegion
2121
import aws.smithy.kotlin.runtime.auth.awscredentials.*
2222
import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetric
@@ -148,7 +148,7 @@ public class ProfileCredentialsProvider @InternalSdkApi constructor(
148148
}
149149

150150
logger.debug { "Obtained credentials from profile; expiration=${creds.expiration?.format(TimestampFormat.ISO_8601)}" }
151-
return creds.emitBusinessMetrics(credentialsBusinessMetrics)
151+
return creds.withBusinessMetrics(credentialsBusinessMetrics)
152152
}
153153

154154
override fun close() {

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/SsoCredentialsProvider.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials
99
import aws.sdk.kotlin.runtime.auth.credentials.internal.sso.SsoClient
1010
import aws.sdk.kotlin.runtime.auth.credentials.internal.sso.getRoleCredentials
1111
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
12-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
12+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1313
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1414
import aws.smithy.kotlin.runtime.client.SdkClientOption
1515
import aws.smithy.kotlin.runtime.collections.Attributes
@@ -129,9 +129,9 @@ public class SsoCredentialsProvider public constructor(
129129
)
130130

131131
return if (ssoTokenProvider != null) {
132-
creds.emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_SSO)
132+
creds.withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_SSO)
133133
} else {
134-
creds.emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_SSO_LEGACY)
134+
creds.withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_SSO_LEGACY)
135135
}
136136
}
137137

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/StsAssumeRoleCredentialsProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import aws.sdk.kotlin.runtime.auth.credentials.internal.sts.model.RegionDisabled
1414
import aws.sdk.kotlin.runtime.auth.credentials.internal.sts.model.Tag
1515
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
1616
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric
17-
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.emitBusinessMetric
17+
import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric
1818
import aws.smithy.kotlin.runtime.auth.awscredentials.*
1919
import aws.smithy.kotlin.runtime.client.SdkClientOption
2020
import aws.smithy.kotlin.runtime.collections.Attributes
@@ -148,7 +148,7 @@ public class StsAssumeRoleCredentialsProvider(
148148
expiration = roleCredentials.expiration,
149149
providerName = PROVIDER_NAME,
150150
accountId = accountId,
151-
).emitBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_STS_ASSUME_ROLE)
151+
).withBusinessMetric(AwsBusinessMetric.Credentials.CREDENTIALS_STS_ASSUME_ROLE)
152152
}
153153

154154
override fun toString(): String = this.simpleClassName

0 commit comments

Comments
 (0)