You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/08/06 06:43:59 UTC
[camel] 01/05: CAMEL-15374 - Camel-AWS2-STS: Add more operation to
the producer, getSessionToken
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 <an...@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");
}
};
}