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/08/31 13:04:13 UTC

[camel] 01/03: Camel-AWS-Secrets-Manager: Added RestoreSecret Operation

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

commit a6c9fd7e1beb8560c8ca8ed476a7920c2782a968
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Aug 31 14:56:06 2021 +0200

    Camel-AWS-Secrets-Manager: Added RestoreSecret Operation
---
 .../secretsmanager/SecretsManagerOperations.java   |  1 +
 .../aws/secretsmanager/SecretsManagerProducer.java | 47 ++++++++++++++--------
 2 files changed, 31 insertions(+), 17 deletions(-)

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 7dbafed..c8bc028 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
@@ -25,5 +25,6 @@ public enum SecretsManagerOperations {
     deleteSecret,
     rotateSecret,
     updateSecret,
+    restoreSecret,
     replicateSecretToRegions
 }
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 0a61355..5dc24dc 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
@@ -30,24 +30,8 @@ import org.slf4j.LoggerFactory;
 import software.amazon.awssdk.awscore.exception.AwsServiceException;
 import software.amazon.awssdk.core.SdkBytes;
 import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
-import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.CreateSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.DeleteSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretRequest;
-import software.amazon.awssdk.services.secretsmanager.model.DescribeSecretResponse;
-import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
-import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
-import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest;
+import software.amazon.awssdk.services.secretsmanager.model.*;
 import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest.Builder;
-import software.amazon.awssdk.services.secretsmanager.model.ListSecretsResponse;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicaRegionType;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsRequest;
-import software.amazon.awssdk.services.secretsmanager.model.ReplicateSecretToRegionsResponse;
-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
@@ -90,6 +74,9 @@ public class SecretsManagerProducer extends DefaultProducer {
             case replicateSecretToRegions:
                 replicateSecretToRegions(getEndpoint().getSecretsManagerClient(), exchange);
                 break;
+            case restoreSecret:
+                restoreSecret(getEndpoint().getSecretsManagerClient(), exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -371,6 +358,32 @@ public class SecretsManagerProducer extends DefaultProducer {
         message.setBody(result);
     }
 
+    private void restoreSecret(SecretsManagerClient secretsManagerClient, Exchange exchange)
+            throws InvalidPayloadException {
+        RestoreSecretRequest request = null;
+        RestoreSecretResponse result;
+        if (getConfiguration().isPojoRequest()) {
+            request = exchange.getIn().getMandatoryBody(RestoreSecretRequest.class);
+        } else {
+            RestoreSecretRequest.Builder builder = RestoreSecretRequest.builder();
+            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");
+            }
+            request = builder.build();
+        }
+        try {
+            result = secretsManagerClient.restoreSecret(request);
+        } catch (AwsServiceException ase) {
+            LOG.trace("Restore Secret value 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();
     }