You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/03/19 07:28:06 UTC

[camel] 07/09: CAMEL-16323 - Create a Camel-AWS-Secret-Manager component - updateSecret operation

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 cf2f461adb38f29d0ed4b56bc7d4c519ba45f5ba
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 19 08:14:47 2021 +0100

    CAMEL-16323 - Create a Camel-AWS-Secret-Manager component - updateSecret operation
---
 .../secretsmanager/SecretsManagerOperations.java   |  3 +-
 .../aws/secretsmanager/SecretsManagerProducer.java | 41 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
index 7621497..22579b0 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerOperations.java
@@ -23,5 +23,6 @@ public enum SecretsManagerOperations {
     getSecret,
     describeSecret,
     deleteSecret,
-    rotateSecret
+    rotateSecret,
+    updateSecret
 }
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
index 7a11f01..46fe0e3 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducer.java
@@ -43,6 +43,8 @@ import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest.B
 import software.amazon.awssdk.services.secretsmanager.model.ListSecretsResponse;
 import software.amazon.awssdk.services.secretsmanager.model.RotateSecretRequest;
 import software.amazon.awssdk.services.secretsmanager.model.RotateSecretResponse;
+import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretRequest;
+import software.amazon.awssdk.services.secretsmanager.model.UpdateSecretResponse;
 
 /**
  * A Producer which sends messages to the Amazon Secrets Manager Service SDK v2
@@ -79,6 +81,9 @@ public class SecretsManagerProducer extends DefaultProducer {
             case rotateSecret:
                 rotateSecret(getEndpoint().getSecretsManagerClient(), exchange);
                 break;
+            case updateSecret:
+                updateSecret(getEndpoint().getSecretsManagerClient(), exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -302,6 +307,42 @@ public class SecretsManagerProducer extends DefaultProducer {
         message.setBody(result);
     }
 
+    private void updateSecret(SecretsManagerClient secretsManagerClient, Exchange exchange)
+            throws InvalidPayloadException {
+        UpdateSecretRequest request = null;
+        UpdateSecretResponse result;
+        if (getConfiguration().isPojoRequest()) {
+            request = exchange.getIn().getMandatoryBody(UpdateSecretRequest.class);
+        } else {
+            UpdateSecretRequest.Builder builder = UpdateSecretRequest.builder();
+            String payload = exchange.getIn().getMandatoryBody(String.class);
+            if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SecretsManagerConstants.SECRET_ID))) {
+                String secretId = exchange.getIn().getHeader(SecretsManagerConstants.SECRET_ID, String.class);
+                builder.secretId(secretId);
+            } else {
+                throw new IllegalArgumentException("Secret Id must be specified");
+            }
+            if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SecretsManagerConstants.SECRET_DESCRIPTION))) {
+                String descr = exchange.getIn().getHeader(SecretsManagerConstants.SECRET_DESCRIPTION, String.class);
+                builder.description(descr);
+            }
+            if (getConfiguration().isBinaryPayload()) {
+                builder.secretBinary(SdkBytes.fromUtf8String(Base64.getEncoder().encodeToString(payload.getBytes())));
+            } else {
+                builder.secretString((String) payload);
+            }
+            request = builder.build();
+        }
+        try {
+            result = secretsManagerClient.updateSecret(request);
+        } catch (AwsServiceException ase) {
+            LOG.trace("Update Secret command returned the error code {}", ase.awsErrorDetails().errorCode());
+            throw ase;
+        }
+        Message message = getMessageForResponse(exchange);
+        message.setBody(result);
+    }
+
     public static Message getMessageForResponse(final Exchange exchange) {
         return exchange.getMessage();
     }