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