Skip to content

Commit 56cae6c

Browse files
committed
chore: Add connect and read timeout to identity pool creds
1 parent 6d8d45d commit 56cae6c

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

oauth2_http/java/com/google/auth/oauth2/ImpersonatedCredentials.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.google.api.client.json.GenericJson;
4545
import com.google.api.client.json.JsonObjectParser;
4646
import com.google.api.client.util.GenericData;
47+
import com.google.api.core.InternalApi;
4748
import com.google.auth.CredentialTypeForMetrics;
4849
import com.google.auth.ServiceAccountSigner;
4950
import com.google.auth.http.HttpCredentialsAdapter;
@@ -117,6 +118,9 @@ public class ImpersonatedCredentials extends GoogleCredentials
117118

118119
private transient Calendar calendar;
119120

121+
private int connectTimeout;
122+
private int readTimeout;
123+
120124
/**
121125
* @param sourceCredentials the source credential used to acquire the impersonated credentials. It
122126
* should be either a user account credential or a service account credential.
@@ -559,6 +563,8 @@ private ImpersonatedCredentials(Builder builder) throws IOException {
559563
+ "does not match %s universe domain set for impersonated credentials.",
560564
this.sourceCredentials.getUniverseDomain(), builder.getUniverseDomain()));
561565
}
566+
this.connectTimeout = builder.connectTimeout;
567+
this.readTimeout = builder.readTimeout;
562568
}
563569

564570
/**
@@ -587,6 +593,12 @@ public AccessToken refreshAccessToken() throws IOException {
587593
|| (isDefaultUniverseDomain()
588594
&& ((ServiceAccountCredentials) this.sourceCredentials)
589595
.shouldUseAssertionFlowForGdu())) {
596+
if (this.sourceCredentials instanceof IdentityPoolCredentials) {
597+
this.sourceCredentials =
598+
((IdentityPoolCredentials) this.sourceCredentials)
599+
.toBuilder().setConnectTimeout(connectTimeout).setReadTimeout(readTimeout).build();
600+
}
601+
590602
try {
591603
this.sourceCredentials.refreshIfExpired();
592604
} catch (IOException e) {
@@ -616,6 +628,8 @@ public AccessToken refreshAccessToken() throws IOException {
616628

617629
HttpContent requestContent = new JsonHttpContent(parser.getJsonFactory(), body);
618630
HttpRequest request = requestFactory.buildPostRequest(url, requestContent);
631+
request.setConnectTimeout(connectTimeout);
632+
request.setReadTimeout(readTimeout);
619633
adapter.initialize(request);
620634
request.setParser(parser);
621635
MetricsUtils.setMetricsHeader(
@@ -746,6 +760,9 @@ public static class Builder extends GoogleCredentials.Builder {
746760
private String iamEndpointOverride;
747761
private Calendar calendar = Calendar.getInstance();
748762

763+
private int connectTimeout = 20000; // Default to 20000ms = 20s
764+
private int readTimeout = 20000; // Default to 20000ms = 20s
765+
749766
protected Builder() {}
750767

751768
/**
@@ -769,6 +786,8 @@ protected Builder(ImpersonatedCredentials credentials) {
769786
this.lifetime = credentials.lifetime;
770787
this.transportFactory = credentials.transportFactory;
771788
this.iamEndpointOverride = credentials.iamEndpointOverride;
789+
this.connectTimeout = credentials.connectTimeout;
790+
this.readTimeout = credentials.readTimeout;
772791
}
773792

774793
@CanIgnoreReturnValue
@@ -860,6 +879,20 @@ public Builder setCalendar(Calendar calendar) {
860879
return this;
861880
}
862881

882+
/** Warning: Not for public use and can be removed at any time. */
883+
@InternalApi
884+
public Builder setConnectTimeout(int connectTimeout) {
885+
this.connectTimeout = connectTimeout;
886+
return this;
887+
}
888+
889+
/** Warning: Not for public use and can be removed at any time. */
890+
@InternalApi
891+
public Builder setReadTimeout(int readTimeout) {
892+
this.readTimeout = readTimeout;
893+
return this;
894+
}
895+
863896
public Calendar getCalendar() {
864897
return this.calendar;
865898
}

0 commit comments

Comments
 (0)