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 83b9ba8795cc7915c560f7fa17f42a817598acdc
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Mar 15 13:57:32 2021 +0100

    CAMEL-16323 - Create a Camel-AWS-Secret-Manager component - describeSecret 
operation refactor
---
 .../docs/aws-secrets-manager-component.adoc        |  4 +--
 .../aws/secretsmanager/aws-secrets-manager.json    |  4 +--
 .../main/docs/aws-secrets-manager-component.adoc   |  4 +--
 .../secretsmanager/SecretsManagerOperations.java   |  3 +-
 .../aws/secretsmanager/SecretsManagerProducer.java | 34 ++++++++++++++++++++++
 .../dsl/SecretsManagerEndpointBuilderFactory.java  |  3 +-
 .../ROOT/pages/aws-secrets-manager-component.adoc  |  4 +--
 7 files changed, 46 insertions(+), 10 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/aws-secrets-manager-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/aws-secrets-manager-component.adoc
index 9fcb666..b27d154 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/aws-secrets-manager-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/aws-secrets-manager-component.adoc
@@ -52,7 +52,7 @@ The AWS Secrets Manager component supports 16 options, which 
are listed below.
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *configuration* (producer) | Component configuration |  | 
SecretsManagerConfiguration
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String
@@ -98,7 +98,7 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String
diff --git 
a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
 
