Skip to content
Open
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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5208,8 +5208,13 @@ private List<String> getAccessibleCatalogNames() {
accessibleCatalogs.add(primaryCatalog);
}

List<String> additionalProjects = this.connection.getAdditionalProjects();
if (additionalProjects != null) {
String additionalProjectsStr = this.connection.getAdditionalProjects();
if (additionalProjectsStr != null && !additionalProjectsStr.trim().isEmpty()) {
List<String> additionalProjects =
com.google.common.base.Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList(additionalProjectsStr);
for (String project : additionalProjects) {
if (project != null && !project.isEmpty()) {
accessibleCatalogs.add(project);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,17 @@ public Connection connect(String url, Properties info) throws SQLException {
throw new BigQueryJdbcException(e.getMessage(), e);
}

DataSource ds = DataSource.fromUrl(connectionUri);

// LogLevel
String logLevelStr =
BigQueryJdbcUrlUtility.parseUriProperty(
connectionUri, BigQueryJdbcUrlUtility.LOG_LEVEL_PROPERTY_NAME);
String logLevelStr = ds.getLogLevel();
if (logLevelStr == null) {
logLevelStr = System.getenv(BigQueryJdbcUrlUtility.LOG_LEVEL_ENV_VAR);
}
Level logLevel = BigQueryJdbcUrlUtility.parseLogLevel(logLevelStr);

// LogPath
String logPath =
BigQueryJdbcUrlUtility.parseUriProperty(
connectionUri, BigQueryJdbcUrlUtility.LOG_PATH_PROPERTY_NAME);
String logPath = ds.getLogPath();
if (logPath == null) {
logPath = System.getenv(BigQueryJdbcUrlUtility.LOG_PATH_ENV_VAR);
}
Expand Down Expand Up @@ -217,7 +215,7 @@ public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) {
propertyInfoList.add(driverProperty);
}
Map<String, String> oAuthProperties =
BigQueryJdbcOAuthUtility.parseOAuthProperties(url, this.toString());
BigQueryJdbcOAuthUtility.parseOAuthProperties(DataSource.fromUrl(url), this.toString());
for (Map.Entry<String, String> authProperty : oAuthProperties.entrySet()) {
propertyInfoList.add(new DriverPropertyInfo(authProperty.getKey(), authProperty.getValue()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,18 +106,16 @@ final class BigQueryJdbcOAuthUtility {
* @return A map of OAuth properties.
*/
static Map<String, String> parseOAuthProperties(String url, String callerClassName) {
return parseOAuthProperties(DataSource.fromUrl(url), callerClassName);
}

static Map<String, String> parseOAuthProperties(DataSource ds, String callerClassName) {
LOG.finest("++enter++\t" + callerClassName);
Map<String, String> oauthProperties = new HashMap<>();

AuthType authType;
try {
authType =
AuthType.fromValue(
BigQueryJdbcUrlUtility.parseIntProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_TYPE_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_TYPE_VALUE,
callerClassName));
authType = AuthType.fromValue(ds.getOAuthType());
} catch (NumberFormatException exception) {
throw new IllegalArgumentException(OAUTH_TYPE_ERROR_MESSAGE);
}
Expand All @@ -128,21 +126,10 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
// need: project id, OAuthServiceAcctEmail and OAuthPvtKey or OAuthPvtKeyPath that can be
// .p12 or json.
// TODO: validation if .p12 or json file can be in getPropertyInfo can be handy for user
String serviceAccountEmail =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_SA_EMAIL_PROPERTY_NAME);
String serviceAccountPK =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PROPERTY_NAME);
String serviceAccountPrivateKeyPath =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME);
String p12Password =
BigQueryJdbcUrlUtility.parseStringProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_P12_PASSWORD_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_P12_PASSWORD_VALUE,
callerClassName);
String serviceAccountEmail = ds.getOAuthServiceAcctEmail();
String serviceAccountPK = ds.getOAuthPvtKey();
String serviceAccountPrivateKeyPath = ds.getOAuthPvtKeyPath();
String p12Password = ds.getOAuthP12Password();

oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_SA_EMAIL_PROPERTY_NAME, serviceAccountEmail);
Expand All @@ -157,48 +144,31 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
break;
case GOOGLE_USER_ACCOUNT:
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME));
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME, ds.getOAuthClientId());
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME));
int reqGoogleDriveScope =
BigQueryJdbcUrlUtility.parseIntProperty(
url,
BigQueryJdbcUrlUtility.REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_REQUEST_GOOGLE_DRIVE_SCOPE_VALUE,
callerClassName);
BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME, ds.getOAuthClientSecret());
int reqGoogleDriveScope = ds.getRequestGoogleDriveScope();
oauthProperties.put(
BigQueryJdbcUrlUtility.REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME,
String.valueOf(reqGoogleDriveScope));
LOG.fine("RequestGoogleDriveScope parsed.");
break;
case PRE_GENERATED_TOKEN:
String refreshToken =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_REFRESH_TOKEN_PROPERTY_NAME);
String refreshToken = ds.getOAuthRefreshToken();
if (refreshToken != null) {
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_REFRESH_TOKEN_PROPERTY_NAME, refreshToken);
LOG.fine("OAuthRefreshToken provided.");
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME));
BigQueryJdbcUrlUtility.OAUTH_CLIENT_ID_PROPERTY_NAME, ds.getOAuthClientId());
LOG.fine("OAuthClientId provided.");
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME));
BigQueryJdbcUrlUtility.OAUTH_CLIENT_SECRET_PROPERTY_NAME, ds.getOAuthClientSecret());
LOG.fine("OAuthClientSecret provided.");
break;
}
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_ACCESS_TOKEN_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_ACCESS_TOKEN_PROPERTY_NAME));
BigQueryJdbcUrlUtility.OAUTH_ACCESS_TOKEN_PROPERTY_NAME, ds.getOAuthAccessToken());
LOG.fine("OAuthAccessToken provided.");
break;
case APPLICATION_DEFAULT_CREDENTIALS:
Expand All @@ -208,38 +178,46 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
case EXTERNAL_ACCOUNT_AUTH:
// For External account authentication (OAuth Type 4)
// need: project id, OAuthPvtKey or OAuthPvtKeyPath or BYOID_PROPERTIES
String pvtKey =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PROPERTY_NAME);
String pvtKeyPath =
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME);
String pvtKey = ds.getOAuthPvtKey();
String pvtKeyPath = ds.getOAuthPvtKeyPath();
if (pvtKey != null) {
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PROPERTY_NAME));
oauthProperties.put(BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PROPERTY_NAME, pvtKey);
LOG.fine("OAuthPvtKey provided.");
} else if (pvtKeyPath != null) {
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseUriProperty(
url, BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME));
oauthProperties.put(BigQueryJdbcUrlUtility.OAUTH_PVT_KEY_PATH_PROPERTY_NAME, pvtKeyPath);
LOG.fine("OAuthPvtKeyPath provided.");
} else {
for (String property : BigQueryJdbcUrlUtility.BYOID_PROPERTIES) {
String value =
BigQueryJdbcUrlUtility.parseBYOIDProperty(url, property, callerClassName);
if (value != null) {
oauthProperties.put(property, value);
LOG.fine(property + " provided.");
}
}
String universeDomainProp = BigQueryJdbcUrlUtility.UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME;
String universeDomain = BigQueryJdbcUrlUtility.parseUriProperty(url, universeDomainProp);
if (ds.getByoidAudienceUri() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_AUDIENCE_URI_PROPERTY_NAME, ds.getByoidAudienceUri());
if (ds.getByoidCredentialSource() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_CREDENTIAL_SOURCE_PROPERTY_NAME,
ds.getByoidCredentialSource());
if (ds.getByoidPoolUserProject() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_POOL_USER_PROJECT_PROPERTY_NAME,
ds.getByoidPoolUserProject());
if (ds.getByoidSAImpersonationUri() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_SA_IMPERSONATION_URI_PROPERTY_NAME,
ds.getByoidSAImpersonationUri());
if (ds.getByoidSubjectTokenType() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_SUBJECT_TOKEN_TYPE_PROPERTY_NAME,
ds.getByoidSubjectTokenType());
if (ds.getByoidTokenUri() != null)
oauthProperties.put(
BigQueryJdbcUrlUtility.BYOID_TOKEN_URI_PROPERTY_NAME, ds.getByoidTokenUri());

String universeDomain = ds.getUniverseDomain();
if (universeDomain != null) {
oauthProperties.put(universeDomainProp, universeDomain);
LOG.fine(universeDomainProp + " provided. Caller : " + callerClassName);
oauthProperties.put(
BigQueryJdbcUrlUtility.UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME, universeDomain);
LOG.fine(
BigQueryJdbcUrlUtility.UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME
+ " provided. Caller : "
+ callerClassName);
}
}
break;
Expand All @@ -250,32 +228,20 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
|| authType == AuthType.PRE_GENERATED_TOKEN) {
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseStringProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_EMAIL_VALUE,
callerClassName));
ds.getOAuthSAImpersonationEmail());
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseStringProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_CHAIN_VALUE,
callerClassName));
ds.getOAuthSAImpersonationChain());
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseStringProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_SCOPES_VALUE,
callerClassName));
ds.getOAuthSAImpersonationScopes() != null
? ds.getOAuthSAImpersonationScopes()
: BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_SCOPES_VALUE);
oauthProperties.put(
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME,
BigQueryJdbcUrlUtility.parseStringProperty(
url,
BigQueryJdbcUrlUtility.OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME,
BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_VALUE,
callerClassName));
ds.getOAuthSAImpersonationTokenLifetime() != null
? ds.getOAuthSAImpersonationTokenLifetime()
: BigQueryJdbcUrlUtility.DEFAULT_OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_VALUE);
}
return oauthProperties;
}
Expand Down Expand Up @@ -429,7 +395,8 @@ static UserAuthorizer getUserAuthorizer(
}
} catch (NumberFormatException e) {
LOG.severe(
"Invalid value for RequestGoogleDriveScope, defaulting to not request Drive scope. Caller: "
"Invalid value for RequestGoogleDriveScope, defaulting to not request Drive scope."
+ " Caller: "
+ callerClassName);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,34 +61,27 @@ final class BigQueryJdbcProxyUtility {

private BigQueryJdbcProxyUtility() {}

static Map<String, String> parseProxyProperties(String URL, String callerClassName) {
static Map<String, String> parseProxyProperties(DataSource ds, String callerClassName) {
LOG.finest("++enter++\t" + callerClassName);
Map<String, String> proxyProperties = new HashMap<>();
String proxyHost =
BigQueryJdbcUrlUtility.parseUriProperty(
URL, BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME);
String proxyHost = ds.getProxyHost();
if (proxyHost != null) {
proxyProperties.put(BigQueryJdbcUrlUtility.PROXY_HOST_PROPERTY_NAME, proxyHost);
}
String proxyPort =
BigQueryJdbcUrlUtility.parseUriProperty(
URL, BigQueryJdbcUrlUtility.PROXY_PORT_PROPERTY_NAME);
String proxyPort = ds.getProxyPort();
if (proxyPort != null) {
if (!Pattern.compile(validPortRegex).matcher(proxyPort).find()) {
throw new IllegalArgumentException(
"Illegal port number provided %s. Please provide a valid port number.");
String.format(
"Illegal port number provided %s. Please provide a valid port number.", proxyPort));
}
proxyProperties.put(BigQueryJdbcUrlUtility.PROXY_PORT_PROPERTY_NAME, proxyPort);
}
String proxyUid =
BigQueryJdbcUrlUtility.parseUriProperty(
URL, BigQueryJdbcUrlUtility.PROXY_USER_ID_PROPERTY_NAME);
String proxyUid = ds.getProxyUid();
if (proxyUid != null) {
proxyProperties.put(BigQueryJdbcUrlUtility.PROXY_USER_ID_PROPERTY_NAME, proxyUid);
}
String proxyPwd =
BigQueryJdbcUrlUtility.parseUriProperty(
URL, BigQueryJdbcUrlUtility.PROXY_PASSWORD_PROPERTY_NAME);
String proxyPwd = ds.getProxyPwd();
if (proxyPwd != null) {
proxyProperties.put(BigQueryJdbcUrlUtility.PROXY_PASSWORD_PROPERTY_NAME, proxyPwd);
}
Expand All @@ -114,6 +107,10 @@ static Map<String, String> parseProxyProperties(String URL, String callerClassNa
return proxyProperties;
}

static Map<String, String> parseProxyProperties(String URL, String callerClassName) {
return parseProxyProperties(DataSource.fromUrl(URL), callerClassName);
}

static HttpTransportOptions getHttpTransportOptions(
Map<String, String> proxyProperties,
String sslTrustStorePath,
Expand Down
Loading
Loading