From 0130e8e8c7a7d87cf6fda5f9f48a85d337f2e3cf Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 20 Oct 2020 15:43:18 +0200 Subject: [PATCH] follow redirects --- CHANGELOG.md | 1 + .../transferers/TransfererBuilder.java | 32 +++++++++++++++---- .../transfer/library/TestClientCalls.java | 5 +-- .../data/transfer/library/TransfererTest.java | 2 +- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6788608..502d992 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,3 +7,4 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Fixes - Integration with gcube distribution (boms 2.0.0) +- TransfererBuilder.getTransfererByHost now follows redirects diff --git a/src/main/java/org/gcube/data/transfer/library/transferers/TransfererBuilder.java b/src/main/java/org/gcube/data/transfer/library/transferers/TransfererBuilder.java index 044a982..17ac1ca 100644 --- a/src/main/java/org/gcube/data/transfer/library/transferers/TransfererBuilder.java +++ b/src/main/java/org/gcube/data/transfer/library/transferers/TransfererBuilder.java @@ -3,21 +3,19 @@ package org.gcube.data.transfer.library.transferers; import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; -import java.net.MalformedURLException; +import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URL; import java.util.List; -import lombok.extern.slf4j.Slf4j; - import org.gcube.common.resources.gcore.HostingNode; -import org.gcube.data.transfer.library.caches.CapabilitiesCache; import org.gcube.data.transfer.library.client.Client; import org.gcube.data.transfer.library.faults.HostingNodeNotFoundException; import org.gcube.data.transfer.library.faults.ServiceNotFoundException; import org.gcube.data.transfer.library.faults.UnreachableNodeException; -import org.gcube.data.transfer.model.TransferCapabilities; -import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; + +import lombok.extern.slf4j.Slf4j; @Slf4j public class TransfererBuilder { @@ -29,9 +27,17 @@ public class TransfererBuilder { public static Transferer getTransfererByHost(String endpoint) throws UnreachableNodeException, ServiceNotFoundException{ log.debug("Get transferer by Host "+endpoint); try{ - URL url=new URL(endpoint); + log.debug("Resolving redirects.. "); + String toUseEndpoint=resolveRedirects(endpoint); + + log.debug("Using "+toUseEndpoint); + URL url=new URL(toUseEndpoint); String baseUrl=url.getProtocol()+"://"+url.getHost()+":"+url.getPort(); + + + + //TODO Implement checks // if(!Utils.pingURL(host, timeout)) throw new UnreachableNodeException("No response from host in "+timeout); @@ -71,4 +77,16 @@ public class TransfererBuilder { return "http://"+found.get(0).profile().description().name(); } + + private static String resolveRedirects(String url) throws IOException{ + log.debug("Resolving redirect for url {} ",url); + URL urlObj=new URL(url); + HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection(); + int status=connection.getResponseCode(); + if(status>=300&&status<400){ + String newUrl=connection.getHeaderField("Location"); + log.debug("Following redirect from {} to {} ",url,newUrl); + return resolveRedirects(newUrl); + }else return url; + } } diff --git a/src/test/java/org/gcube/data/transfer/library/TestClientCalls.java b/src/test/java/org/gcube/data/transfer/library/TestClientCalls.java index 6e017f8..51c573c 100644 --- a/src/test/java/org/gcube/data/transfer/library/TestClientCalls.java +++ b/src/test/java/org/gcube/data/transfer/library/TestClientCalls.java @@ -28,9 +28,10 @@ import org.junit.Test; public class TestClientCalls { - static String hostname="http://thredds-d-d4s.d4science.org:80"; +// static String hostname="http://thredds-d-d4s.d4science.org:80"; + static String hostname="https://geoserver1.dev.d4science.org"; // static String hostname="https://geoserver1-spatial-dev.d4science.org"; - static String scope="/gcube/devsec/devVRE"; + static String scope="/gcube/devNext/NextNext"; // static String scope="/pred4s/preprod/preVRE"; static Client client; diff --git a/src/test/java/org/gcube/data/transfer/library/TransfererTest.java b/src/test/java/org/gcube/data/transfer/library/TransfererTest.java index d024cf8..e6826c5 100644 --- a/src/test/java/org/gcube/data/transfer/library/TransfererTest.java +++ b/src/test/java/org/gcube/data/transfer/library/TransfererTest.java @@ -32,7 +32,7 @@ import org.junit.Test; public class TransfererTest { - static String hostname="http://thredds-d-d4s.d4science.org:80"; + static String hostname="http://geoserver1.dev.d4science.org:80"; // static String nodeId="462b68c5-463f-4295-86da-37d6c0abc7ea"; static String scope="/gcube/devsec/devVRE";