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 ded3d6ac51624393af4b01217e0901fcf77054c2
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Aug 6 08:37:11 2020 +0200

    CAMEL-15374 - Camel-AWS2-STS: Add more operation to the producer, 
getSessionToken
---
 .../camel/component/aws2/sts/STS2Operations.java   |  2 +-
 .../camel/component/aws2/sts/STS2Producer.java     | 34 ++++++++++++++++++++++
 .../component/aws2/sts/AmazonSTSClientMock.java    |  8 +++++
 .../camel/component/aws2/sts/STS2ProducerTest.java | 19 ++++++++++++
 4 files changed, 62 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Operations.java
 
b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Operations.java
index 83f8f62..1e0dfbb 100644
--- 
a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Operations.java
+++ 
b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Operations.java
@@ -18,5 +18,5 @@ package org.apache.camel.component.aws2.sts;
 
 public enum STS2Operations {
 
-    assumeRole
+    assumeRole, getSessionToken
 }
diff --git 
a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
 
b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
index b695f89..bfd7d83 100644
--- 
a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
+++ 
b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
@@ -30,6 +30,8 @@ import software.amazon.awssdk.services.sts.StsClient;
 import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
 import software.amazon.awssdk.services.sts.model.AssumeRoleRequest.Builder;
 import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
+import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest;
+import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse;
 
 /**
  * A Producer which sends messages to the Amazon STS Service SDK v2
@@ -51,6 +53,9 @@ public class STS2Producer extends DefaultProducer {
             case assumeRole:
                 assumeRole(getEndpoint().getStsClient(), exchange);
                 break;
+            case getSessionToken:
+                getSessionToken(getEndpoint().getStsClient(), exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -121,6 +126,35 @@ public class STS2Producer extends DefaultProducer {
             message.setBody(result);
         }
     }
+    
+    private void getSessionToken(StsClient stsClient, Exchange exchange) 
throws InvalidPayloadException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof GetSessionTokenRequest) {
+                GetSessionTokenResponse result;
+                try {
+                    GetSessionTokenRequest request = 
(GetSessionTokenRequest)payload;
+                    result = stsClient.getSessionToken(request);
+                } catch (AwsServiceException ase) {
+                    LOG.trace("Get Session Token command returned the error 
code {}", ase.awsErrorDetails().errorCode());
+                    throw ase;
+                }
+                Message message = getMessageForResponse(exchange);
+                message.setBody(result);
+            }
+        } else {
+            GetSessionTokenRequest.Builder builder = 
GetSessionTokenRequest.builder();
+            GetSessionTokenResponse result;
+            try {
+                result = stsClient.getSessionToken(builder.build());
+            } catch (AwsServiceException ase) {
+                LOG.trace("Get Session Token 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/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/AmazonSTSClientMock.java
 
b/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/AmazonSTSClientMock.java
index 769df94..94c9f9f 100644
--- 
a/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/AmazonSTSClientMock.java
+++ 
b/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/AmazonSTSClientMock.java
@@ -20,6 +20,9 @@ import software.amazon.awssdk.services.sts.StsClient;
 import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
 import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
 import software.amazon.awssdk.services.sts.model.AssumedRoleUser;
+import software.amazon.awssdk.services.sts.model.Credentials;
+import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest;
+import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse;
 
 public class AmazonSTSClientMock implements StsClient {
 
@@ -30,6 +33,11 @@ public class AmazonSTSClientMock implements StsClient {
     public AssumeRoleResponse assumeRole(AssumeRoleRequest assumeRoleRequest) {
         return 
AssumeRoleResponse.builder().assumedRoleUser(AssumedRoleUser.builder().arn("arn").build()).build();
     }
+    
+    @Override
+    public GetSessionTokenResponse getSessionToken(GetSessionTokenRequest 
getSessionTokenRequest) {
+        return 
GetSessionTokenResponse.builder().credentials(Credentials.builder().accessKeyId("xxx").secretAccessKey("yyy").sessionToken("test").build()).build();
+    }
 
     @Override
     public String serviceName() {
diff --git 
a/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
 
b/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
index 9ff8006..80e5c37 100644
--- 
a/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
+++ 
b/components/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
+import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -54,6 +55,23 @@ public class STS2ProducerTest extends CamelTestSupport {
         AssumeRoleResponse resultGet = 
(AssumeRoleResponse)exchange.getIn().getBody();
         assertEquals("arn", resultGet.assumedRoleUser().arn());
     }
+    
+    @Test
+    public void stsGetSessionTokenTest() throws Exception {
+
+        mock.expectedMessageCount(1);
+        Exchange exchange = template.request("direct:getSessionToken", new 
Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(STS2Constants.OPERATION, 
STS2Operations.getSessionToken);
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+
+        GetSessionTokenResponse resultGet = 
(GetSessionTokenResponse)exchange.getIn().getBody();
+        assertEquals("xxx", resultGet.credentials().accessKeyId());
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -61,6 +79,7 @@ public class STS2ProducerTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 
from("direct:assumeRole").to("aws2-sts://test?stsClient=#amazonStsClient&operation=assumeRole").to("mock:result");
+                
from("direct:getSessionToken").to("aws2-sts://test?stsClient=#amazonStsClient&operation=getSessionToken").to("mock:result");
             }
         };
     }

Reply via email to