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 <anco...@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(); }