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 53f11ffd97bb605b6f8bf3be9734f39420e6762f Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Thu Aug 27 08:39:52 2020 +0200 CAMEL-15374 - Camel-AWS2-STS: Add more operation to the producer, getFederationToken --- .../camel/component/aws2/sts/STS2Constants.java | 1 + .../camel/component/aws2/sts/STS2Operations.java | 3 +- .../camel/component/aws2/sts/STS2Producer.java | 40 ++++++++++++++++++++++ .../component/aws2/sts/AmazonSTSClientMock.java | 9 +++++ .../camel/component/aws2/sts/STS2ProducerTest.java | 20 +++++++++++ 5 files changed, 72 insertions(+), 1 deletion(-) diff --git a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java index fb2868f..79a2cb5 100644 --- a/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java +++ b/components/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java @@ -23,4 +23,5 @@ public interface STS2Constants { String OPERATION = "CamelAwsStsOperation"; String ROLE_ARN = "CamelAwsStsRoleArn"; String ROLE_SESSION_NAME = "CamelAwsStsRoleSessionName"; + String FEDERATED_NAME = "CamelAwsStsFederatedName"; } 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 9d7c4b6..dda62e8 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 @@ -19,5 +19,6 @@ package org.apache.camel.component.aws2.sts; public enum STS2Operations { assumeRole, - getSessionToken + getSessionToken, + getFederationToken } 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 816d83c..1d888c5 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.GetFederationTokenRequest; +import software.amazon.awssdk.services.sts.model.GetFederationTokenResponse; import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest; import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse; @@ -55,6 +57,9 @@ public class STS2Producer extends DefaultProducer { case getSessionToken: getSessionToken(getEndpoint().getStsClient(), exchange); break; + case getFederationToken: + getFederationToken(getEndpoint().getStsClient(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -154,6 +159,41 @@ public class STS2Producer extends DefaultProducer { message.setBody(result); } } + + private void getFederationToken(StsClient stsClient, Exchange exchange) throws InvalidPayloadException { + if (getConfiguration().isPojoRequest()) { + Object payload = exchange.getIn().getMandatoryBody(); + if (payload instanceof GetFederationTokenRequest) { + GetFederationTokenResponse result; + try { + GetFederationTokenRequest request = (GetFederationTokenRequest) payload; + result = stsClient.getFederationToken(request); + } catch (AwsServiceException ase) { + LOG.trace("Get Federation Token command returned the error code {}", ase.awsErrorDetails().errorCode()); + throw ase; + } + Message message = getMessageForResponse(exchange); + message.setBody(result); + } + } else { + GetFederationTokenRequest.Builder builder = GetFederationTokenRequest.builder(); + GetFederationTokenResponse result; + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(STS2Constants.FEDERATED_NAME))) { + String federatedName = exchange.getIn().getHeader(STS2Constants.FEDERATED_NAME, String.class); + builder.name(federatedName); + } else { + throw new IllegalArgumentException("Role ARN needs to be specified for assumeRole operation"); + } + try { + result = stsClient.getFederationToken(builder.build()); + } catch (AwsServiceException ase) { + LOG.trace("Get Federation 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 ba8facb..1f4eab4 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 @@ -21,6 +21,8 @@ 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.GetFederationTokenRequest; +import software.amazon.awssdk.services.sts.model.GetFederationTokenResponse; import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest; import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse; @@ -40,6 +42,13 @@ public class AmazonSTSClientMock implements StsClient { .credentials(Credentials.builder().accessKeyId("xxx").secretAccessKey("yyy").sessionToken("test").build()) .build(); } + + @Override + public GetFederationTokenResponse getFederationToken(GetFederationTokenRequest getFederationTokenRequest) { + return GetFederationTokenResponse.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 683065a..dd42751 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.GetFederationTokenResponse; import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -72,6 +73,23 @@ public class STS2ProducerTest extends CamelTestSupport { GetSessionTokenResponse resultGet = (GetSessionTokenResponse) exchange.getIn().getBody(); assertEquals("xxx", resultGet.credentials().accessKeyId()); } + + @Test + public void stsGetFederationTokenTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:getFederationToken", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(STS2Constants.OPERATION, STS2Operations.getFederationToken); + } + }); + + assertMockEndpointsSatisfied(); + + GetFederationTokenResponse resultGet = (GetFederationTokenResponse) exchange.getIn().getBody(); + assertEquals("xxx", resultGet.credentials().accessKeyId()); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -82,6 +100,8 @@ public class STS2ProducerTest extends CamelTestSupport { .to("mock:result"); from("direct:getSessionToken").to("aws2-sts://test?stsClient=#amazonStsClient&operation=getSessionToken") .to("mock:result"); + from("direct:getFederationToken").to("aws2-sts://test?stsClient=#amazonStsClient&operation=getFederationToken") + .to("mock:result"); } }; }