This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 43df1566a2fd4a7917d41ba235af0a911de5ac6b
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Wed May 15 16:05:55 2019 +0200

    CAMEL-13519 - Camel-AWS SNS: Support encryption parameter when the creation 
of the topic is needed
---
 .../src/main/docs/aws-sns-component.adoc           |  4 +++-
 .../camel/component/aws/sns/SnsConfiguration.java  | 26 ++++++++++++++++++++++
 .../camel/component/aws/sns/SnsEndpoint.java       | 11 +++++++++
 .../sns/springboot/SnsComponentConfiguration.java  | 26 ++++++++++++++++++++++
 4 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/components/camel-aws-sns/src/main/docs/aws-sns-component.adoc 
b/components/camel-aws-sns/src/main/docs/aws-sns-component.adoc
index ecfafe3..656512e 100644
--- a/components/camel-aws-sns/src/main/docs/aws-sns-component.adoc
+++ b/components/camel-aws-sns/src/main/docs/aws-sns-component.adoc
@@ -67,7 +67,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (14 parameters):
+==== Query Parameters (16 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -76,12 +76,14 @@ with the following path and query parameters:
 | *amazonSNSClient* (producer) | To use the AmazonSNS as the client |  | 
AmazonSNS
 | *amazonSQSClient* (producer) | An SQS Client to use as bridge between SNS 
and SQS |  | AmazonSQS
 | *headerFilterStrategy* (producer) | To use a custom HeaderFilterStrategy to 
map headers to/from Camel. |  | HeaderFilterStrategy
+| *kmsMasterKeyId* (producer) | The ID of an AWS-managed customer master key 
(CMK) for Amazon SNS or a custom CMK. |  | String
 | *messageStructure* (producer) | The message structure to use such as json |  
| String
 | *policy* (producer) | The policy for this queue |  | String
 | *proxyHost* (producer) | To define a proxy host when instantiating the SNS 
client |  | String
 | *proxyPort* (producer) | To define a proxy port when instantiating the SNS 
client |  | Integer
 | *queueUrl* (producer) | The queueUrl to subscribe to |  | String
 | *region* (producer) | The region in which SNS client needs to work |  | 
String
+| *serverSideEncryptionEnabled* (producer) | Define if Server Side Encryption 
is enabled or not on the topic | false | boolean
 | *subject* (producer) | The subject which is used if the message header 
'CamelAwsSnsSubject' is not present. |  | String
 | *subscribeSNStoSQS* (producer) | Define if the subscription between SNS 
Topic and SQS must be done or not | false | boolean
 | *synchronous* (advanced) | Sets whether synchronous processing should be 
strictly used, or Camel is allowed to use asynchronous processing (if 
supported). | false | boolean
diff --git 
a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
 
b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
index 1e10790..0b2ac60 100644
--- 
a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
+++ 
b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
@@ -46,6 +46,10 @@ public class SnsConfiguration implements Cloneable {
     private String queueUrl;
     @UriParam
     private boolean subscribeSNStoSQS;
+    @UriParam
+    private String kmsMasterKeyId;
+    @UriParam
+    private boolean serverSideEncryptionEnabled;
 
     // Producer only properties
     @UriParam
@@ -211,6 +215,28 @@ public class SnsConfiguration implements Cloneable {
         this.subscribeSNStoSQS = subscribeSNStoSQS;
     }
     
+    public String getKmsMasterKeyId() {
+        return kmsMasterKeyId;
+    }
+
+    /**
+     * The ID of an AWS-managed customer master key (CMK) for Amazon SNS or a 
custom CMK.
+     */
+    public void setKmsMasterKeyId(String kmsMasterKeyId) {
+        this.kmsMasterKeyId = kmsMasterKeyId;
+    }
+
+    public boolean isServerSideEncryptionEnabled() {
+        return serverSideEncryptionEnabled;
+    }
+
+    /**
+     * Define if Server Side Encryption is enabled or not on the topic
+     */
+    public void setServerSideEncryptionEnabled(boolean 
serverSideEncryptionEnabled) {
+        this.serverSideEncryptionEnabled = serverSideEncryptionEnabled;
+    }
+    
     // *************************************************
     //
     // *************************************************
diff --git 
a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
 
b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
index cc6f757..1d960d6 100644
--- 
a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
+++ 
b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
@@ -32,6 +32,9 @@ import 
com.amazonaws.services.sns.model.SetTopicAttributesRequest;
 import com.amazonaws.services.sns.model.Topic;
 import com.amazonaws.services.sns.util.Topics;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
@@ -121,6 +124,14 @@ public class SnsEndpoint extends DefaultEndpoint 
implements HeaderFilterStrategy
         if (configuration.getTopicArn() == null) {
             // creates a new topic, or returns the URL of an existing one
             CreateTopicRequest request = new 
CreateTopicRequest(configuration.getTopicName());
+            
+            if (configuration.isServerSideEncryptionEnabled()) {
+               if (ObjectHelper.isNotEmpty(configuration.getKmsMasterKeyId())) 
{
+                   Map<String, String> attributes = new HashMap<>();
+                   attributes.put("KmsMasterKeyId", 
configuration.getKmsMasterKeyId());
+                   request.setAttributes(attributes);
+               }
+            }
 
             log.trace("Creating topic [{}] with request [{}]...", 
configuration.getTopicName(), request);
 
diff --git 
a/platforms/spring-boot/components-starter/camel-aws-sns-starter/src/main/java/org/apache/camel/component/aws/sns/springboot/SnsComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-aws-sns-starter/src/main/java/org/apache/camel/component/aws/sns/springboot/SnsComponentConfiguration.java
index 8a06aac..80b9229 100644
--- 
a/platforms/spring-boot/components-starter/camel-aws-sns-starter/src/main/java/org/apache/camel/component/aws/sns/springboot/SnsComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-aws-sns-starter/src/main/java/org/apache/camel/component/aws/sns/springboot/SnsComponentConfiguration.java
@@ -164,6 +164,15 @@ public class SnsComponentConfiguration
          * not
          */
         private Boolean subscribeSNStoSQS = false;
+        /**
+         * The ID of an AWS-managed customer master key (CMK) for Amazon SNS or
+         * a custom CMK.
+         */
+        private String kmsMasterKeyId;
+        /**
+         * Define if Server Side Encryption is enabled or not on the topic
+         */
+        private Boolean serverSideEncryptionEnabled = false;
 
         public String getSubject() {
             return subject;
@@ -276,5 +285,22 @@ public class SnsComponentConfiguration
         public void setSubscribeSNStoSQS(Boolean subscribeSNStoSQS) {
             this.subscribeSNStoSQS = subscribeSNStoSQS;
         }
+
+        public String getKmsMasterKeyId() {
+            return kmsMasterKeyId;
+        }
+
+        public void setKmsMasterKeyId(String kmsMasterKeyId) {
+            this.kmsMasterKeyId = kmsMasterKeyId;
+        }
+
+        public Boolean getServerSideEncryptionEnabled() {
+            return serverSideEncryptionEnabled;
+        }
+
+        public void setServerSideEncryptionEnabled(
+                Boolean serverSideEncryptionEnabled) {
+            this.serverSideEncryptionEnabled = serverSideEncryptionEnabled;
+        }
     }
 }
\ No newline at end of file

Reply via email to