This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new bebe47e7a15f CAMEL-23041 - Generalize Google services authentication
with common module - Google Drive (#21599)
bebe47e7a15f is described below
commit bebe47e7a15f095ea9c38967f1c1ccb6401fdf05
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Feb 25 14:36:19 2026 +0100
CAMEL-23041 - Generalize Google services authentication with common module
- Google Drive (#21599)
Signed-off-by: Andrea Cosentino <[email protected]>
---
components/camel-google/camel-google-drive/pom.xml | 4 ++
.../drive/BatchGoogleDriveClientFactory.java | 55 +++++++---------------
.../google/drive/GoogleDriveConfiguration.java | 10 +++-
3 files changed, 29 insertions(+), 40 deletions(-)
diff --git a/components/camel-google/camel-google-drive/pom.xml
b/components/camel-google/camel-google-drive/pom.xml
index 03a3a84f40b5..6b374b46510c 100644
--- a/components/camel-google/camel-google-drive/pom.xml
+++ b/components/camel-google/camel-google-drive/pom.xml
@@ -40,6 +40,10 @@
</properties>
<dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-google-common</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId>
diff --git
a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/BatchGoogleDriveClientFactory.java
b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/BatchGoogleDriveClientFactory.java
index 6d797e0da132..c7126a7d4541 100644
---
a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/BatchGoogleDriveClientFactory.java
+++
b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/BatchGoogleDriveClientFactory.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.component.google.drive;
-import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Proxy;
@@ -24,13 +23,12 @@ import java.net.UnknownHostException;
import java.util.Collection;
import com.google.api.client.auth.oauth2.Credential;
-import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.drive.Drive;
import org.apache.camel.CamelContext;
import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.component.google.common.GoogleCredentialsHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,31 +62,21 @@ public class BatchGoogleDriveClientFactory implements
GoogleDriveClientFactory {
throw new IllegalArgumentException("clientId and clientSecret are
required to create Google Drive client.");
}
try {
- Credential credential = authorize(clientId, clientSecret, scopes);
+ // Use GoogleCredentialsHelper for OAuth credentials
+ GoogleDriveConfiguration tempConfig = new
GoogleDriveConfiguration();
+ tempConfig.setClientId(clientId);
+ tempConfig.setClientSecret(clientSecret);
+ tempConfig.setRefreshToken(refreshToken);
+ tempConfig.setAccessToken(accessToken);
- if (refreshToken != null && !refreshToken.isEmpty()) {
- credential.setRefreshToken(refreshToken);
- }
- if (accessToken != null && !accessToken.isEmpty()) {
- credential.setAccessToken(accessToken);
- }
+ Credential credential
+ = GoogleCredentialsHelper.getOAuthCredential(null,
tempConfig, scopes, transport, jsonFactory);
return new Drive.Builder(transport, jsonFactory,
credential).setApplicationName(applicationName).build();
} catch (Exception e) {
throw new RuntimeCamelException("Could not create Google Drive
client.", e);
}
}
- // Authorizes the installed application to access user's protected data.
- private Credential authorize(String clientId, String clientSecret,
Collection<String> scopes) {
- // authorize
- return new GoogleCredential.Builder()
- .setJsonFactory(jsonFactory)
- .setTransport(transport)
- .setClientSecrets(clientId, clientSecret)
- .setServiceAccountScopes(scopes)
- .build();
- }
-
@Override
public Drive makeClient(
CamelContext camelContext, String serviceAccountKey,
Collection<String> scopes, String applicationName,
@@ -97,27 +85,16 @@ public class BatchGoogleDriveClientFactory implements
GoogleDriveClientFactory {
throw new IllegalArgumentException("serviceAccountKey is required
to create Drive client.");
}
try {
- Credential credential = authorizeServiceAccount(camelContext,
serviceAccountKey, delegate, scopes);
+ // Use GoogleCredentialsHelper for service account credentials
+ GoogleDriveConfiguration tempConfig = new
GoogleDriveConfiguration();
+ tempConfig.setServiceAccountKey(serviceAccountKey);
+ tempConfig.setDelegate(delegate);
+
+ Credential credential
+ = GoogleCredentialsHelper.getOAuthCredential(camelContext,
tempConfig, scopes, transport, jsonFactory);
return new Drive.Builder(transport, jsonFactory,
credential).setApplicationName(applicationName).build();
} catch (Exception e) {
throw new RuntimeCamelException("Could not create Drive client.",
e);
}
}
-
- private Credential authorizeServiceAccount(
- CamelContext camelContext, String serviceAccountKey, String
delegate, Collection<String> scopes) {
- // authorize
- try {
- GoogleCredential cred = GoogleCredential
-
.fromStream(ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext,
serviceAccountKey),
- transport,
- jsonFactory)
- .createScoped(scopes != null && !scopes.isEmpty() ? scopes
: null)
- .createDelegated(delegate);
- cred.refreshToken();
- return cred;
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
}
diff --git
a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConfiguration.java
b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConfiguration.java
index e74a360069f8..214d6572d5ae 100644
---
a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConfiguration.java
+++
b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConfiguration.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.google.drive;
import java.util.Collection;
import java.util.List;
+import org.apache.camel.component.google.common.GoogleCommonConfiguration;
import org.apache.camel.component.google.drive.internal.GoogleDriveApiName;
import org.apache.camel.spi.Configurer;
import org.apache.camel.spi.Metadata;
@@ -31,7 +32,7 @@ import org.apache.camel.spi.UriPath;
*/
@UriParams
@Configurer(extended = true)
-public class GoogleDriveConfiguration {
+public class GoogleDriveConfiguration implements GoogleCommonConfiguration {
@UriPath
@Metadata(required = true)
private GoogleDriveApiName apiName;
@@ -78,6 +79,7 @@ public class GoogleDriveConfiguration {
this.methodName = methodName;
}
+ @Override
public String getClientId() {
return clientId;
}
@@ -89,6 +91,7 @@ public class GoogleDriveConfiguration {
this.clientId = clientId;
}
+ @Override
public String getClientSecret() {
return clientSecret;
}
@@ -100,6 +103,7 @@ public class GoogleDriveConfiguration {
this.clientSecret = clientSecret;
}
+ @Override
public String getAccessToken() {
return accessToken;
}
@@ -111,6 +115,7 @@ public class GoogleDriveConfiguration {
this.accessToken = accessToken;
}
+ @Override
public String getRefreshToken() {
return refreshToken;
}
@@ -138,6 +143,7 @@ public class GoogleDriveConfiguration {
return scopes;
}
+ @Override
public Collection<String> getScopesAsList() {
if (scopes != null) {
return List.of(scopes.split(","));
@@ -157,6 +163,7 @@ public class GoogleDriveConfiguration {
this.scopes = scopes;
}
+ @Override
public String getServiceAccountKey() {
return serviceAccountKey;
}
@@ -171,6 +178,7 @@ public class GoogleDriveConfiguration {
this.serviceAccountKey = serviceAccountKey;
}
+ @Override
public String getDelegate() {
return delegate;
}