Loading src/main/java/it/inaf/oats/vospace/UriService.java +64 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; Loading Loading @@ -94,14 +95,15 @@ public class UriService { JobService.JobDirection jobDirection = JobDirection.getJobDirectionEnumFromTransfer(transfer); List<String> validProtocolUris = new ArrayList<>(); List<ProtocolType> validProtocolTypes = new ArrayList<>(); switch (jobDirection) { case pullFromVoSpace: validProtocolTypes.add(ProtocolType.HTTPSGET); case pullToVoSpace: validProtocolUris.add("ivo://ivoa.net/vospace/core#httpget"); validProtocolTypes.add(ProtocolType.HTTPGET); break; case pushToVoSpace: validProtocolUris.add("ivo://ivoa.net/vospace/core#httpput"); validProtocolTypes.add(ProtocolType.HTTPPUT); break; default: Loading @@ -110,15 +112,30 @@ public class UriService { List<Protocol> validProtocols = transfer.getProtocols().stream() // discard invalid protocols .filter(protocol -> validProtocolUris.contains(protocol.getUri())) // discard invalid protocols by uri String .filter(protocol -> validProtocolTypes.stream().map(pt -> { return pt.getUri(); }) .collect(Collectors.toList()) .contains(protocol.getUri())) .map(p -> { // set endpoints String endpoint = getEndpoint(job, transfer); ProtocolType pt = ProtocolType.getProtocolTypeFromURI(p.getUri()); if (pt.isEndpointCompliant(endpoint)) { Protocol protocol = new Protocol(); protocol.setUri(p.getUri()); protocol.setEndpoint(getEndpoint(job, transfer)); protocol.setEndpoint(endpoint); return protocol; }).collect(Collectors.toList()); } else { return null; } }).filter(Objects::nonNull) .collect(Collectors.toList()); if (validProtocols.isEmpty()) { Protocol protocol = transfer.getProtocols().get(0); Loading Loading @@ -326,4 +343,41 @@ public class UriService { } } } public enum ProtocolType { // Please keep the URIs in this enum UNIQUE! // will add a unit test to check this HTTPGET("ivo://ivoa.net/vospace/core#httpget", "http"), HTTPSGET("ivo://ivoa.net/vospace/core#httpsget", "https"), HTTPPUT("ivo://ivoa.net/vospace/core#httpput", "http"), HTTPSPUT("ivo://ivoa.net/vospace/core#httpsput", "https"); private final String uri; private final String protocolString; private ProtocolType(String uri, String protocolString) { this.uri = uri; this.protocolString = protocolString; } public String getUri() { return this.uri; } public boolean isEndpointCompliant(String endpoint) { return endpoint.toLowerCase() .startsWith(this.protocolString + "://"); } public static ProtocolType getProtocolTypeFromURI(String uri) { for (ProtocolType pt : ProtocolType.values()) { if (pt.getUri().equals(uri)) { return pt; } } return null; } } } Loading
src/main/java/it/inaf/oats/vospace/UriService.java +64 −10 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; Loading Loading @@ -94,14 +95,15 @@ public class UriService { JobService.JobDirection jobDirection = JobDirection.getJobDirectionEnumFromTransfer(transfer); List<String> validProtocolUris = new ArrayList<>(); List<ProtocolType> validProtocolTypes = new ArrayList<>(); switch (jobDirection) { case pullFromVoSpace: validProtocolTypes.add(ProtocolType.HTTPSGET); case pullToVoSpace: validProtocolUris.add("ivo://ivoa.net/vospace/core#httpget"); validProtocolTypes.add(ProtocolType.HTTPGET); break; case pushToVoSpace: validProtocolUris.add("ivo://ivoa.net/vospace/core#httpput"); validProtocolTypes.add(ProtocolType.HTTPPUT); break; default: Loading @@ -110,15 +112,30 @@ public class UriService { List<Protocol> validProtocols = transfer.getProtocols().stream() // discard invalid protocols .filter(protocol -> validProtocolUris.contains(protocol.getUri())) // discard invalid protocols by uri String .filter(protocol -> validProtocolTypes.stream().map(pt -> { return pt.getUri(); }) .collect(Collectors.toList()) .contains(protocol.getUri())) .map(p -> { // set endpoints String endpoint = getEndpoint(job, transfer); ProtocolType pt = ProtocolType.getProtocolTypeFromURI(p.getUri()); if (pt.isEndpointCompliant(endpoint)) { Protocol protocol = new Protocol(); protocol.setUri(p.getUri()); protocol.setEndpoint(getEndpoint(job, transfer)); protocol.setEndpoint(endpoint); return protocol; }).collect(Collectors.toList()); } else { return null; } }).filter(Objects::nonNull) .collect(Collectors.toList()); if (validProtocols.isEmpty()) { Protocol protocol = transfer.getProtocols().get(0); Loading Loading @@ -326,4 +343,41 @@ public class UriService { } } } public enum ProtocolType { // Please keep the URIs in this enum UNIQUE! // will add a unit test to check this HTTPGET("ivo://ivoa.net/vospace/core#httpget", "http"), HTTPSGET("ivo://ivoa.net/vospace/core#httpsget", "https"), HTTPPUT("ivo://ivoa.net/vospace/core#httpput", "http"), HTTPSPUT("ivo://ivoa.net/vospace/core#httpsput", "https"); private final String uri; private final String protocolString; private ProtocolType(String uri, String protocolString) { this.uri = uri; this.protocolString = protocolString; } public String getUri() { return this.uri; } public boolean isEndpointCompliant(String endpoint) { return endpoint.toLowerCase() .startsWith(this.protocolString + "://"); } public static ProtocolType getProtocolTypeFromURI(String uri) { for (ProtocolType pt : ProtocolType.values()) { if (pt.getUri().equals(uri)) { return pt; } } return null; } } }