diff --git a/sources/core/pom.xml b/sources/core/pom.xml index 747126a..70f89fe 100644 --- a/sources/core/pom.xml +++ b/sources/core/pom.xml @@ -22,11 +22,11 @@ tools.dynamia.modules.entityfiles.parent tools.dynamia.modules - 7.2.2 + 7.2.3 Dynamia Modules - EntityFiles - Core tools.dynamia.modules.entityfiles - 7.2.2 + 7.2.3 https://www.dynamia.tools/modules/entityfiles diff --git a/sources/pom.xml b/sources/pom.xml index bac7f50..e8f7fee 100644 --- a/sources/pom.xml +++ b/sources/pom.xml @@ -22,7 +22,7 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles.parent pom - 7.2.2 + 7.2.3 Dynamia Modules - EntityFiles https://dynamia.tools/modules/entityfiles DynamiaTools extension to attach files to entities diff --git a/sources/s3/pom.xml b/sources/s3/pom.xml index fac8b89..fa81ea9 100644 --- a/sources/s3/pom.xml +++ b/sources/s3/pom.xml @@ -23,12 +23,12 @@ tools.dynamia.modules tools.dynamia.modules.entityfiles.parent - 7.2.2 + 7.2.3 Dynamia Modules - EntityFiles - S3 tools.dynamia.modules.entityfiles.s3 - 7.2.2 + 7.2.3 https://www.dynamia.tools/modules/entityfiles diff --git a/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3EntityFileStorage.java b/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3EntityFileStorage.java index 1549714..e8bbe66 100644 --- a/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3EntityFileStorage.java +++ b/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3EntityFileStorage.java @@ -65,6 +65,7 @@ public class S3EntityFileStorage implements EntityFileStorage { public static final String AWS_S3_REGION = "AWS_S3_REGION"; public static final String AWS_S3_BUCKET = "AWS_S3_BUCKET"; private static final Logger log = LoggerFactory.getLogger(S3EntityFileStorage.class); + public static final int PRESIGNED_URL_TIMEOUT = 30; private final LoggingService logger = new SLF4JLoggingService(S3EntityFileStorage.class, "S3: "); private final SimpleCache URL_CACHE = new SimpleCache<>(); @@ -199,7 +200,8 @@ public StoredEntityFile download(EntityFile entityFile) { protected String generateSignedURL(String bucketName, String fileName) { - PresignedGetObjectRequest presignedRequest = S3Utils.generatePresignedObjetRequest(bucketName, fileName, Duration.ofMinutes(30)); + PresignedGetObjectRequest presignedRequest = S3Utils.generatePresignedObjetRequest(bucketName, fileName, Duration.ofMinutes(PRESIGNED_URL_TIMEOUT) + , getAccessKey(), getSecretKey(), getRegion()); logger.info("Presigned URL: " + presignedRequest.url().toString()); logger.info("HTTP method: " + presignedRequest.httpRequest().method()); diff --git a/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3Utils.java b/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3Utils.java index 4f5fc82..c71adb5 100644 --- a/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3Utils.java +++ b/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3Utils.java @@ -2,6 +2,7 @@ import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials; +import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; @@ -35,6 +36,17 @@ public static AwsCredentials getCredentials(String accessKey, String secretKey) return AwsBasicCredentials.create(accessKey, secretKey); } + /** + * Get credentials provider from access key and secret key + * + * @param accessKey the access key + * @param secretKey the secret key + * @return the aws credentials provider + */ + public static AwsCredentialsProvider credentialsProvider(String accessKey, String secretKey) { + return () -> getCredentials(accessKey, secretKey); + } + /** * Build S3AsyncClient * @@ -89,11 +101,18 @@ public static CompletableFuture deleteFile(S3AsyncClient s * @param bucketName the bucket name * @param key the key * @param duration the duration + * @param accessKey the access key + * @param secretKey the secret key + * @param region the region * @return the presigned URL */ - public static PresignedGetObjectRequest generatePresignedObjetRequest(String bucketName, String key, Duration duration) { + public static PresignedGetObjectRequest generatePresignedObjetRequest(String bucketName, String key, Duration duration, + String accessKey, String secretKey, String region) { - try (S3Presigner presigner = S3Presigner.create()) { + try (S3Presigner presigner = S3Presigner.builder() + .credentialsProvider(credentialsProvider(accessKey, secretKey)) + .region(Region.of(region)) + .build()) { GetObjectRequest objectRequest = GetObjectRequest.builder() .bucket(bucketName) diff --git a/sources/ui/pom.xml b/sources/ui/pom.xml index 32ee32b..5cef8c3 100644 --- a/sources/ui/pom.xml +++ b/sources/ui/pom.xml @@ -22,11 +22,11 @@ tools.dynamia.modules.entityfiles.parent tools.dynamia.modules - 7.2.2 + 7.2.3 Dynamia Modules - EntityFiles UI tools.dynamia.modules.entityfiles.ui - 7.2.2 + 7.2.3 https://www.dynamia.tools/modules/entityfiles