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/27 06:57:14 UTC
[camel] 01/06: CAMEL-15374 - Camel-AWS2-STS: Add more operation to
the producer, getFederationToken
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 <an...@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");
}
};
}