15
15
16
16
package software .amazon .awssdk .auth .credentials ;
17
17
18
+ import java .util .Optional ;
18
19
import software .amazon .awssdk .annotations .SdkPublicApi ;
19
20
import software .amazon .awssdk .auth .credentials .internal .LazyAwsCredentialsProvider ;
20
21
import software .amazon .awssdk .profiles .ProfileFile ;
22
+ import software .amazon .awssdk .profiles .ProfileFileSupplier ;
21
23
import software .amazon .awssdk .utils .SdkAutoCloseable ;
22
24
import software .amazon .awssdk .utils .ToString ;
23
25
import software .amazon .awssdk .utils .builder .CopyableBuilder ;
26
28
/**
27
29
* AWS credentials provider chain that looks for credentials in this order:
28
30
* <ol>
29
- * <li>Java System Properties - < code> aws.accessKeyId</code> and < code> aws.secretAccessKey</code> </li>
30
- * <li>Environment Variables - < code> AWS_ACCESS_KEY_ID</code> and < code> AWS_SECRET_ACCESS_KEY</code> </li>
31
+ * <li>Java System Properties - {@ code aws.accessKeyId} and {@ code aws.secretAccessKey} </li>
32
+ * <li>Environment Variables - {@ code AWS_ACCESS_KEY_ID} and {@ code AWS_SECRET_ACCESS_KEY} </li>
31
33
* <li>Web Identity Token credentials from system properties or environment variables</li>
32
34
* <li>Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI</li>
33
35
* <li>Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" environment
@@ -51,7 +53,7 @@ public final class DefaultCredentialsProvider
51
53
52
54
private final LazyAwsCredentialsProvider providerChain ;
53
55
54
- private final ProfileFile profileFile ;
56
+ private final ProfileFileSupplier profileFileSupplier ;
55
57
56
58
private final String profileName ;
57
59
@@ -63,7 +65,7 @@ public final class DefaultCredentialsProvider
63
65
* @see #builder()
64
66
*/
65
67
private DefaultCredentialsProvider (Builder builder ) {
66
- this .profileFile = builder .profileFile ;
68
+ this .profileFileSupplier = builder .profileFileSupplier ;
67
69
this .profileName = builder .profileName ;
68
70
this .reuseLastProviderEnabled = builder .reuseLastProviderEnabled ;
69
71
this .asyncCredentialUpdateEnabled = builder .asyncCredentialUpdateEnabled ;
@@ -87,21 +89,21 @@ private static LazyAwsCredentialsProvider createChain(Builder builder) {
87
89
88
90
return LazyAwsCredentialsProvider .create (() -> {
89
91
AwsCredentialsProvider [] credentialsProviders = new AwsCredentialsProvider [] {
90
- SystemPropertyCredentialsProvider .create (),
91
- EnvironmentVariableCredentialsProvider .create (),
92
- WebIdentityTokenFileCredentialsProvider .create (),
93
- ProfileCredentialsProvider .builder ()
94
- .profileFile (builder .profileFile )
95
- .profileName (builder .profileName )
96
- .build (),
97
- ContainerCredentialsProvider .builder ()
98
- .asyncCredentialUpdateEnabled (asyncCredentialUpdateEnabled )
99
- .build (),
100
- InstanceProfileCredentialsProvider .builder ()
101
- .asyncCredentialUpdateEnabled (asyncCredentialUpdateEnabled )
102
- .profileFile (builder .profileFile )
103
- .profileName (builder .profileName )
104
- .build ()
92
+ SystemPropertyCredentialsProvider .create (),
93
+ EnvironmentVariableCredentialsProvider .create (),
94
+ WebIdentityTokenFileCredentialsProvider .create (),
95
+ ProfileCredentialsProvider .builder ()
96
+ .profileFile (builder .profileFileSupplier )
97
+ .profileName (builder .profileName )
98
+ .build (),
99
+ ContainerCredentialsProvider .builder ()
100
+ .asyncCredentialUpdateEnabled (asyncCredentialUpdateEnabled )
101
+ .build (),
102
+ InstanceProfileCredentialsProvider .builder ()
103
+ .asyncCredentialUpdateEnabled (asyncCredentialUpdateEnabled )
104
+ .profileFile (builder .profileFileSupplier )
105
+ .profileName (builder .profileName )
106
+ .build ()
105
107
};
106
108
107
109
return AwsCredentialsProviderChain .builder ()
@@ -144,7 +146,7 @@ public Builder toBuilder() {
144
146
* Configuration that defines the {@link DefaultCredentialsProvider}'s behavior.
145
147
*/
146
148
public static final class Builder implements CopyableBuilder <Builder , DefaultCredentialsProvider > {
147
- private ProfileFile profileFile ;
149
+ private ProfileFileSupplier profileFileSupplier ;
148
150
private String profileName ;
149
151
private Boolean reuseLastProviderEnabled = true ;
150
152
private Boolean asyncCredentialUpdateEnabled = false ;
@@ -156,14 +158,20 @@ private Builder() {
156
158
}
157
159
158
160
private Builder (DefaultCredentialsProvider credentialsProvider ) {
159
- this .profileFile = credentialsProvider .profileFile ;
161
+ this .profileFileSupplier = credentialsProvider .profileFileSupplier ;
160
162
this .profileName = credentialsProvider .profileName ;
161
163
this .reuseLastProviderEnabled = credentialsProvider .reuseLastProviderEnabled ;
162
164
this .asyncCredentialUpdateEnabled = credentialsProvider .asyncCredentialUpdateEnabled ;
163
165
}
164
166
165
167
public Builder profileFile (ProfileFile profileFile ) {
166
- this .profileFile = profileFile ;
168
+ return profileFile (Optional .ofNullable (profileFile )
169
+ .map (ProfileFileSupplier ::fixedProfileFile )
170
+ .orElse (null ));
171
+ }
172
+
173
+ public Builder profileFile (ProfileFileSupplier profileFileSupplier ) {
174
+ this .profileFileSupplier = profileFileSupplier ;
167
175
return this ;
168
176
}
169
177
@@ -198,6 +206,7 @@ public Builder asyncCredentialUpdateEnabled(Boolean asyncCredentialUpdateEnabled
198
206
/**
199
207
* Create a {@link DefaultCredentialsProvider} using the configuration defined in this builder.
200
208
*/
209
+ @ Override
201
210
public DefaultCredentialsProvider build () {
202
211
return new DefaultCredentialsProvider (this );
203
212
}
0 commit comments