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"); } }; }