Skip to content

Commit c5ad781

Browse files
committed
build: fix compilation (#651)
1 parent a3a8f95 commit c5ad781

18 files changed

Lines changed: 75 additions & 48 deletions

File tree

extensions/common/aws/aws-s3-core/src/main/java/org/eclipse/edc/aws/s3/AwsSecretToken.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package org.eclipse.edc.aws.s3;
1616

1717
import com.fasterxml.jackson.annotation.JsonProperty;
18-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
1918

2019
import java.util.Objects;
2120

@@ -28,11 +27,6 @@ public AwsSecretToken(@JsonProperty("accessKeyId") String accessKeyId, @JsonProp
2827
this.secretAccessKey = secretAccessKey;
2928
}
3029

31-
@Override
32-
public long getExpiration() {
33-
return 0;
34-
}
35-
3630
public String getAccessKeyId() {
3731
return accessKeyId;
3832
}

extensions/common/aws/aws-s3-core/src/main/java/org/eclipse/edc/aws/s3/AwsTemporarySecretToken.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package org.eclipse.edc.aws.s3;
1616

1717
import com.fasterxml.jackson.annotation.JsonProperty;
18-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
1918

2019
public record AwsTemporarySecretToken(@JsonProperty("accessKeyId") String accessKeyId,
2120
@JsonProperty("secretAccessKey") String secretAccessKey,
@@ -26,8 +25,4 @@ public String sessionToken() {
2625
return sessionToken;
2726
}
2827

29-
@Override
30-
public long getExpiration() {
31-
return expiration();
32-
}
3328
}

extensions/common/aws/aws-s3-core/src/main/java/org/eclipse/edc/aws/s3/S3ClientRequest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package org.eclipse.edc.aws.s3;
1616

1717

18-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
19-
2018
public record S3ClientRequest(String region, String endpointOverride, SecretToken secretToken) {
2119

2220
public static S3ClientRequest from(String region, String endpointOverride) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright (c) 2026 Think-it GmbH
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Apache License, Version 2.0 which is available at
6+
* https://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* SPDX-License-Identifier: Apache-2.0
9+
*
10+
* Contributors:
11+
* Think-it GmbH - initial API and implementation
12+
*
13+
*/
14+
15+
package org.eclipse.edc.aws.s3;
16+
17+
public interface SecretToken {
18+
}

extensions/common/s3-copy-lib/src/main/java/org/eclipse/edc/aws/s3/copy/lib/S3CopyUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
import org.eclipse.edc.aws.s3.AwsSecretToken;
1818
import org.eclipse.edc.aws.s3.AwsTemporarySecretToken;
19+
import org.eclipse.edc.aws.s3.SecretToken;
1920
import org.eclipse.edc.aws.s3.spi.S3BucketSchema;
20-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
2121
import org.eclipse.edc.participantcontext.spi.service.ParticipantContextSupplier;
2222
import org.eclipse.edc.spi.result.ServiceResult;
2323
import org.eclipse.edc.spi.security.Vault;

extensions/data-plane/data-plane-aws-s3/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ plugins {
1919

2020
dependencies {
2121
api(libs.edc.spi.dataplane)
22+
api(libs.edc.spi.participant.context.single)
2223
implementation(libs.edc.lib.util)
2324
implementation(libs.edc.core.dataPlane.util)
2425
implementation(project(":extensions:common:aws:aws-s3-core"))

extensions/data-plane/data-plane-aws-s3/src/main/java/org/eclipse/edc/connector/dataplane/aws/s3/DataPlaneS3Extension.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.eclipse.edc.aws.s3.AwsClientProvider;
1818
import org.eclipse.edc.connector.dataplane.spi.pipeline.PipelineService;
19+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
1920
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
2021
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
2122
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
@@ -39,18 +40,16 @@ public class DataPlaneS3Extension implements ServiceExtension {
3940

4041
@Inject
4142
private PipelineService pipelineService;
42-
4343
@Inject
4444
private AwsClientProvider awsClientProvider;
45-
4645
@Inject
4746
private Vault vault;
48-
4947
@Inject
5048
private TypeManager typeManager;
51-
5249
@Inject
5350
private DataAddressValidatorRegistry validator;
51+
@Inject
52+
private SingleParticipantContextSupplier singleParticipantContextSupplier;
5453

5554
@Override
5655
public String name() {
@@ -71,7 +70,7 @@ public void initialize(ServiceExtensionContext context) {
7170
var sourceFactory = new S3DataSourceFactory(awsClientProvider, vault, typeManager.getMapper(), validator);
7271
pipelineService.registerFactory(sourceFactory);
7372

74-
var sinkFactory = new S3DataSinkFactory(awsClientProvider, executorService, monitor, vault, typeManager.getMapper(), chunkSizeInBytes, validator);
73+
var sinkFactory = new S3DataSinkFactory(awsClientProvider, executorService, monitor, vault, typeManager.getMapper(), chunkSizeInBytes, validator, singleParticipantContextSupplier);
7574
pipelineService.registerFactory(sinkFactory);
7675
}
7776

extensions/data-plane/data-plane-aws-s3/src/main/java/org/eclipse/edc/connector/dataplane/aws/s3/S3DataSinkFactory.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,23 @@
2121
import org.eclipse.edc.aws.s3.AwsSecretToken;
2222
import org.eclipse.edc.aws.s3.AwsTemporarySecretToken;
2323
import org.eclipse.edc.aws.s3.S3ClientRequest;
24+
import org.eclipse.edc.aws.s3.SecretToken;
2425
import org.eclipse.edc.aws.s3.spi.S3BucketSchema;
2526
import org.eclipse.edc.aws.s3.validation.S3DataAddressCredentialsValidator;
26-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
2727
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSink;
2828
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSinkFactory;
29+
import org.eclipse.edc.participantcontext.spi.service.ParticipantContextSupplier;
2930
import org.eclipse.edc.spi.EdcException;
3031
import org.eclipse.edc.spi.monitor.Monitor;
3132
import org.eclipse.edc.spi.result.Result;
3233
import org.eclipse.edc.spi.security.Vault;
3334
import org.eclipse.edc.spi.types.domain.DataAddress;
3435
import org.eclipse.edc.spi.types.domain.transfer.DataFlowStartMessage;
35-
import org.eclipse.edc.util.string.StringUtils;
3636
import org.eclipse.edc.validator.spi.DataAddressValidatorRegistry;
3737
import org.eclipse.edc.validator.spi.ValidationResult;
3838
import org.eclipse.edc.validator.spi.Validator;
3939
import org.jetbrains.annotations.NotNull;
40+
import org.jetbrains.annotations.Nullable;
4041

4142
import java.io.IOException;
4243
import java.util.concurrent.ExecutorService;
@@ -60,16 +61,19 @@ public class S3DataSinkFactory implements DataSinkFactory {
6061
private final ObjectMapper objectMapper;
6162
private final int chunkSizeInBytes;
6263
private final DataAddressValidatorRegistry dataAddressValidator;
64+
private final ParticipantContextSupplier singleParticipantContextSupplier;
6365

6466
public S3DataSinkFactory(AwsClientProvider clientProvider, ExecutorService executorService, Monitor monitor, Vault vault,
65-
ObjectMapper objectMapper, int chunkSizeInBytes, DataAddressValidatorRegistry dataAddressValidator) {
67+
ObjectMapper objectMapper, int chunkSizeInBytes, DataAddressValidatorRegistry dataAddressValidator,
68+
ParticipantContextSupplier singleParticipantContextSupplier) {
6669
this.clientProvider = clientProvider;
6770
this.executorService = executorService;
6871
this.monitor = monitor;
6972
this.vault = vault;
7073
this.objectMapper = objectMapper;
7174
this.chunkSizeInBytes = chunkSizeInBytes;
7275
this.dataAddressValidator = dataAddressValidator;
76+
this.singleParticipantContextSupplier = singleParticipantContextSupplier;
7377
}
7478

7579
@Override
@@ -109,10 +113,7 @@ public DataSink createSink(DataFlowStartMessage request) {
109113
private S3ClientRequest createS3ClientRequest(DataAddress address) {
110114
var endpointOverride = address.getStringProperty(ENDPOINT_OVERRIDE);
111115
var region = address.getStringProperty(REGION);
112-
var awsSecretToken = ofNullable(address.getKeyName())
113-
.filter(keyName -> !StringUtils.isNullOrBlank(keyName))
114-
.map(vault::resolveSecret)
115-
.filter(secret -> !StringUtils.isNullOrBlank(secret))
116+
var awsSecretToken = ofNullable(getSecret(address))
116117
.map(this::deserializeSecretToken);
117118

118119
if (awsSecretToken.isPresent()) {
@@ -125,7 +126,24 @@ private S3ClientRequest createS3ClientRequest(DataAddress address) {
125126
return S3ClientRequest.from(region, endpointOverride);
126127
}
127128
}
128-
129+
130+
private @Nullable String getSecret(DataAddress dataAddress) {
131+
var addressSecret = dataAddress.getStringProperty(DataAddress.EDC_DATA_ADDRESS_SECRET);
132+
if (addressSecret != null) {
133+
return addressSecret;
134+
}
135+
136+
var keyName = dataAddress.getKeyName();
137+
if (keyName == null) {
138+
return null;
139+
}
140+
141+
var participantContext = singleParticipantContextSupplier.get()
142+
.orElseThrow(f -> new EdcException("Failed to obtain participant context for data sink creation"));
143+
144+
return vault.resolveSecret(participantContext.getParticipantContextId(), keyName);
145+
}
146+
129147
private SecretToken deserializeSecretToken(String secret) {
130148
try {
131149
var tree = objectMapper.readTree(secret);

extensions/data-plane/data-plane-aws-s3/src/main/java/org/eclipse/edc/connector/dataplane/aws/s3/S3DataSourceFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.eclipse.edc.aws.s3.AwsSecretToken;
2222
import org.eclipse.edc.aws.s3.AwsTemporarySecretToken;
2323
import org.eclipse.edc.aws.s3.S3ClientRequest;
24+
import org.eclipse.edc.aws.s3.SecretToken;
2425
import org.eclipse.edc.aws.s3.spi.S3BucketSchema;
2526
import org.eclipse.edc.aws.s3.validation.S3DataAddressCredentialsValidator;
26-
import org.eclipse.edc.connector.controlplane.transfer.spi.types.SecretToken;
2727
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSource;
2828
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSourceFactory;
2929
import org.eclipse.edc.spi.EdcException;

extensions/data-plane/data-plane-aws-s3/src/test/java/org/eclipse/edc/connector/dataplane/aws/s3/S3DataPlaneIntegrationTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.eclipse.edc.aws.s3.testfixtures.S3TestClient;
2020
import org.eclipse.edc.json.JacksonTypeManager;
2121
import org.eclipse.edc.junit.annotations.EndToEndTest;
22+
import org.eclipse.edc.participantcontext.spi.types.ParticipantContext;
23+
import org.eclipse.edc.spi.result.ServiceResult;
2224
import org.eclipse.edc.spi.types.domain.DataAddress;
2325
import org.eclipse.edc.spi.types.domain.transfer.DataFlowStartMessage;
2426
import org.eclipse.edc.validator.spi.DataAddressValidatorRegistry;
@@ -89,7 +91,9 @@ void setup() {
8991
var typeManager = new JacksonTypeManager();
9092
var chunkSizeInBytes = 1024 * 1024 * 20;
9193
sourceFactory = new S3DataSourceFactory(sourceClient.getClientProvider(), mock(), typeManager.getMapper(), validator);
92-
sinkFactory = new S3DataSinkFactory(destinationClient.getClientProvider(), Executors.newSingleThreadExecutor(), mock(), mock(), typeManager.getMapper(), chunkSizeInBytes, validator);
94+
sinkFactory = new S3DataSinkFactory(destinationClient.getClientProvider(), Executors.newSingleThreadExecutor(),
95+
mock(), mock(), typeManager.getMapper(), chunkSizeInBytes, validator,
96+
() -> ServiceResult.success(ParticipantContext.Builder.newInstance().participantContextId("id").identity("any").build()));
9397

9498
sourceClient.createBucket(sourceBucketName);
9599
destinationClient.createBucket(destinationBucketName);
@@ -111,7 +115,7 @@ void shouldCopyEntireS3Bucket() {
111115
objectNames.add(OBJECT_PREFIX + OBJECT_NAME);
112116
objectNames.add(OBJECT_FOLDER_NAME + OBJECT_PREFIX + OBJECT_NAME);
113117

114-
for (String objectName : objectNames) {
118+
for (var objectName : objectNames) {
115119
sourceClient.putStringOnBucket(sourceBucketName, objectName, objectContent);
116120
}
117121

0 commit comments

Comments
 (0)