From 4a0d2ccbf0f8e4f7e74ff67b1be65de4ae7e5331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Beno=C3=AEt=20JOUBERT?= Date: Wed, 18 Mar 2026 15:56:13 +0100 Subject: [PATCH] chore: #ENABLING-659, add unsecure ssl option --- common/src/main/java/org/entcore/common/s3/S3Client.java | 7 ++++++- .../org/entcore/common/s3/utils/ResilientHttpClient.java | 8 ++++++++ .../java/org/entcore/common/storage/StorageFactory.java | 9 ++++++--- .../common/storage/impl/S3FallbackS3FSStorage.java | 7 ++++++- .../common/storage/impl/S3FallbackS3LegacyStorage.java | 6 ++++-- .../common/storage/impl/S3FallbackS3S3Storage.java | 6 ++++-- .../java/org/entcore/common/storage/impl/S3Storage.java | 6 +++++- .../src/main/java/org/entcore/directory/Directory.java | 3 ++- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/org/entcore/common/s3/S3Client.java b/common/src/main/java/org/entcore/common/s3/S3Client.java index 32eb668455..6143fed9eb 100644 --- a/common/src/main/java/org/entcore/common/s3/S3Client.java +++ b/common/src/main/java/org/entcore/common/s3/S3Client.java @@ -85,6 +85,11 @@ public S3Client(Vertx vertx, URI uri, String accessKey, String secretKey, String public S3Client(Vertx vertx, URI uri, String accessKey, String secretKey, String region, String bucket, String ssec, boolean keepAlive, int timeout, int threshold, long openDelay, int poolSize) { + this(vertx, uri, accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize, false); + } + + public S3Client(Vertx vertx, URI uri, String accessKey, String secretKey, String region, String bucket, String ssec, boolean keepAlive, + int timeout, int threshold, long openDelay, int poolSize, boolean trustAll) { this.vertx = vertx; this.host = uri.getHost(); this.accessKey = accessKey; @@ -92,7 +97,7 @@ public S3Client(Vertx vertx, URI uri, String accessKey, String secretKey, String this.region = region; this.defaultBucket = bucket; this.ssec = ssec; - this.httpClient = new ResilientHttpClient(vertx, uri, keepAlive, timeout, threshold, openDelay, poolSize); + this.httpClient = new ResilientHttpClient(vertx, uri, keepAlive, timeout, threshold, openDelay, poolSize, trustAll); } public void getFileStats(String id, Handler> handler) { diff --git a/common/src/main/java/org/entcore/common/s3/utils/ResilientHttpClient.java b/common/src/main/java/org/entcore/common/s3/utils/ResilientHttpClient.java index 654677bd9d..f799f96789 100644 --- a/common/src/main/java/org/entcore/common/s3/utils/ResilientHttpClient.java +++ b/common/src/main/java/org/entcore/common/s3/utils/ResilientHttpClient.java @@ -25,11 +25,16 @@ public class ResilientHttpClient implements HttpClient { private final URI uri; private final boolean keepAlive; private final int poolSize; + private final boolean trustAll; private AtomicInteger errorsCount = new AtomicInteger(0); private AtomicBoolean closedCircuit = new AtomicBoolean(false); private Handler halfOpenHandler; public ResilientHttpClient(Vertx vertx, URI uri, boolean keepAlive, int timeout, int threshold, long openDelay, int poolSize) { + this(vertx, uri, keepAlive, timeout, threshold, openDelay, poolSize, false); + } + + public ResilientHttpClient(Vertx vertx, URI uri, boolean keepAlive, int timeout, int threshold, long openDelay, int poolSize, boolean trustAll) { this.vertx = vertx; this.timeout = timeout; this.threshold = threshold; @@ -37,6 +42,7 @@ public ResilientHttpClient(Vertx vertx, URI uri, boolean keepAlive, int timeout, this.uri = uri; this.keepAlive = keepAlive; this.poolSize = poolSize; + this.trustAll = trustAll; reconfigure(); } @@ -232,6 +238,8 @@ private void reconfigure() { .setDefaultPort(port) .setMaxPoolSize(poolSize) .setSsl("https".equals(uri.getScheme())) + .setTrustAll(trustAll) + .setVerifyHost(!trustAll) .setKeepAlive(keepAlive) .setConnectTimeout(timeout); this.httpClient = vertx.createHttpClient(options); diff --git a/common/src/main/java/org/entcore/common/storage/StorageFactory.java b/common/src/main/java/org/entcore/common/storage/StorageFactory.java index 46c1e13b8c..c0939dd8a7 100644 --- a/common/src/main/java/org/entcore/common/storage/StorageFactory.java +++ b/common/src/main/java/org/entcore/common/storage/StorageFactory.java @@ -148,8 +148,9 @@ public Storage getStorage() { int threshold = s3.getInteger("threshold", 100); long openDelay = s3.getLong("openDelay", 10000l); int poolSize = s3.getInteger("poolSize", 16); + boolean trustAll = s3.getBoolean("trustAll", false); try { - storage = new S3Storage(vertx, new URI(uri), accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize); + storage = new S3Storage(vertx, new URI(uri), accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize, trustAll); } catch (URISyntaxException e) { e.printStackTrace(); } @@ -205,8 +206,9 @@ else if (s3fallback != null) { final String accessKey = s3fallback.getString("access-key"); final String secretKey = s3fallback.getString("secret-key"); if (isNotEmpty(host) && isNotEmpty(name) && isNotEmpty(region) && isNotEmpty(accessKey) && isNotEmpty(secretKey)) { + final boolean trustAllFallback = s3fallback.getBoolean("trustAll", false); S3FallbackStorage s3FallbackStorage = new S3FallbackStorage( - vertx, host, name, multiBuckets, nbStorageFolder, region, accessKey, secretKey); + vertx, host, name, multiBuckets, nbStorageFolder, region, accessKey, secretKey, trustAllFallback); ((FileStorage) storage).setFallbackStorage(s3FallbackStorage); } } @@ -220,8 +222,9 @@ else if (s3fallbacks3fs != null) { final int bucketMaxAge = s3fallbacks3fs.getInteger("bucketMaxAge", 2); if (isNotEmpty(uri) && isNotEmpty(bucket) && isNotEmpty(region) && isNotEmpty(accessKey) && isNotEmpty(secretKey)) { + final boolean trustAllS3fs = s3fallbacks3fs.getBoolean("trustAll", false); S3FallbackS3FSStorage s3FallbackS3FSStorage = new S3FallbackS3FSStorage( - vertx, uri, bucket, region, accessKey, secretKey, ssecKey, bucketMaxAge); + vertx, uri, bucket, region, accessKey, secretKey, ssecKey, bucketMaxAge, trustAllS3fs); ((FileStorage) storage).setFallbackStorage(s3FallbackS3FSStorage); } } diff --git a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3FSStorage.java b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3FSStorage.java index f59ee2b3c2..52adc1d4c6 100644 --- a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3FSStorage.java +++ b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3FSStorage.java @@ -27,10 +27,15 @@ public class S3FallbackS3FSStorage implements FallbackStorage { private static final Logger log = LoggerFactory.getLogger(S3FallbackS3FSStorage.class); public S3FallbackS3FSStorage(Vertx vertx, String uri, String bucket, String region, String accessKey, String secretKey, String ssecKey, int bucketMaxAge) { + this(vertx, uri, bucket, region, accessKey, secretKey, ssecKey, bucketMaxAge, false); + } + + public S3FallbackS3FSStorage(Vertx vertx, String uri, String bucket, String region, String accessKey, String secretKey, String ssecKey, int bucketMaxAge, boolean trustAll) { this.bucket = bucket; this.bucketMaxAge = bucketMaxAge; - this.s3Client = new S3Client(vertx, URI.create(uri), accessKey, secretKey, region, bucket, ssecKey); + this.s3Client = new S3Client(vertx, URI.create(uri), accessKey, secretKey, region, bucket, ssecKey, + false, 10000, 100, 10000L, 16, trustAll); this.fs = vertx.fileSystem(); } diff --git a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3LegacyStorage.java b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3LegacyStorage.java index d0136aef5c..fc3ff7d767 100644 --- a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3LegacyStorage.java +++ b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3LegacyStorage.java @@ -27,8 +27,10 @@ public class S3FallbackS3LegacyStorage implements FallbackStorage { private static final Logger log = LoggerFactory.getLogger(S3FallbackS3LegacyStorage.class); public S3FallbackS3LegacyStorage(Vertx vertx, JsonObject s3, JsonObject s3fallback) { - this.s3Client = new S3Client(vertx, URI.create(s3.getString("uri")), s3.getString("accessKey"), s3.getString("secretKey"), s3.getString("region"), s3.getString("bucket"), s3.getString("ssec")); - this.s3FallbackClient = new S3Client(vertx, URI.create(s3fallback.getString("uri")), s3fallback.getString("accessKey"), s3fallback.getString("secretKey"), s3fallback.getString("region"), s3fallback.getString("bucket"), s3fallback.getString("ssec")); + this.s3Client = new S3Client(vertx, URI.create(s3.getString("uri")), s3.getString("accessKey"), s3.getString("secretKey"), s3.getString("region"), s3.getString("bucket"), s3.getString("ssec"), + false, 10000, 100, 10000L, 16, s3.getBoolean("trustAll", false)); + this.s3FallbackClient = new S3Client(vertx, URI.create(s3fallback.getString("uri")), s3fallback.getString("accessKey"), s3fallback.getString("secretKey"), s3fallback.getString("region"), s3fallback.getString("bucket"), s3fallback.getString("ssec"), + false, 10000, 100, 10000L, 16, s3fallback.getBoolean("trustAll", false)); this.bucket = s3fallback.getString("bucket"); } diff --git a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3S3Storage.java b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3S3Storage.java index bc8e2b80bf..14c566bcd3 100644 --- a/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3S3Storage.java +++ b/common/src/main/java/org/entcore/common/storage/impl/S3FallbackS3S3Storage.java @@ -27,8 +27,10 @@ public class S3FallbackS3S3Storage implements FallbackStorage { private static final Logger log = LoggerFactory.getLogger(S3FallbackS3S3Storage.class); public S3FallbackS3S3Storage(Vertx vertx, JsonObject s3, JsonObject s3fallback) { - this.s3Client = new S3Client(vertx, URI.create(s3.getString("uri")), s3.getString("accessKey"), s3.getString("secretKey"), s3.getString("region"), s3.getString("bucket"), s3.getString("ssec")); - this.s3FallbackClient = new S3Client(vertx, URI.create(s3fallback.getString("uri")), s3fallback.getString("accessKey"), s3fallback.getString("secretKey"), s3fallback.getString("region"), s3fallback.getString("bucket"), s3fallback.getString("ssec")); + this.s3Client = new S3Client(vertx, URI.create(s3.getString("uri")), s3.getString("accessKey"), s3.getString("secretKey"), s3.getString("region"), s3.getString("bucket"), s3.getString("ssec"), + false, 10000, 100, 10000L, 16, s3.getBoolean("trustAll", false)); + this.s3FallbackClient = new S3Client(vertx, URI.create(s3fallback.getString("uri")), s3fallback.getString("accessKey"), s3fallback.getString("secretKey"), s3fallback.getString("region"), s3fallback.getString("bucket"), s3fallback.getString("ssec"), + false, 10000, 100, 10000L, 16, s3fallback.getBoolean("trustAll", false)); this.bucket = s3fallback.getString("bucket"); this.bucketMaxAge = s3fallback.getInteger("bucketMaxAge", 2); diff --git a/common/src/main/java/org/entcore/common/storage/impl/S3Storage.java b/common/src/main/java/org/entcore/common/storage/impl/S3Storage.java index 483e44b666..0e81c5f6cb 100644 --- a/common/src/main/java/org/entcore/common/storage/impl/S3Storage.java +++ b/common/src/main/java/org/entcore/common/storage/impl/S3Storage.java @@ -71,8 +71,12 @@ public class S3Storage implements Storage { private static final Logger log = LoggerFactory.getLogger(S3Storage.class); public S3Storage(Vertx vertx, URI uri, String accessKey, String secretKey, String region, String bucket, String ssec, boolean keepAlive, int timeout, int threshold, long openDelay, int poolSize) { + this(vertx, uri, accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize, false); + } + + public S3Storage(Vertx vertx, URI uri, String accessKey, String secretKey, String region, String bucket, String ssec, boolean keepAlive, int timeout, int threshold, long openDelay, int poolSize, boolean trustAll) { this.bucket = bucket; - this.s3Client = new S3Client(vertx, uri, accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize); + this.s3Client = new S3Client(vertx, uri, accessKey, secretKey, region, bucket, ssec, keepAlive, timeout, threshold, openDelay, poolSize, trustAll); this.fs = vertx.fileSystem(); } diff --git a/directory/src/main/java/org/entcore/directory/Directory.java b/directory/src/main/java/org/entcore/directory/Directory.java index 5211c1b3cc..1274ad6c0f 100644 --- a/directory/src/main/java/org/entcore/directory/Directory.java +++ b/directory/src/main/java/org/entcore/directory/Directory.java @@ -112,7 +112,8 @@ public void handle(HttpServerRequest request) { s3.getInteger("timeout", 10000), s3.getInteger("threshold", 100), s3.getLong("openDelay", 10000l), - s3.getInteger("poolSize", 16) + s3.getInteger("poolSize", 16), + s3.getBoolean("trustAll", false) ); } catch (URISyntaxException e) { log.error("S3avatar URI error", e);