Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
boolean filterTablesOnDefaultDataset;
String sslTrustStorePath;
String sslTrustStorePassword;
String sslTrustStoreType;
String sslTrustStoreProvider;
long maxBytesBilled;
Map<String, String> labels;
Integer httpConnectTimeout;
Expand Down Expand Up @@ -277,6 +279,8 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {

this.sslTrustStorePath = ds.getSSLTrustStorePath();
this.sslTrustStorePassword = ds.getSSLTrustStorePassword();
this.sslTrustStoreType = ds.getSSLTrustStoreType();
this.sslTrustStoreProvider = ds.getSSLTrustStoreProvider();
this.httpConnectTimeout = ds.getHttpConnectTimeout();
this.httpReadTimeout = ds.getHttpReadTimeout();

Expand All @@ -285,6 +289,8 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
proxyProperties,
this.sslTrustStorePath,
this.sslTrustStorePassword,
this.sslTrustStoreType,
this.sslTrustStoreProvider,
this.httpConnectTimeout,
this.httpReadTimeout,
this.connectionClassName);
Expand Down Expand Up @@ -337,6 +343,8 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
proxyProperties,
this.sslTrustStorePath,
this.sslTrustStorePassword,
this.sslTrustStoreType,
this.sslTrustStoreProvider,
this.connectionClassName);
this.enableSession = ds.getEnableSession();
this.unsupportedHTAPIFallback = ds.getUnsupportedHTAPIFallback();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ static HttpTransportOptions getHttpTransportOptions(
Map<String, String> proxyProperties,
String sslTrustStorePath,
String sslTrustStorePassword,
String sslTrustStoreType,
String sslTrustStoreProvider,
Integer connectTimeout,
Integer readTimeout,
String callerClassName) {
Expand All @@ -143,7 +145,12 @@ static HttpTransportOptions getHttpTransportOptions(
if (hasProxyOrSsl) {
httpTransportOptionsBuilder.setHttpTransportFactory(
getHttpTransportFactory(
proxyProperties, sslTrustStorePath, sslTrustStorePassword, callerClassName));
proxyProperties,
sslTrustStorePath,
sslTrustStorePassword,
sslTrustStoreType,
sslTrustStoreProvider,
callerClassName));
} else {
httpTransportOptionsBuilder.setHttpTransportFactory(() -> DEFAULT_TRANSPORT);
}
Expand All @@ -162,6 +169,8 @@ private static HttpTransportFactory getHttpTransportFactory(
Map<String, String> proxyProperties,
String sslTrustStorePath,
String sslTrustStorePassword,
String sslTrustStoreType,
String sslTrustStoreProvider,
String callerClassName) {
LOG.finest("++enter++\t" + callerClassName);
HttpClientBuilder httpClientBuilder = HttpClients.custom();
Expand All @@ -182,7 +191,7 @@ private static HttpTransportFactory getHttpTransportFactory(

if (sslTrustStorePath != null) {
try (FileInputStream trustStoreStream = new FileInputStream(sslTrustStorePath)) {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
KeyStore trustStore = loadKeyStore(sslTrustStoreType, sslTrustStoreProvider);
char[] trustStorePasswordChars =
sslTrustStorePassword != null ? sslTrustStorePassword.toCharArray() : null;
trustStore.load(trustStoreStream, trustStorePasswordChars);
Expand Down Expand Up @@ -243,6 +252,8 @@ static TransportChannelProvider getTransportChannelProvider(
Map<String, String> proxyProperties,
String sslTrustStorePath,
String sslTrustStorePassword,
String sslTrustStoreType,
String sslTrustStoreProvider,
String callerClassName) {
LOG.finest("++enter++\t" + callerClassName);
boolean hasProxy = proxyProperties.containsKey(BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME);
Expand Down Expand Up @@ -271,7 +282,7 @@ public ProxiedSocketAddress proxyFor(SocketAddress socketAddress) {
instanceof io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder) {
try (FileInputStream trustStoreStream =
new FileInputStream(sslTrustStorePath)) {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
KeyStore trustStore = loadKeyStore(sslTrustStoreType, sslTrustStoreProvider);
char[] trustStorePasswordChars =
sslTrustStorePassword != null
? sslTrustStorePassword.toCharArray()
Expand Down Expand Up @@ -300,6 +311,15 @@ public ProxiedSocketAddress proxyFor(SocketAddress socketAddress) {
return transportChannelProvider;
}

private static KeyStore loadKeyStore(String type, String provider)
throws GeneralSecurityException {
String resolvedType =
(type != null && !type.trim().isEmpty()) ? type.trim() : KeyStore.getDefaultType();
return (provider != null && !provider.trim().isEmpty())
? KeyStore.getInstance(resolvedType, provider.trim())
: KeyStore.getInstance(resolvedType);
}
Comment thread
keshavdandeva marked this conversation as resolved.
Comment thread
keshavdandeva marked this conversation as resolved.

private static HttpConnectProxiedSocketAddress getHttpConnectProxiedSocketAddress(
InetSocketAddress socketAddress, Map<String, String> proxyProperties) {
String proxyHost = proxyProperties.get(BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.net.UrlEscapers;
import java.security.KeyStore;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
Expand Down Expand Up @@ -173,6 +174,8 @@ protected boolean removeEldestEntry(Map.Entry<String, Map<String, String>> eldes
static final String REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME = "RequestGoogleDriveScope";
static final String SSL_TRUST_STORE_PROPERTY_NAME = "SSLTrustStore";
static final String SSL_TRUST_STORE_PWD_PROPERTY_NAME = "SSLTrustStorePwd";
static final String SSL_TRUST_STORE_TYPE_PROPERTY_NAME = "SSLTrustStoreType";
static final String SSL_TRUST_STORE_PROVIDER_PROPERTY_NAME = "SSLTrustStoreProvider";
static final int DEFAULT_REQUEST_GOOGLE_DRIVE_SCOPE_VALUE = 0;
static final String MAX_BYTES_BILLED_PROPERTY_NAME = "MaximumBytesBilled";
static final Long DEFAULT_MAX_BYTES_BILLED_VALUE = 0L;
Expand Down Expand Up @@ -607,6 +610,17 @@ protected boolean removeEldestEntry(Map.Entry<String, Map<String, String>> eldes
"The password for accessing the Java TrustStore that is specified using"
+ " the property SSLTrustStore.")
.build(),
BigQueryConnectionProperty.newBuilder()
.setName(SSL_TRUST_STORE_TYPE_PROPERTY_NAME)
.setDescription(
"The type of the Java TrustStore specified using the property SSLTrustStore.")
.setLazyDefaultValue(KeyStore::getDefaultType)
.build(),
BigQueryConnectionProperty.newBuilder()
.setName(SSL_TRUST_STORE_PROVIDER_PROPERTY_NAME)
.setDescription(
"The security provider of the Java TrustStore specified using the property SSLTrustStore.")
.build(),
BigQueryConnectionProperty.newBuilder()
.setName(HTTP_CONNECT_TIMEOUT_PROPERTY_NAME)
.setDescription(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ public class DataSource implements javax.sql.DataSource {
private Integer metadataFetchThreadCount;
private String sslTrustStorePath;
private String sslTrustStorePassword;
private String sslTrustStoreType;
private String sslTrustStoreProvider;
private Map<String, String> labels;
private String requestReason;
private Integer timeout;
Expand Down Expand Up @@ -261,6 +263,12 @@ public class DataSource implements javax.sql.DataSource {
.put(
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PWD_PROPERTY_NAME,
DataSource::setSSLTrustStorePassword)
.put(
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_TYPE_PROPERTY_NAME,
DataSource::setSSLTrustStoreType)
.put(
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PROVIDER_PROPERTY_NAME,
DataSource::setSSLTrustStoreProvider)
.put(
BigQueryJdbcUrlUtility.LABELS_PROPERTY_NAME,
(ds, val) ->
Expand Down Expand Up @@ -588,6 +596,15 @@ Properties createProperties() {
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PWD_PROPERTY_NAME,
String.valueOf(this.sslTrustStorePassword));
}
if (this.sslTrustStoreType != null) {
connectionProperties.setProperty(
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_TYPE_PROPERTY_NAME, this.sslTrustStoreType);
}
if (this.sslTrustStoreProvider != null) {
connectionProperties.setProperty(
BigQueryJdbcUrlUtility.SSL_TRUST_STORE_PROVIDER_PROPERTY_NAME,
this.sslTrustStoreProvider);
}
Comment thread
keshavdandeva marked this conversation as resolved.
if (this.labels != null) {
connectionProperties.setProperty(
BigQueryJdbcUrlUtility.LABELS_PROPERTY_NAME, serializeMap(this.labels));
Expand Down Expand Up @@ -1124,6 +1141,22 @@ public void setSSLTrustStorePassword(String sslTrustStorePassword) {
this.sslTrustStorePassword = sslTrustStorePassword;
}

public String getSSLTrustStoreType() {
return sslTrustStoreType;
}

public void setSSLTrustStoreType(String sslTrustStoreType) {
this.sslTrustStoreType = sslTrustStoreType;
}

public String getSSLTrustStoreProvider() {
return sslTrustStoreProvider;
}

public void setSSLTrustStoreProvider(String sslTrustStoreProvider) {
this.sslTrustStoreProvider = sslTrustStoreProvider;
}

public Map<String, String> getLabels() {
return labels;
}
Expand Down
Loading
Loading