This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch camel-3.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push: new ec8da8e99f0 [CAMEL-18684]: Add Microsoft Exchange Online OAuth2 Mail Authenticator ec8da8e99f0 is described below commit ec8da8e99f07fed94cc39a4e9ca54b53b8ec57e3 Author: Luigi De Masi <ldem...@redhat.com> AuthorDate: Tue Nov 8 18:05:51 2022 +0100 [CAMEL-18684]: Add Microsoft Exchange Online OAuth2 Mail Authenticator moved authenticator to a new module --- catalog/camel-allcomponents/pom.xml | 4 ++ components/camel-mail-microsoft-oauth/pom.xml | 52 ++++++++++++++++++++ .../src/main/docs/mail-microsoft-oauth.adoc | 57 ++++++++++++++++++++++ ...osoftExchangeOnlineOAuth2MailAuthenticator.java | 7 ++- components/camel-mail/pom.xml | 6 --- .../camel-mail/src/main/docs/mail-component.adoc | 26 ---------- components/pom.xml | 1 + parent/pom.xml | 5 ++ 8 files changed, 125 insertions(+), 33 deletions(-) diff --git a/catalog/camel-allcomponents/pom.xml b/catalog/camel-allcomponents/pom.xml index a4de7b52a5f..7da5bbe53a5 100644 --- a/catalog/camel-allcomponents/pom.xml +++ b/catalog/camel-allcomponents/pom.xml @@ -925,6 +925,10 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-lzf</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-mail-microsoft-oauth</artifactId> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mail</artifactId> diff --git a/components/camel-mail-microsoft-oauth/pom.xml b/components/camel-mail-microsoft-oauth/pom.xml new file mode 100644 index 00000000000..1e7a1fd2312 --- /dev/null +++ b/components/camel-mail-microsoft-oauth/pom.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>components</artifactId> + <version>3.18.4-SNAPSHOT</version> + </parent> + + <artifactId>camel-mail-microsoft-oauth</artifactId> + <packaging>jar</packaging> + <name>Camel :: Mail :: Microsoft OAuth</name> + <description>Camel Mail OAuth2 Authenticator for Microsoft Exchange Online</description> + + <modelVersion>4.0.0</modelVersion> + + <properties> + <firstVersion>3.18.4</firstVersion> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-mail</artifactId> + </dependency> + + <!--Microsoft Authentication Library for Java --> + <dependency> + <groupId>com.microsoft.azure</groupId> + <artifactId>msal4j</artifactId> + </dependency> + </dependencies> + +</project> \ No newline at end of file diff --git a/components/camel-mail-microsoft-oauth/src/main/docs/mail-microsoft-oauth.adoc b/components/camel-mail-microsoft-oauth/src/main/docs/mail-microsoft-oauth.adoc new file mode 100644 index 00000000000..b1481478d68 --- /dev/null +++ b/components/camel-mail-microsoft-oauth/src/main/docs/mail-microsoft-oauth.adoc @@ -0,0 +1,57 @@ += Mail Microsoft Oauth Component +:doctitle: Mail Microsoft Oauth +:shortname: mail-microsoft-oauth +:artifactid: camel-mail-microsoft-oauth +:description: Camel Mail OAuth2 Authenticator for Microsoft Exchange Online +:since: 3.18.4 +:supportlevel: Stable + +//Manually maintained attributes +:camel-spring-boot-name: mail-microsoft-oauth + +*Since Camel {since}* + + +The Mail Microsoft OAuth2 provides an implementation of `org.apache.camel.component.mail.MailAuthenticator` to authenticate IMAP/POP/SMTP connections and access to Email via Spring's Mail support and the underlying JavaMail system. + +Maven users will need to add the following dependency to their `pom.xml` +for this component: + +[source,xml] +------------------------------------------------------------ +<dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-mail-microsoft-oauth</artifactId> + <version>x.x.x</version> + <!-- use the same version as your Camel core version --> +</dependency> +------------------------------------------------------------ + +Importing `camel-mail-microsoft-oauth` it will automatically import camel-mail component. + + +== Microsoft Exchange Online OAuth2 Mail Authenticator IMAP sample +To use OAuth, an application must be registered with Azure Active Directory. +Follow the instructions listed in https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app[Register an application with the Microsoft identity platform] guide to register a new application. + +Enable application to access Exchange mailboxes via client credentials flow. Instructions https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth[here] + +Once everything is set up, declare and register in the registry, an instance of `+org.apache.camel.component.mail.MicrosoftExchangeOnlineOAuth2MailAuthenticator+`. + +For Example in a Spring Boot application: + +[source,java] +--------------------------------------------------------------------------------- +@BindToRegistry("auth") +public MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator(){ + return new MicrosoftExchangeOnlineOAuth2MailAuthenticator(tenantId, clientId, clientSecret, "j...@doe.com"); +} +--------------------------------------------------------------------------------- + +and then reference it in the Camel URI: + +[source,java] +--------------------------------------------------------------------------------------- + from("imaps://outlook.office365.com:993" + + "?authenticator=#auth" + + "&mail.imaps.auth.mechanisms=XOAUTH2" + + "&debugMode=true" + + "&delete=false") +--------------------------------------------------------------------------------------- diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java b/components/camel-mail-microsoft-oauth/src/main/java/org/apache/camel/component/mail/microsoft/authenticator/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java similarity index 95% rename from components/camel-mail/src/main/java/org/apache/camel/component/mail/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java rename to components/camel-mail-microsoft-oauth/src/main/java/org/apache/camel/component/mail/microsoft/authenticator/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java index 6aaded69117..c94e62d1753 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java +++ b/components/camel-mail-microsoft-oauth/src/main/java/org/apache/camel/component/mail/microsoft/authenticator/MicrosoftExchangeOnlineOAuth2MailAuthenticator.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.mail; +package org.apache.camel.component.mail.microsoft.authenticator; import java.net.MalformedURLException; import java.util.Collections; @@ -28,7 +28,12 @@ import com.microsoft.aad.msal4j.ConfidentialClientApplication; import com.microsoft.aad.msal4j.IAuthenticationResult; import com.microsoft.aad.msal4j.IClientCredential; import com.microsoft.aad.msal4j.IConfidentialClientApplication; +import org.apache.camel.component.mail.MailAuthenticator; +/** + * This Mail Authenticator is intended for users of Microsoft Exchange Online that use an Azure Active Directory + * instance as Identity Provider and OAuth2 Client Credential Flow as Authentication protocol. + */ public class MicrosoftExchangeOnlineOAuth2MailAuthenticator extends MailAuthenticator { /** diff --git a/components/camel-mail/pom.xml b/components/camel-mail/pom.xml index 733e8bbcaf2..498d6ade94b 100644 --- a/components/camel-mail/pom.xml +++ b/components/camel-mail/pom.xml @@ -59,12 +59,6 @@ </exclusions> </dependency> - <!--Microsoft Authentication Library for Java --> - <dependency> - <groupId>com.microsoft.azure</groupId> - <artifactId>msal4j</artifactId> - </dependency> - <!-- testing --> <dependency> <groupId>org.apache.camel</groupId> diff --git a/components/camel-mail/src/main/docs/mail-component.adoc b/components/camel-mail/src/main/docs/mail-component.adoc index b1cd4b23f13..d0f5fcfd9b2 100644 --- a/components/camel-mail/src/main/docs/mail-component.adoc +++ b/components/camel-mail/src/main/docs/mail-component.adoc @@ -445,32 +445,6 @@ As you can see the API to handle attachments is a bit clunky but it's there so you can get the `javax.activation.DataHandler` so you can handle the attachments using standard API. -== Microsoft Exchange Online OAuth2 Mail Authenticator sample -To use OAuth, an application must be registered with Azure Active Directory. -Follow the instructions listed in https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app[Register an application with the Microsoft identity platform] guide to register a new application. + -Enable application to access Exchange mailboxes via client credentials flow. Instructions https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth[here] + -Once everything is set up, declare and register in the registry, an instance of `+org.apache.camel.component.mail.MicrosoftExchangeOnlineOAuth2MailAuthenticator+`. + -For Example in a Spring Boot application: - -[source,java] ---------------------------------------------------------------------------------- -@Bean("auth") -public MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator(){ - return new MicrosoftExchangeOnlineOAuth2MailAuthenticator(tenantId, clientId, clientSecret, "j...@doe.com"); -} ---------------------------------------------------------------------------------- - -and then reference it in the Camel URI: - -[source,java] ---------------------------------------------------------------------------------------- - from("imaps://outlook.office365.com:993" - + "?authenticator=#auth" - + "&mail.imaps.auth.mechanisms=XOAUTH2" - + "&debugMode=true" - + "&delete=false") ---------------------------------------------------------------------------------------- - == How to split a mail message with attachments In this example we consume mail messages which may have a number of diff --git a/components/pom.xml b/components/pom.xml index aa4dfc7c9e1..ac92b655a9d 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -219,6 +219,7 @@ <module>camel-lumberjack</module> <module>camel-lzf</module> <module>camel-mail</module> + <module>camel-mail-microsoft-oauth</module> <module>camel-metrics</module> <module>camel-micrometer</module> <module>camel-microprofile</module> diff --git a/parent/pom.xml b/parent/pom.xml index 098757b9f29..6a7b23480aa 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -1962,6 +1962,11 @@ <artifactId>camel-lzf</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-mail-microsoft-oauth</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mail</artifactId>