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 e94db2168a44 CAMEL-23038 - Generalize Google services authentication
with common module - Google Calendar (#21588)
e94db2168a44 is described below
commit e94db2168a44f95c45cf0f19c61133f2d47ca0b9
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Feb 24 14:01:30 2026 +0100
CAMEL-23038 - Generalize Google services authentication with common module
- Google Calendar (#21588)
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../camel-google/camel-google-calendar/pom.xml | 4 ++
.../calendar/BatchGoogleCalendarClientFactory.java | 63 ++++++++--------------
.../calendar/GoogleCalendarConfiguration.java | 10 +++-
.../stream/GoogleCalendarStreamConfiguration.java | 10 +++-
4 files changed, 44 insertions(+), 43 deletions(-)
diff --git a/components/camel-google/camel-google-calendar/pom.xml
b/components/camel-google/camel-google-calendar/pom.xml
index 172e5d9b500b..4ed04c787f5d 100644
--- a/components/camel-google/camel-google-calendar/pom.xml
+++ b/components/camel-google/camel-google-calendar/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-calendar/src/main/java/org/apache/camel/component/google/calendar/BatchGoogleCalendarClientFactory.java
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/BatchGoogleCalendarClientFactory.java
index d815b9a55841..461267497b08 100644
---
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/BatchGoogleCalendarClientFactory.java
+++
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/BatchGoogleCalendarClientFactory.java
@@ -17,7 +17,6 @@
package org.apache.camel.component.google.calendar;
import java.io.File;
-import java.io.IOException;
import java.util.Collection;
import com.google.api.client.auth.oauth2.Credential;
@@ -29,7 +28,7 @@ import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.calendar.Calendar;
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 BatchGoogleCalendarClientFactory implements
GoogleCalendarClientFactory {
private NetHttpTransport transport;
@@ -46,7 +45,7 @@ public class BatchGoogleCalendarClientFactory implements
GoogleCalendarClientFac
String accessToken,
String emailAddress, String p12FileName, String user) {
// if emailAddress and p12FileName values are present, assume Google
- // Service Account
+ // Service Account with P12 file (legacy)
boolean serviceAccount
= null != emailAddress && !emailAddress.isEmpty() && null !=
p12FileName && !p12FileName.isEmpty();
@@ -57,15 +56,17 @@ public class BatchGoogleCalendarClientFactory implements
GoogleCalendarClientFac
try {
Credential credential;
if (serviceAccount) {
- credential = authorizeServiceAccount(emailAddress,
p12FileName, scopes, user);
+ // Legacy P12 file authentication - keep as is since
GoogleCredentialsHelper doesn't support P12
+ credential = authorizeServiceAccountWithP12(emailAddress,
p12FileName, scopes, user);
} else {
- credential = authorize(clientId, clientSecret);
- if (refreshToken != null && !refreshToken.isEmpty()) {
- credential.setRefreshToken(refreshToken);
- }
- if (accessToken != null && !accessToken.isEmpty()) {
- credential.setAccessToken(accessToken);
- }
+ // Use GoogleCredentialsHelper for OAuth credentials
+ GoogleCalendarConfiguration tempConfig = new
GoogleCalendarConfiguration();
+ tempConfig.setClientId(clientId);
+ tempConfig.setClientSecret(clientSecret);
+ tempConfig.setRefreshToken(refreshToken);
+ tempConfig.setAccessToken(accessToken);
+
+ credential = GoogleCredentialsHelper.getOAuthCredential(null,
tempConfig, scopes, transport, jsonFactory);
}
return new Calendar.Builder(transport, jsonFactory,
credential).setApplicationName(applicationName).build();
} catch (Exception e) {
@@ -73,18 +74,9 @@ public class BatchGoogleCalendarClientFactory implements
GoogleCalendarClientFac
}
}
- // 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();
- }
-
- // authorize with P12-Certificate file
- private Credential authorizeServiceAccount(String emailAddress, String
p12FileName, Collection<String> scopes, String user)
+ // authorize with P12-Certificate file (legacy method - kept for backward
compatibility)
+ private Credential authorizeServiceAccountWithP12(
+ String emailAddress, String p12FileName, Collection<String>
scopes, String user)
throws Exception {
HttpTransport httpTransport =
GoogleNetHttpTransport.newTrustedTransport();
// set the service account user when provided
@@ -106,27 +98,16 @@ public class BatchGoogleCalendarClientFactory implements
GoogleCalendarClientFac
throw new IllegalArgumentException("serviceAccountKey is required
to create Google Calendar client.");
}
try {
- Credential credential = authorizeServiceAccount(camelContext,
serviceAccountKey, delegate, scopes);
+ // Use GoogleCredentialsHelper for service account JSON key
+ GoogleCalendarConfiguration tempConfig = new
GoogleCalendarConfiguration();
+ tempConfig.setServiceAccountKey(serviceAccountKey);
+ tempConfig.setDelegate(delegate);
+
+ Credential credential
+ = GoogleCredentialsHelper.getOAuthCredential(camelContext,
tempConfig, scopes, transport, jsonFactory);
return new Calendar.Builder(transport, jsonFactory,
credential).setApplicationName(applicationName).build();
} catch (Exception e) {
throw new RuntimeCamelException("Could not create Google Calendar
client.", e);
}
}
-
- // authorize with JSON-Credentials
- 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-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConfiguration.java
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConfiguration.java
index ee56a80f4d6e..1ac849eb2404 100644
---
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConfiguration.java
+++
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarConfiguration.java
@@ -21,6 +21,7 @@ import java.util.List;
import com.google.api.services.calendar.CalendarScopes;
import
org.apache.camel.component.google.calendar.internal.GoogleCalendarApiName;
+import org.apache.camel.component.google.common.GoogleCommonConfiguration;
import org.apache.camel.spi.Configurer;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
@@ -32,7 +33,7 @@ import org.apache.camel.spi.UriPath;
*/
@UriParams
@Configurer(extended = true)
-public class GoogleCalendarConfiguration {
+public class GoogleCalendarConfiguration implements GoogleCommonConfiguration {
@UriPath
@Metadata(required = true)
@@ -86,6 +87,7 @@ public class GoogleCalendarConfiguration {
this.methodName = methodName;
}
+ @Override
public String getClientId() {
return clientId;
}
@@ -108,6 +110,7 @@ public class GoogleCalendarConfiguration {
this.emailAddress = emailAddress;
}
+ @Override
public String getClientSecret() {
return clientSecret;
}
@@ -119,6 +122,7 @@ public class GoogleCalendarConfiguration {
this.clientSecret = clientSecret;
}
+ @Override
public String getAccessToken() {
return accessToken;
}
@@ -130,6 +134,7 @@ public class GoogleCalendarConfiguration {
this.accessToken = accessToken;
}
+ @Override
public String getRefreshToken() {
return refreshToken;
}
@@ -157,6 +162,7 @@ public class GoogleCalendarConfiguration {
return scopes;
}
+ @Override
public Collection<String> getScopesAsList() {
if (scopes != null) {
return List.of(scopes.split(","));
@@ -198,6 +204,7 @@ public class GoogleCalendarConfiguration {
this.user = user;
}
+ @Override
public String getServiceAccountKey() {
return serviceAccountKey;
}
@@ -212,6 +219,7 @@ public class GoogleCalendarConfiguration {
this.serviceAccountKey = serviceAccountKey;
}
+ @Override
public String getDelegate() {
return delegate;
}
diff --git
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
index b546bd700c71..c1059fec5484 100644
---
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
+++
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
@@ -21,6 +21,7 @@ import java.util.List;
import com.google.api.services.calendar.CalendarScopes;
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;
@@ -30,7 +31,7 @@ import org.apache.camel.spi.UriPath;
* Component configuration for GoogleCalendar stream component.
*/
@UriParams
-public class GoogleCalendarStreamConfiguration implements Cloneable {
+public class GoogleCalendarStreamConfiguration implements Cloneable,
GoogleCommonConfiguration {
private static final String DEFAULT_SCOPES = CalendarScopes.CALENDAR;
@UriPath
@@ -72,6 +73,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
@UriParam
private String delegate;
+ @Override
public String getClientId() {
return clientId;
}
@@ -94,6 +96,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.emailAddress = emailAddress;
}
+ @Override
public String getClientSecret() {
return clientSecret;
}
@@ -105,6 +108,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.clientSecret = clientSecret;
}
+ @Override
public String getAccessToken() {
return accessToken;
}
@@ -116,6 +120,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.accessToken = accessToken;
}
+ @Override
public String getRefreshToken() {
return refreshToken;
}
@@ -154,6 +159,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.scopes = scopes;
}
+ @Override
public Collection<String> getScopesAsList() {
if (scopes != null) {
return List.of(scopes.split(","));
@@ -263,6 +269,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.considerLastUpdate = considerLastUpdate;
}
+ @Override
public String getServiceAccountKey() {
return serviceAccountKey;
}
@@ -277,6 +284,7 @@ public class GoogleCalendarStreamConfiguration implements
Cloneable {
this.serviceAccountKey = serviceAccountKey;
}
+ @Override
public String getDelegate() {
return delegate;
}