Commit 3d0c8655 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Handled URL encoded node URI in VOSpace REST responses and added some tests

parent d60374fa
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -106,6 +106,9 @@
            <plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <version>2.22.2</version>
                <configuration>
                    <trimStackTrace>false</trimStackTrace>
                </configuration>
            </plugin>
            </plugin>
            <plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <groupId>org.jacoco</groupId>
+2 −2
Original line number Original line Diff line number Diff line
@@ -142,7 +142,7 @@ public class VOSpaceClient {


        String path = node.getUri().substring(("vos://" + authority).length());
        String path = node.getUri().substring(("vos://" + authority).length());


        HttpRequest request = getRequest("/nodes" + urlEncodePath(path))
        HttpRequest request = getRequest("/nodes" + path)
                .header("Accept", useJson ? "application/json" : "text/xml")
                .header("Accept", useJson ? "application/json" : "text/xml")
                .header("Content-Type", useJson ? "application/json" : "text/xml")
                .header("Content-Type", useJson ? "application/json" : "text/xml")
                .PUT(HttpRequest.BodyPublishers.ofString(marshal(node)))
                .PUT(HttpRequest.BodyPublishers.ofString(marshal(node)))
@@ -166,7 +166,7 @@ public class VOSpaceClient {


        String path = node.getUri().substring(("vos://" + authority).length());
        String path = node.getUri().substring(("vos://" + authority).length());


        HttpRequest request = getRequest("/nodes" + urlEncodePath(path) + "?recursive=" + recursive)
        HttpRequest request = getRequest("/nodes" + path + "?recursive=" + recursive)
                .header("Accept", useJson ? "application/json" : "text/xml")
                .header("Accept", useJson ? "application/json" : "text/xml")
                .header("Content-Type", useJson ? "application/json" : "text/xml")
                .header("Content-Type", useJson ? "application/json" : "text/xml")
                .POST(HttpRequest.BodyPublishers.ofString(marshal(node)))
                .POST(HttpRequest.BodyPublishers.ofString(marshal(node)))
+7 −4
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@ import it.inaf.ia2.vospace.ui.exception.VOSpaceException;
import it.inaf.ia2.vospace.ui.service.MainNodesHtmlGenerator;
import it.inaf.ia2.vospace.ui.service.MainNodesHtmlGenerator;
import it.inaf.ia2.vospace.ui.service.MoveNodeModalHtmlGenerator;
import it.inaf.ia2.vospace.ui.service.MoveNodeModalHtmlGenerator;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import static it.inaf.oats.vospace.datamodel.NodeUtils.urlEncodePath;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
@@ -79,6 +80,8 @@ public class NodesController extends BaseController {
    @GetMapping(value = "/nodesForMove", produces = MediaType.APPLICATION_JSON_VALUE)
    @GetMapping(value = "/nodesForMove", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<ListNodeData> listNodesForMoveModal(@RequestParam("path") String path, @RequestParam("nodeToMove") String nodeToMove, User principal) throws Exception {
    public ResponseEntity<ListNodeData> listNodesForMoveModal(@RequestParam("path") String path, @RequestParam("nodeToMove") String nodeToMove, User principal) throws Exception {


        LOG.debug("listNodes called for path {}", path);
        
        ListNodeData listNodeData = new ListNodeData();
        ListNodeData listNodeData = new ListNodeData();


        Node node = client.getNode(path);
        Node node = client.getNode(path);
@@ -99,7 +102,7 @@ public class NodesController extends BaseController {


        Transfer transfer = new Transfer();
        Transfer transfer = new Transfer();
        transfer.setDirection("pullFromVoSpace");
        transfer.setDirection("pullFromVoSpace");
        transfer.setTarget(Arrays.asList("vos://" + authority + path));
        transfer.setTarget(Arrays.asList("vos://" + authority + urlEncodePath(path)));


        Protocol protocol = new Protocol();
        Protocol protocol = new Protocol();
        protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
        protocol.setUri("ivo://ivoa.net/vospace/core#httpget");
@@ -123,7 +126,7 @@ public class NodesController extends BaseController {
        LOG.debug("newFolder called for path {}/{}", parentPath, name);
        LOG.debug("newFolder called for path {}/{}", parentPath, name);


        ContainerNode node = new ContainerNode();
        ContainerNode node = new ContainerNode();
        node.setUri("vos://" + authority + parentPath + "/" + name);
        node.setUri("vos://" + authority + urlEncodePath(parentPath + "/" + name));


        Property creator = new Property();
        Property creator = new Property();
        creator.setUri("ivo://ivoa.net/vospace/core#creator");
        creator.setUri("ivo://ivoa.net/vospace/core#creator");
@@ -162,8 +165,8 @@ public class NodesController extends BaseController {
    @PostMapping(value = "/move")
    @PostMapping(value = "/move")
    public ResponseEntity<Job> moveNode(@RequestBody Map<String, Object> params) {
    public ResponseEntity<Job> moveNode(@RequestBody Map<String, Object> params) {


        String target = getRequiredParam(params, "target");
        String target = urlEncodePath(getRequiredParam(params, "target"));
        String direction = getRequiredParam(params, "direction");
        String direction = urlEncodePath(getRequiredParam(params, "direction"));


        Transfer transfer = new Transfer();
        Transfer transfer = new Transfer();
        transfer.setTarget(Arrays.asList("vos://" + authority + target));
        transfer.setTarget(Arrays.asList("vos://" + authority + target));
+9 −4
Original line number Original line Diff line number Diff line
@@ -8,6 +8,7 @@ package it.inaf.ia2.vospace.ui.controller;
import it.inaf.ia2.vospace.ui.client.VOSpaceClient;
import it.inaf.ia2.vospace.ui.client.VOSpaceClient;
import it.inaf.ia2.vospace.ui.data.UploadFilesData;
import it.inaf.ia2.vospace.ui.data.UploadFilesData;
import it.inaf.ia2.vospace.ui.exception.PermissionDeniedException;
import it.inaf.ia2.vospace.ui.exception.PermissionDeniedException;
import static it.inaf.oats.vospace.datamodel.NodeUtils.urlEncodePath;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletableFuture;
@@ -64,11 +65,15 @@ public class UploadController extends BaseController {
    public CompletableFuture<String> prepareForDownload(String parentPath, String fileName) {
    public CompletableFuture<String> prepareForDownload(String parentPath, String fileName) {


        return CompletableFuture.supplyAsync(() -> {
        return CompletableFuture.supplyAsync(() -> {
            String nodeUri = "vos://" + authority + parentPath;

            if (!nodeUri.endsWith("/")) {
            String path = parentPath;
                nodeUri += "/";

            if (!path.endsWith("/")) {
                path += "/";
            }
            }
            nodeUri += fileName;
            path += fileName;

            String nodeUri = "vos://" + authority + urlEncodePath(path);


            createDataNode(nodeUri, getUser().getName());
            createDataNode(nodeUri, getUser().getName());


+9 −4
Original line number Original line Diff line number Diff line
@@ -9,12 +9,14 @@ import it.inaf.ia2.aa.data.User;
import it.inaf.ia2.vospace.ui.exception.VOSpaceException;
import it.inaf.ia2.vospace.ui.exception.VOSpaceException;
import it.inaf.oats.vospace.datamodel.NodeProperties;
import it.inaf.oats.vospace.datamodel.NodeProperties;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import it.inaf.oats.vospace.datamodel.NodeUtils;
import java.util.List;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Optional;
import java.util.Optional;
import java.util.stream.Collectors;
import net.ivoa.xml.vospace.v2.DataNode;
import net.ivoa.xml.vospace.v2.DataNode;
import net.ivoa.xml.vospace.v2.Node;
import net.ivoa.xml.vospace.v2.Node;
import net.ivoa.xml.vospace.v2.Property;
import net.ivoa.xml.vospace.v2.Property;
import net.ivoa.xml.vospace.v2.View;
import org.slf4j.Logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.LoggerFactory;


@@ -41,7 +43,7 @@ public class NodeInfo {
    public NodeInfo(Node node, User user, String authority) {
    public NodeInfo(Node node, User user, String authority) {
        this.authority = authority;
        this.authority = authority;
        this.path = getPath(node);
        this.path = getPath(node);
        this.name = path.substring(path.lastIndexOf("/") + 1);
        this.name = URLDecoder.decode(path.substring(path.lastIndexOf("/") + 1), StandardCharsets.UTF_8);
        this.size = getSize(node);
        this.size = getSize(node);
        this.type = node.getType();
        this.type = node.getType();
        this.creator = getCreator(node);
        this.creator = getCreator(node);
@@ -65,7 +67,10 @@ public class NodeInfo {
            throw new VOSpaceException("Node authority is different from configured one! Configured is " + authority + ", but node URI is " + uri);
            throw new VOSpaceException("Node authority is different from configured one! Configured is " + authority + ", but node URI is " + uri);
        }
        }


        return uri.substring(prefix.length());
        // returns decoded path
        return String.join("/", Arrays.stream(uri.substring(prefix.length()).split("/"))
                .map(p -> URLDecoder.decode(p, StandardCharsets.UTF_8))
                .collect(Collectors.toList()));
    }
    }


    private String getCreator(Node node) {
    private String getCreator(Node node) {
Loading