From e257f02c00393b2411671cf7f4b1bedb8d311ec9 Mon Sep 17 00:00:00 2001 From: AnthonyRoss Date: Fri, 25 Jul 2025 12:03:46 -0500 Subject: [PATCH] fix: Add IPV4 Range Filtering for Backblaze B2 API Integration --- .../BackblazeDataTransferClientFactory.java | 8 ++++++- .../common/CustomIPv4DnsResolver.java | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/CustomIPv4DnsResolver.java diff --git a/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/BackblazeDataTransferClientFactory.java b/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/BackblazeDataTransferClientFactory.java index 65ddbaa88..b6a6cb8da 100644 --- a/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/BackblazeDataTransferClientFactory.java +++ b/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/BackblazeDataTransferClientFactory.java @@ -49,7 +49,13 @@ public BackblazeDataTransferClient getOrCreateB2Client( UUID jobId, SIZE_THRESHOLD_FOR_MULTIPART_UPLOAD, PART_SIZE_FOR_MULTIPART_UPLOAD); String exportService = JobMetadata.getExportService(); - backblazeDataTransferClient.init(authData.getToken(), authData.getSecret(), exportService, HttpClientBuilder.create().build()); + CustomIPv4DnsResolver customDnsResolver = new CustomIPv4DnsResolver(); + backblazeDataTransferClient.init( + authData.getToken(), + authData.getSecret(), + exportService, + HttpClientBuilder.create().setDnsResolver(customDnsResolver).build() + ); backblazeDataTransferClientMap.put(jobId, backblazeDataTransferClient); } return backblazeDataTransferClientMap.get(jobId); diff --git a/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/CustomIPv4DnsResolver.java b/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/CustomIPv4DnsResolver.java new file mode 100644 index 000000000..e5b69a2b3 --- /dev/null +++ b/extensions/data-transfer/portability-data-transfer-backblaze/src/main/java/org/datatransferproject/datatransfer/backblaze/common/CustomIPv4DnsResolver.java @@ -0,0 +1,22 @@ +package org.datatransferproject.datatransfer.backblaze.common; + +import org.apache.http.impl.conn.SystemDefaultDnsResolver; +import org.apache.http.conn.DnsResolver; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; + +// This class is only required because Backblaze only supports IPV4 on the B2 Native APIs, the S3 +// compatible APIs support IPV6. This can be deleted when all B2 API endpoints support IPV6. +public class CustomIPv4DnsResolver implements DnsResolver { + private final SystemDefaultDnsResolver systemDefaultDnsResolver = new SystemDefaultDnsResolver(); + + @Override + public InetAddress[] resolve(String host) throws UnknownHostException { + // Filter to return only IPv4 addresses + return Arrays.stream(systemDefaultDnsResolver.resolve(host)) + .filter(inetAddress -> inetAddress.getAddress().length == 4) + .toArray(InetAddress[]::new); + } +} +