b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
index 81d65bd..a390da8 100644
--- 
a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
+++ 
b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
@@ -25,7 +25,7 @@
     "binaryPayload": { "kind": "property", "displayName": "Binary Payload", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "Set if the secret is 
binary or not" },
     "configuration": { "kind": "property", "displayName": "Configuration", 
"group": "producer", "label": "", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Component configuration" },
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during star [...]
-    "operation": { "kind": "property", "displayName": "Operation", "group": 
"producer", "label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", 
"enum": [ "listSecrets", "createSecret", "getSecret" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configurat [...]
+    "operation": { "kind": "property", "displayName": "Operation", "group": 
"producer", "label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", 
"enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationF [...]
     "overrideEndpoint": { "kind": "property", "displayName": "Override 
Endpoint", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overidding the endpoint. This option needs to be used in combin [...]
     "pojoRequest": { "kind": "property", "displayName": "Pojo Request", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
     "proxyHost": { "kind": "property", "displayName": "Proxy Host", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "To define a proxy host 
when instantiating the Secrets Manager client" },
@@ -43,7 +43,7 @@
     "label": { "kind": "path", "displayName": "Label", "group": "producer", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
     "binaryPayload": { "kind": "parameter", "displayName": "Binary Payload", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "Set if the secret is 
binary or not" },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start 
Producer", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Whether the producer 
should be started lazy (on the first message). By starting lazy you can use 
this to allow CamelContext and routes to startup in situations where a producer 
may otherwise fail during sta [...]
-    "operation": { "kind": "parameter", "displayName": "Operation", "group": 
"producer", "label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", 
"enum": [ "listSecrets", "createSecret", "getSecret" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configura [...]
+    "operation": { "kind": "parameter", "displayName": "Operation", "group": 
"producer", "label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerOperations", 
"enum": [ "listSecrets", "createSecret", "getSecret", "describeSecret" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configuration [...]
     "overrideEndpoint": { "kind": "parameter", "displayName": "Override 
Endpoint", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overidding the endpoint. This option needs to be used in combi [...]
     "pojoRequest": { "kind": "parameter", "displayName": "Pojo Request", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
     "proxyHost": { "kind": "parameter", "displayName": "Proxy Host", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", 
"configurationField": "configuration", "description": "To define a proxy host 
when instantiating the Secrets Manager client" },
diff --git 
a/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
 
b/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
index 9fcb666..b27d154 100644
--- 
a/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
+++ 
b/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
@@ -52,7 +52,7 @@ The AWS Secrets Manager component supports 16 options, which 
are listed below.
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *configuration* (producer) | Component configuration |  | 
SecretsManagerConfiguration
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String
@@ -98,7 +98,7 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String
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 78163a8..481da59 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
@@ -20,5 +20,6 @@ public enum SecretsManagerOperations {
 
     listSecrets,
     createSecret,
-    getSecret
+    getSecret,
+    describeSecret
 }
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 7d0ebda..5e2209f 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
@@ -32,6 +32,8 @@ 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.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;
@@ -64,6 +66,9 @@ public class SecretsManagerProducer extends DefaultProducer {
             case getSecret:
                 getSecret(getEndpoint().getSecretsManagerClient(), exchange);
                 break;
+            case describeSecret:
+                describeSecret(getEndpoint().getSecretsManagerClient(), 
exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -195,6 +200,35 @@ public class SecretsManagerProducer extends 
DefaultProducer {
         }
     }
 
+    private void describeSecret(SecretsManagerClient secretsManagerClient, 
Exchange exchange)
+            throws InvalidPayloadException {
+        DescribeSecretRequest request = null;
+        DescribeSecretResponse result;
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof DescribeSecretRequest) {
+                request = (DescribeSecretRequest) payload;
+            }
+        } else {
+            DescribeSecretRequest.Builder builder = 
DescribeSecretRequest.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.describeSecret(request);
+        } catch (AwsServiceException ase) {
+            LOG.trace("Describe 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();
     }
diff --git 
a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SecretsManagerEndpointBuilderFactory.java
 
b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SecretsManagerEndpointBuilderFactory.java
index 467d164..c37de27 100644
--- 
a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SecretsManagerEndpointBuilderFactory.java
+++ 
b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SecretsManagerEndpointBuilderFactory.java
@@ -431,7 +431,8 @@ public interface SecretsManagerEndpointBuilderFactory {
     enum SecretsManagerOperations {
         listSecrets,
         createSecret,
-        getSecret;
+        getSecret,
+        describeSecret;
     }
 
     /**
diff --git 
a/docs/components/modules/ROOT/pages/aws-secrets-manager-component.adoc 
b/docs/components/modules/ROOT/pages/aws-secrets-manager-component.adoc
index cdf9684..18ac8ce 100644
--- a/docs/components/modules/ROOT/pages/aws-secrets-manager-component.adoc
+++ b/docs/components/modules/ROOT/pages/aws-secrets-manager-component.adoc
@@ -54,7 +54,7 @@ The AWS Secrets Manager component supports 16 options, which 
are listed below.
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *configuration* (producer) | Component configuration |  | 
SecretsManagerConfiguration
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String
@@ -100,7 +100,7 @@ with the following path and query parameters:
 | Name | Description | Default | Type
 | *binaryPayload* (producer) | Set if the secret is binary or not | false | 
boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy 
(on the first message). By starting lazy you can use this to allow CamelContext 
and routes to startup in situations where a producer may otherwise fail during 
starting and cause the route to fail being started. By deferring this startup 
to be lazy then the startup failure can be handled during routing messages via 
Camel's routing error handlers. Beware that when the first message is processed 
then creating and [...]
-| *operation* (producer) | *Required* The operation to perform. There are 3 
enums and the value can be one of: listSecrets, createSecret, getSecret |  | 
SecretsManagerOperations
+| *operation* (producer) | *Required* The operation to perform. There are 4 
enums and the value can be one of: listSecrets, createSecret, getSecret, 
describeSecret |  | SecretsManagerOperations
 | *overrideEndpoint* (producer) | Set the need for overidding the endpoint. 
This option needs to be used in combination with uriEndpointOverride option | 
false | boolean
 | *pojoRequest* (producer) | If we want to use a POJO request as body or not | 
false | boolean
 | *proxyHost* (producer) | To define a proxy host when instantiating the 
Secrets Manager client |  | String

Reply via email to