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 33cda4891e16 CAMEL-23040 - Generalize Google services authentication 
with common module - Google Mail (#21595)
33cda4891e16 is described below

commit 33cda4891e16de5cceaf5ad390193898a0748949
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Feb 25 11:07:17 2026 +0100

    CAMEL-23040 - Generalize Google services authentication with common module 
- Google Mail (#21595)
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 components/camel-google/camel-google-mail/pom.xml  |  4 ++
 .../google/mail/BatchGoogleMailClientFactory.java  | 51 +++++++---------------
 .../google/mail/GoogleMailConfiguration.java       | 10 ++++-
 .../mail/stream/GoogleMailStreamConfiguration.java | 10 ++++-
 4 files changed, 38 insertions(+), 37 deletions(-)

diff --git a/components/camel-google/camel-google-mail/pom.xml 
b/components/camel-google/camel-google-mail/pom.xml
index 87d690386a78..08a202cab843 100644
--- a/components/camel-google/camel-google-mail/pom.xml
+++ b/components/camel-google/camel-google-mail/pom.xml
@@ -41,6 +41,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-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
index 5ad8ec1c5051..078b53f6f24f 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.component.google.mail;
 
-import java.io.IOException;
 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.gmail.Gmail;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.component.google.common.GoogleCredentialsHelper;
 
 public class BatchGoogleMailClientFactory implements GoogleMailClientFactory {
     private NetHttpTransport transport;
@@ -45,27 +43,21 @@ public class BatchGoogleMailClientFactory implements 
GoogleMailClientFactory {
             throw new IllegalArgumentException("clientId and clientSecret are 
required to create Gmail client.");
         }
         try {
-            Credential credential = authorize(clientId, clientSecret);
+            // Use GoogleCredentialsHelper for OAuth credentials
+            GoogleMailConfiguration tempConfig = new GoogleMailConfiguration();
+            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 Gmail.Builder(transport, jsonFactory, 
credential).setApplicationName(applicationName).build();
         } catch (Exception e) {
             throw new RuntimeCamelException("Could not create Gmail client.", 
e);
         }
     }
 
-    // Authorizes the installed application to access user's protected data.
-    private Credential authorize(String clientId, String clientSecret) {
-        // authorize
-        return new 
GoogleCredential.Builder().setJsonFactory(jsonFactory).setTransport(transport)
-                .setClientSecrets(clientId, clientSecret).build();
-    }
-
     @Override
     public Gmail makeClient(
             CamelContext camelContext, String serviceAccountKey, 
Collection<String> scopes, String applicationName,
@@ -74,27 +66,16 @@ public class BatchGoogleMailClientFactory implements 
GoogleMailClientFactory {
             throw new IllegalArgumentException("serviceAccountKey is required 
to create Gmail client.");
         }
         try {
-            Credential credential = authorizeServiceAccount(camelContext, 
serviceAccountKey, delegate, scopes);
+            // Use GoogleCredentialsHelper for service account credentials
+            GoogleMailConfiguration tempConfig = new GoogleMailConfiguration();
+            tempConfig.setServiceAccountKey(serviceAccountKey);
+            tempConfig.setDelegate(delegate);
+
+            Credential credential
+                    = GoogleCredentialsHelper.getOAuthCredential(camelContext, 
tempConfig, scopes, transport, jsonFactory);
             return new Gmail.Builder(transport, jsonFactory, 
credential).setApplicationName(applicationName).build();
         } catch (Exception e) {
             throw new RuntimeCamelException("Could not create Gmail 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-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConfiguration.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConfiguration.java
index a6c5b092dae0..5daaeb750f0b 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConfiguration.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailConfiguration.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.google.mail;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.camel.component.google.common.GoogleCommonConfiguration;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiName;
 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 GoogleMailConfiguration {
+public class GoogleMailConfiguration implements GoogleCommonConfiguration {
     @UriPath
     @Metadata(required = true)
     private GoogleMailApiName apiName;
@@ -78,6 +79,7 @@ public class GoogleMailConfiguration {
         this.methodName = methodName;
     }
 
+    @Override
     public String getClientId() {
         return clientId;
     }
@@ -89,6 +91,7 @@ public class GoogleMailConfiguration {
         this.clientId = clientId;
     }
 
+    @Override
     public String getClientSecret() {
         return clientSecret;
     }
@@ -100,6 +103,7 @@ public class GoogleMailConfiguration {
         this.clientSecret = clientSecret;
     }
 
+    @Override
     public String getAccessToken() {
         return accessToken;
     }
@@ -111,6 +115,7 @@ public class GoogleMailConfiguration {
         this.accessToken = accessToken;
     }
 
+    @Override
     public String getRefreshToken() {
         return refreshToken;
     }
@@ -134,6 +139,7 @@ public class GoogleMailConfiguration {
         this.applicationName = applicationName;
     }
 
+    @Override
     public String getServiceAccountKey() {
         return serviceAccountKey;
     }
@@ -148,6 +154,7 @@ public class GoogleMailConfiguration {
         this.serviceAccountKey = serviceAccountKey;
     }
 
+    @Override
     public String getDelegate() {
         return delegate;
     }
@@ -163,6 +170,7 @@ public class GoogleMailConfiguration {
         return scopes;
     }
 
+    @Override
     public Collection<String> getScopesAsList() {
         if (scopes != null) {
             return List.of(scopes.split(","));
diff --git 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
index 3dcffa0da54e..fe647fc38a8d 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
@@ -20,6 +20,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.google.common.GoogleCommonConfiguration;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
@@ -29,7 +30,7 @@ import org.apache.camel.spi.UriPath;
  * Component configuration for GoogleMail stream component.
  */
 @UriParams
-public class GoogleMailStreamConfiguration implements Cloneable {
+public class GoogleMailStreamConfiguration implements Cloneable, 
GoogleCommonConfiguration {
     @UriPath
     @Metadata(required = true)
     private String index;
@@ -61,6 +62,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
     @UriParam
     private String scopes;
 
+    @Override
     public String getClientId() {
         return clientId;
     }
@@ -72,6 +74,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         this.clientId = clientId;
     }
 
+    @Override
     public String getClientSecret() {
         return clientSecret;
     }
@@ -83,6 +86,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         this.clientSecret = clientSecret;
     }
 
+    @Override
     public String getAccessToken() {
         return accessToken;
     }
@@ -94,6 +98,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         this.accessToken = accessToken;
     }
 
+    @Override
     public String getRefreshToken() {
         return refreshToken;
     }
@@ -184,6 +189,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         this.markAsRead = markAsRead;
     }
 
+    @Override
     public String getServiceAccountKey() {
         return serviceAccountKey;
     }
@@ -197,6 +203,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         this.serviceAccountKey = serviceAccountKey;
     }
 
+    @Override
     public String getDelegate() {
         return delegate;
     }
@@ -212,6 +219,7 @@ public class GoogleMailStreamConfiguration implements 
Cloneable {
         return scopes;
     }
 
+    @Override
     public Collection<String> getScopesAsList() {
         if (scopes != null) {
             return List.of(scopes.split(","));

Reply via email to