Skip to content

Commit ec2bfca

Browse files
authored
Adds accountId support to process credentials provider (#4332)
* Adds accountId support to process credentials provider * Updates codegen tests from upstream branch to take account ID into account
1 parent a4699f1 commit ec2bfca

File tree

9 files changed

+209
-85
lines changed

9 files changed

+209
-85
lines changed

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-default-params-without-allowlist.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public final class DefaultQueryAuthSchemeParams implements QueryAuthSchemeParams
3232

3333
private final Boolean useFIPSEndpoint;
3434

35+
36+
private final String awsAccountId;
37+
3538
private final String endpointId;
3639

3740
private final Boolean defaultTrueParam;
@@ -51,6 +54,7 @@ private DefaultQueryAuthSchemeParams(Builder builder) {
5154
this.region = builder.region;
5255
this.useDualStackEndpoint = builder.useDualStackEndpoint;
5356
this.useFIPSEndpoint = builder.useFIPSEndpoint;
57+
this.awsAccountId = builder.awsAccountId;
5458
this.endpointId = builder.endpointId;
5559
this.defaultTrueParam = Validate.paramNotNull(builder.defaultTrueParam, "defaultTrueParam");
5660
this.defaultStringParam = Validate.paramNotNull(builder.defaultStringParam, "defaultStringParam");
@@ -84,6 +88,11 @@ public Boolean useFipsEndpoint() {
8488
return useFIPSEndpoint;
8589
}
8690

91+
@Override
92+
public String awsAccountId() {
93+
return awsAccountId;
94+
}
95+
8796
@Override
8897
public String endpointId() {
8998
return endpointId;
@@ -134,6 +143,8 @@ private static final class Builder implements QueryAuthSchemeParams.Builder {
134143

135144
private Boolean useFIPSEndpoint;
136145

146+
private String awsAccountId;
147+
137148
private String endpointId;
138149

139150
private Boolean defaultTrueParam = true;
@@ -156,6 +167,7 @@ private static final class Builder implements QueryAuthSchemeParams.Builder {
156167
this.region = params.region;
157168
this.useDualStackEndpoint = params.useDualStackEndpoint;
158169
this.useFIPSEndpoint = params.useFIPSEndpoint;
170+
this.awsAccountId = params.awsAccountId;
159171
this.endpointId = params.endpointId;
160172
this.defaultTrueParam = params.defaultTrueParam;
161173
this.defaultStringParam = params.defaultStringParam;
@@ -189,6 +201,12 @@ public Builder useFipsEndpoint(Boolean useFIPSEndpoint) {
189201
return this;
190202
}
191203

204+
@Override
205+
public Builder awsAccountId(String awsAccountId) {
206+
this.awsAccountId = awsAccountId;
207+
return this;
208+
}
209+
192210
@Override
193211
public Builder endpointId(String endpointId) {
194212
this.endpointId = endpointId;

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-endpoint-provider-without-allowlist.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static QueryAuthSchemeProvider create() {
5555
public List<AuthSchemeOption> resolveAuthScheme(QueryAuthSchemeParams params) {
5656
QueryEndpointParams endpointParameters = QueryEndpointParams.builder().region(params.region())
5757
.useDualStackEndpoint(params.useDualStackEndpoint()).useFipsEndpoint(params.useFipsEndpoint())
58-
.endpointId(params.endpointId()).defaultTrueParam(params.defaultTrueParam())
58+
.awsAccountId(params.awsAccountId()).endpointId(params.endpointId()).defaultTrueParam(params.defaultTrueParam())
5959
.defaultStringParam(params.defaultStringParam()).deprecatedParam(params.deprecatedParam())
6060
.booleanContextParam(params.booleanContextParam()).stringContextParam(params.stringContextParam())
6161
.operationContextParam(params.operationContextParam()).build();

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-auth-scheme-params-without-allowlist.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ static Builder builder() {
4949

5050
Boolean useFipsEndpoint();
5151

52+
String awsAccountId();
53+
5254
String endpointId();
5355

5456
/**
@@ -90,6 +92,8 @@ interface Builder extends CopyableBuilder<Builder, QueryAuthSchemeParams> {
9092

9193
Builder useFipsEndpoint(Boolean useFIPSEndpoint);
9294

95+
Builder awsAccountId(String awsAccountId);
96+
9397
Builder endpointId(String endpointId);
9498

9599
/**

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ private QueryAuthSchemeParams authSchemeParams(SdkRequest request, ExecutionAttr
102102
builder.region(endpointParams.region());
103103
builder.useDualStackEndpoint(endpointParams.useDualStackEndpoint());
104104
builder.useFipsEndpoint(endpointParams.useFipsEndpoint());
105+
builder.awsAccountId(endpointParams.awsAccountId());
105106
builder.endpointId(endpointParams.endpointId());
106107
builder.defaultTrueParam(endpointParams.defaultTrueParam());
107108
builder.defaultStringParam(endpointParams.defaultStringParam());

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/rules/endpoint-parameters.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ private BuilderImpl(QueryEndpointParams builder) {
158158
this.region = builder.region;
159159
this.useDualStackEndpoint = builder.useDualStackEndpoint;
160160
this.useFIPSEndpoint = builder.useFIPSEndpoint;
161+
this.awsAccountId = builder.awsAccountId;
161162
this.endpointId = builder.endpointId;
162163
this.defaultTrueParam = builder.defaultTrueParam;
163164
this.defaultStringParam = builder.defaultStringParam;

core/auth/src/main/java/software/amazon/awssdk/auth/credentials/ProcessCredentialsProvider.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,10 @@ private RefreshResult<AwsCredentials> refreshCredentials() {
129129
JsonNode credentialsJson = parseProcessOutput(processOutput);
130130

131131
AwsCredentials credentials = credentials(credentialsJson);
132-
Instant credentialExpirationTime = credentialExpirationTime(credentialsJson);
133-
132+
Instant expirationTime = credentials.expirationTime().orElse(Instant.MAX);
134133
return RefreshResult.builder(credentials)
135-
.staleTime(credentialExpirationTime)
136-
.prefetchTime(credentialExpirationTime.minusMillis(credentialRefreshThreshold.toMillis()))
134+
.staleTime(expirationTime)
135+
.prefetchTime(expirationTime.minusMillis(credentialRefreshThreshold.toMillis()))
137136
.build();
138137
} catch (InterruptedException e) {
139138
throw new IllegalStateException("Process-based credential refreshing has been interrupted.", e);
@@ -166,28 +165,33 @@ private AwsCredentials credentials(JsonNode credentialsJson) {
166165
String accessKeyId = getText(credentialsJson, "AccessKeyId");
167166
String secretAccessKey = getText(credentialsJson, "SecretAccessKey");
168167
String sessionToken = getText(credentialsJson, "SessionToken");
168+
String accountId = getText(credentialsJson, "AccountId");
169169

170170
Validate.notEmpty(accessKeyId, "AccessKeyId cannot be empty.");
171171
Validate.notEmpty(secretAccessKey, "SecretAccessKey cannot be empty.");
172172

173173
if (sessionToken != null) {
174-
return AwsSessionCredentials.create(accessKeyId, secretAccessKey, sessionToken);
175-
} else {
176-
return AwsBasicCredentials.create(accessKeyId, secretAccessKey);
174+
return AwsSessionCredentials.builder()
175+
.accessKeyId(accessKeyId)
176+
.secretAccessKey(secretAccessKey)
177+
.sessionToken(sessionToken)
178+
.expirationTime(credentialExpirationTime(credentialsJson))
179+
.accountId(accountId)
180+
.build();
177181
}
182+
return AwsBasicCredentials.builder()
183+
.accessKeyId(accessKeyId)
184+
.secretAccessKey(secretAccessKey)
185+
.accountId(accountId)
186+
.build();
178187
}
179188

180189
/**
181190
* Parse the process output to retrieve the expiration date and time.
182191
*/
183192
private Instant credentialExpirationTime(JsonNode credentialsJson) {
184193
String expiration = getText(credentialsJson, "Expiration");
185-
186-
if (expiration != null) {
187-
return DateUtils.parseIso8601Date(expiration);
188-
} else {
189-
return Instant.MAX;
190-
}
194+
return expiration != null ? DateUtils.parseIso8601Date(expiration) : null;
191195
}
192196

193197
/**

0 commit comments

Comments
 (0)