Skip to content

Commit ccdec62

Browse files
committed
add proxy support for ADC and pre-generated refresh token auth
1 parent b0ef57b commit ccdec62

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOAuthUtility.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -294,10 +294,11 @@ static GoogleCredentials getCredentials(
294294
break;
295295
case PRE_GENERATED_TOKEN:
296296
credentials =
297-
getPreGeneratedTokensCredentials(authProperties, overrideProperties, callerClassName);
297+
getPreGeneratedTokensCredentials(
298+
authProperties, overrideProperties, httpTransportFactory, callerClassName);
298299
break;
299300
case APPLICATION_DEFAULT_CREDENTIALS:
300-
credentials = getApplicationDefaultCredentials(callerClassName);
301+
credentials = getApplicationDefaultCredentials(httpTransportFactory, callerClassName);
301302
break;
302303
case EXTERNAL_ACCOUNT_AUTH:
303304
credentials =
@@ -553,12 +554,13 @@ private static GoogleCredentials getPreGeneratedAccessTokenCredentials(
553554
static GoogleCredentials getPreGeneratedTokensCredentials(
554555
Map<String, String> authProperties,
555556
Map<String, String> overrideProperties,
557+
HttpTransportFactory httpTransportFactory,
556558
String callerClassName) {
557559
LOG.finer("++enter++\t" + callerClassName);
558560
if (authProperties.containsKey(BigQueryJdbcUrlUtility.OAUTH_REFRESH_TOKEN_PROPERTY_NAME)) {
559561
try {
560562
return getPreGeneratedRefreshTokenCredentials(
561-
authProperties, overrideProperties, callerClassName);
563+
authProperties, overrideProperties, httpTransportFactory, callerClassName);
562564
} catch (URISyntaxException ex) {
563565
throw new BigQueryJdbcRuntimeException(
564566
"URISyntaxException during getPreGeneratedTokensCredentials", ex);
@@ -574,6 +576,16 @@ static UserCredentials getPreGeneratedRefreshTokenCredentials(
574576
Map<String, String> overrideProperties,
575577
String callerClassName)
576578
throws URISyntaxException {
579+
return getPreGeneratedRefreshTokenCredentials(
580+
authProperties, overrideProperties, null, callerClassName);
581+
}
582+
583+
static UserCredentials getPreGeneratedRefreshTokenCredentials(
584+
Map<String, String> authProperties,
585+
Map<String, String> overrideProperties,
586+
HttpTransportFactory httpTransportFactory,
587+
String callerClassName)
588+
throws URISyntaxException {
577589
LOG.finer("++enter++\t" + callerClassName);
578590

579591
UserCredentials.Builder userCredentialsBuilder =
@@ -584,6 +596,10 @@ static UserCredentials getPreGeneratedRefreshTokenCredentials(
584596
.setClientSecret(
585597
authProperties.get(BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME));
586598

599+
if (httpTransportFactory != null) {
600+
userCredentialsBuilder.setHttpTransportFactory(httpTransportFactory);
601+
}
602+
587603
if (overrideProperties.containsKey(BigQueryJdbcUrlUtility.OAUTH2_TOKEN_URI_PROPERTY_NAME)) {
588604
userCredentialsBuilder.setTokenServerUri(
589605
new URI(overrideProperties.get(BigQueryJdbcUrlUtility.OAUTH2_TOKEN_URI_PROPERTY_NAME)));
@@ -598,10 +614,14 @@ static UserCredentials getPreGeneratedRefreshTokenCredentials(
598614
return userCredentialsBuilder.build();
599615
}
600616

601-
private static GoogleCredentials getApplicationDefaultCredentials(String callerClassName) {
617+
private static GoogleCredentials getApplicationDefaultCredentials(
618+
HttpTransportFactory httpTransportFactory, String callerClassName) {
602619
LOG.finer("++enter++\t" + callerClassName);
603620
try {
604-
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
621+
GoogleCredentials credentials =
622+
httpTransportFactory != null
623+
? GoogleCredentials.getApplicationDefault(httpTransportFactory)
624+
: GoogleCredentials.getApplicationDefault();
605625
String principal = "unknown";
606626
if (credentials instanceof ServiceAccountCredentials) {
607627
principal = ((ServiceAccountCredentials) credentials).getClientEmail();

java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcOAuthUtilityTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,4 +540,25 @@ public void testGetImpersonatedCredentialsPropagatesHttpTransportFactory() {
540540
assertThat(((ImpersonatedCredentials) credentials).toBuilder().getHttpTransportFactory())
541541
.isEqualTo(dummyFactory);
542542
}
543+
544+
@Test
545+
public void testGetPreGeneratedRefreshTokenCredentialsPropagatesHttpTransportFactory() {
546+
Map<String, String> authProperties =
547+
BigQueryJdbcOAuthUtility.parseOAuthProperties(
548+
DataSource.fromUrl(
549+
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
550+
+ "ProjectId=MyBigQueryProject;OAuthType=2;"
551+
+ "OAuthRefreshToken=dummy_refresh_token;OAuthClientId=dummy_client_id;OAuthClientSecret=dummy_client_secret;"),
552+
null);
553+
554+
HttpTransportFactory dummyFactory = () -> null;
555+
556+
GoogleCredentials credentials =
557+
BigQueryJdbcOAuthUtility.getCredentials(
558+
authProperties, Collections.emptyMap(), false, dummyFactory, null);
559+
560+
assertThat(credentials).isInstanceOf(UserCredentials.class);
561+
assertThat(((UserCredentials) credentials).toBuilder().getHttpTransportFactory())
562+
.isEqualTo(dummyFactory);
563+
}
543564
}

0 commit comments

Comments
 (0)