@@ -106,19 +106,13 @@ final class BigQueryJdbcOAuthUtility {
106106 * @param url The URL to parse.
107107 * @return A map of OAuth properties.
108108 */
109- static Map <String , String > parseOAuthProperties (String url , String callerClassName ) {
109+ static Map <String , String > parseOAuthProperties (DataSource ds , String callerClassName ) {
110110 LOG .finest ("++enter++\t " + callerClassName );
111111 Map <String , String > oauthProperties = new HashMap <>();
112112
113113 AuthType authType ;
114114 try {
115- authType =
116- AuthType .fromValue (
117- BigQueryJdbcUrlUtility .parseIntProperty (
118- url ,
119- BigQueryJdbcUrlUtility .OAUTH_TYPE_PROPERTY_NAME ,
120- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_TYPE_VALUE ,
121- callerClassName ));
115+ authType = AuthType .fromValue (ds .getOAuthType ());
122116 } catch (NumberFormatException exception ) {
123117 throw new IllegalArgumentException (OAUTH_TYPE_ERROR_MESSAGE );
124118 }
@@ -129,21 +123,10 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
129123 // need: project id, OAuthServiceAcctEmail and OAuthPvtKey or OAuthPvtKeyPath that can be
130124 // .p12 or json.
131125 // TODO: validation if .p12 or json file can be in getPropertyInfo can be handy for user
132- String serviceAccountEmail =
133- BigQueryJdbcUrlUtility .parseUriProperty (
134- url , BigQueryJdbcUrlUtility .OAUTH_SA_EMAIL_PROPERTY_NAME );
135- String serviceAccountPK =
136- BigQueryJdbcUrlUtility .parseUriProperty (
137- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PROPERTY_NAME );
138- String serviceAccountPrivateKeyPath =
139- BigQueryJdbcUrlUtility .parseUriProperty (
140- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PATH_PROPERTY_NAME );
141- String p12Password =
142- BigQueryJdbcUrlUtility .parseStringProperty (
143- url ,
144- BigQueryJdbcUrlUtility .OAUTH_P12_PASSWORD_PROPERTY_NAME ,
145- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_P12_PASSWORD_VALUE ,
146- callerClassName );
126+ String serviceAccountEmail = ds .getOAuthServiceAcctEmail ();
127+ String serviceAccountPK = ds .getOAuthPvtKey ();
128+ String serviceAccountPrivateKeyPath = ds .getOAuthPvtKeyPath ();
129+ String p12Password = ds .getOAuthP12Password ();
147130
148131 oauthProperties .put (
149132 BigQueryJdbcUrlUtility .OAUTH_SA_EMAIL_PROPERTY_NAME , serviceAccountEmail );
@@ -158,48 +141,31 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
158141 break ;
159142 case GOOGLE_USER_ACCOUNT :
160143 oauthProperties .put (
161- BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME ,
162- BigQueryJdbcUrlUtility .parseUriProperty (
163- url , BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME ));
144+ BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME , ds .getOAuthClientId ());
164145 oauthProperties .put (
165- BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME ,
166- BigQueryJdbcUrlUtility .parseUriProperty (
167- url , BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME ));
168- int reqGoogleDriveScope =
169- BigQueryJdbcUrlUtility .parseIntProperty (
170- url ,
171- BigQueryJdbcUrlUtility .REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME ,
172- BigQueryJdbcUrlUtility .DEFAULT_REQUEST_GOOGLE_DRIVE_SCOPE_VALUE ,
173- callerClassName );
146+ BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME , ds .getOAuthClientSecret ());
147+ int reqGoogleDriveScope = ds .getRequestGoogleDriveScope ();
174148 oauthProperties .put (
175149 BigQueryJdbcUrlUtility .REQUEST_GOOGLE_DRIVE_SCOPE_PROPERTY_NAME ,
176150 String .valueOf (reqGoogleDriveScope ));
177151 LOG .fine ("RequestGoogleDriveScope parsed." );
178152 break ;
179153 case PRE_GENERATED_TOKEN :
180- String refreshToken =
181- BigQueryJdbcUrlUtility .parseUriProperty (
182- url , BigQueryJdbcUrlUtility .OAUTH_REFRESH_TOKEN_PROPERTY_NAME );
154+ String refreshToken = ds .getOAuthRefreshToken ();
183155 if (refreshToken != null ) {
184156 oauthProperties .put (
185157 BigQueryJdbcUrlUtility .OAUTH_REFRESH_TOKEN_PROPERTY_NAME , refreshToken );
186158 LOG .fine ("OAuthRefreshToken provided." );
187159 oauthProperties .put (
188- BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME ,
189- BigQueryJdbcUrlUtility .parseUriProperty (
190- url , BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME ));
160+ BigQueryJdbcUrlUtility .OAUTH_CLIENT_ID_PROPERTY_NAME , ds .getOAuthClientId ());
191161 LOG .fine ("OAuthClientId provided." );
192162 oauthProperties .put (
193- BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME ,
194- BigQueryJdbcUrlUtility .parseUriProperty (
195- url , BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME ));
163+ BigQueryJdbcUrlUtility .OAUTH_CLIENT_SECRET_PROPERTY_NAME , ds .getOAuthClientSecret ());
196164 LOG .fine ("OAuthClientSecret provided." );
197165 break ;
198166 }
199167 oauthProperties .put (
200- BigQueryJdbcUrlUtility .OAUTH_ACCESS_TOKEN_PROPERTY_NAME ,
201- BigQueryJdbcUrlUtility .parseUriProperty (
202- url , BigQueryJdbcUrlUtility .OAUTH_ACCESS_TOKEN_PROPERTY_NAME ));
168+ BigQueryJdbcUrlUtility .OAUTH_ACCESS_TOKEN_PROPERTY_NAME , ds .getOAuthAccessToken ());
203169 LOG .fine ("OAuthAccessToken provided." );
204170 break ;
205171 case APPLICATION_DEFAULT_CREDENTIALS :
@@ -209,38 +175,52 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
209175 case EXTERNAL_ACCOUNT_AUTH :
210176 // For External account authentication (OAuth Type 4)
211177 // need: project id, OAuthPvtKey or OAuthPvtKeyPath or BYOID_PROPERTIES
212- String pvtKey =
213- BigQueryJdbcUrlUtility .parseUriProperty (
214- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PROPERTY_NAME );
215- String pvtKeyPath =
216- BigQueryJdbcUrlUtility .parseUriProperty (
217- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PATH_PROPERTY_NAME );
178+ String pvtKey = ds .getOAuthPvtKey ();
179+ String pvtKeyPath = ds .getOAuthPvtKeyPath ();
218180 if (pvtKey != null ) {
219- oauthProperties .put (
220- BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PROPERTY_NAME ,
221- BigQueryJdbcUrlUtility .parseUriProperty (
222- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PROPERTY_NAME ));
181+ oauthProperties .put (BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PROPERTY_NAME , pvtKey );
223182 LOG .fine ("OAuthPvtKey provided." );
224183 } else if (pvtKeyPath != null ) {
225- oauthProperties .put (
226- BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PATH_PROPERTY_NAME ,
227- BigQueryJdbcUrlUtility .parseUriProperty (
228- url , BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PATH_PROPERTY_NAME ));
184+ oauthProperties .put (BigQueryJdbcUrlUtility .OAUTH_PVT_KEY_PATH_PROPERTY_NAME , pvtKeyPath );
229185 LOG .fine ("OAuthPvtKeyPath provided." );
230186 } else {
231- for (String property : BigQueryJdbcUrlUtility .BYOID_PROPERTIES ) {
232- String value =
233- BigQueryJdbcUrlUtility .parseBYOIDProperty (url , property , callerClassName );
234- if (value != null ) {
235- oauthProperties .put (property , value );
236- LOG .fine (property + " provided." );
237- }
187+ if (ds .getByoidAudienceUri () != null ) {
188+ oauthProperties .put (
189+ BigQueryJdbcUrlUtility .BYOID_AUDIENCE_URI_PROPERTY_NAME , ds .getByoidAudienceUri ());
190+ }
191+ if (ds .getByoidCredentialSource () != null ) {
192+ oauthProperties .put (
193+ BigQueryJdbcUrlUtility .BYOID_CREDENTIAL_SOURCE_PROPERTY_NAME ,
194+ ds .getByoidCredentialSource ());
238195 }
239- String universeDomainProp = BigQueryJdbcUrlUtility .UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME ;
240- String universeDomain = BigQueryJdbcUrlUtility .parseUriProperty (url , universeDomainProp );
196+ if (ds .getByoidPoolUserProject () != null ) {
197+ oauthProperties .put (
198+ BigQueryJdbcUrlUtility .BYOID_POOL_USER_PROJECT_PROPERTY_NAME ,
199+ ds .getByoidPoolUserProject ());
200+ }
201+ if (ds .getByoidSAImpersonationUri () != null ) {
202+ oauthProperties .put (
203+ BigQueryJdbcUrlUtility .BYOID_SA_IMPERSONATION_URI_PROPERTY_NAME ,
204+ ds .getByoidSAImpersonationUri ());
205+ }
206+ if (ds .getByoidSubjectTokenType () != null ) {
207+ oauthProperties .put (
208+ BigQueryJdbcUrlUtility .BYOID_SUBJECT_TOKEN_TYPE_PROPERTY_NAME ,
209+ ds .getByoidSubjectTokenType ());
210+ }
211+ if (ds .getByoidTokenUri () != null ) {
212+ oauthProperties .put (
213+ BigQueryJdbcUrlUtility .BYOID_TOKEN_URI_PROPERTY_NAME , ds .getByoidTokenUri ());
214+ }
215+
216+ String universeDomain = ds .getUniverseDomain ();
241217 if (universeDomain != null ) {
242- oauthProperties .put (universeDomainProp , universeDomain );
243- LOG .fine (universeDomainProp + " provided. Caller : " + callerClassName );
218+ oauthProperties .put (
219+ BigQueryJdbcUrlUtility .UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME , universeDomain );
220+ LOG .fine (
221+ BigQueryJdbcUrlUtility .UNIVERSE_DOMAIN_OVERRIDE_PROPERTY_NAME
222+ + " provided. Caller : "
223+ + callerClassName );
244224 }
245225 }
246226 break ;
@@ -251,32 +231,20 @@ static Map<String, String> parseOAuthProperties(String url, String callerClassNa
251231 || authType == AuthType .PRE_GENERATED_TOKEN ) {
252232 oauthProperties .put (
253233 BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME ,
254- BigQueryJdbcUrlUtility .parseStringProperty (
255- url ,
256- BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_EMAIL_PROPERTY_NAME ,
257- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_EMAIL_VALUE ,
258- callerClassName ));
234+ ds .getOAuthSAImpersonationEmail ());
259235 oauthProperties .put (
260236 BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME ,
261- BigQueryJdbcUrlUtility .parseStringProperty (
262- url ,
263- BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_CHAIN_PROPERTY_NAME ,
264- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_CHAIN_VALUE ,
265- callerClassName ));
237+ ds .getOAuthSAImpersonationChain ());
266238 oauthProperties .put (
267239 BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME ,
268- BigQueryJdbcUrlUtility .parseStringProperty (
269- url ,
270- BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_SCOPES_PROPERTY_NAME ,
271- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_SCOPES_VALUE ,
272- callerClassName ));
240+ ds .getOAuthSAImpersonationScopes () != null
241+ ? ds .getOAuthSAImpersonationScopes ()
242+ : BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_SCOPES_VALUE );
273243 oauthProperties .put (
274244 BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME ,
275- BigQueryJdbcUrlUtility .parseStringProperty (
276- url ,
277- BigQueryJdbcUrlUtility .OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_PROPERTY_NAME ,
278- BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_VALUE ,
279- callerClassName ));
245+ ds .getOAuthSAImpersonationTokenLifetime () != null
246+ ? ds .getOAuthSAImpersonationTokenLifetime ()
247+ : BigQueryJdbcUrlUtility .DEFAULT_OAUTH_SA_IMPERSONATION_TOKEN_LIFETIME_VALUE );
280248 }
281249 return oauthProperties ;
282250 }
@@ -437,7 +405,8 @@ static UserAuthorizer getUserAuthorizer(
437405 }
438406 } catch (NumberFormatException e ) {
439407 LOG .severe (
440- "Invalid value for RequestGoogleDriveScope, defaulting to not request Drive scope. Caller: "
408+ "Invalid value for RequestGoogleDriveScope, defaulting to not request Drive scope."
409+ + " Caller: "
441410 + callerClassName );
442411 }
443412 }
0 commit comments