From 2147e5fec23f3d3aa7f73a6da355f7e3bd68b582 Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Fri, 12 Nov 2021 10:33:07 +0100
Subject: [PATCH] Other fixes for special characters

---
 .../java/it/inaf/oats/vospace/FileServiceClient.java   |  2 +-
 src/main/java/it/inaf/oats/vospace/UriService.java     |  4 +---
 src/main/resources/auth.properties                     |  2 +-
 .../it/inaf/oats/vospace/FileServiceClientTest.java    | 10 +++++-----
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
index d593893..5c8d746 100644
--- a/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
+++ b/src/main/java/it/inaf/oats/vospace/FileServiceClient.java
@@ -54,7 +54,7 @@ public class FileServiceClient {
 
     public String startArchiveJob(Transfer transfer, String jobId) {
 
-        String target = transfer.getTarget().substring("vos://".length() + authority.length());
+        String target = NodeUtils.getVosPath(transfer.getTarget());
 
         String viewUri = transfer.getView().getUri();
 
diff --git a/src/main/java/it/inaf/oats/vospace/UriService.java b/src/main/java/it/inaf/oats/vospace/UriService.java
index 03162bb..3b71864 100644
--- a/src/main/java/it/inaf/oats/vospace/UriService.java
+++ b/src/main/java/it/inaf/oats/vospace/UriService.java
@@ -181,8 +181,7 @@ public class UriService {
 
     private String getEndpoint(JobSummary job, Transfer transfer) {
 
-        String relativePath = StringUtils.uriDecode(URIUtils
-                .returnVosPathFromNodeURI(transfer.getTarget(), authority), StandardCharsets.UTF_8);
+        String relativePath = NodeUtils.getVosPath(transfer.getTarget());
 
         User user = (User) servletRequest.getUserPrincipal();
         String creator = user.getName();
@@ -204,7 +203,6 @@ public class UriService {
             case pullFromVoSpace:
                 // Refresh relative path: it can differ in case of links followed 
                 relativePath = NodeUtils.getVosPath(node);
-                relativePath = StringUtils.uriDecode(relativePath, StandardCharsets.UTF_8);
                 if (!NodeUtils.checkIfReadable(node, creator, groups)) {
                     throw PermissionDeniedException.forPath(relativePath);
                 }
diff --git a/src/main/resources/auth.properties b/src/main/resources/auth.properties
index 875059c..ace50d1 100644
--- a/src/main/resources/auth.properties
+++ b/src/main/resources/auth.properties
@@ -2,4 +2,4 @@ rap_uri=https://sso.ia2.inaf.it/rap-ia2
 gms_uri=https://sso.ia2.inaf.it/gms/
 groups_autoload=true
 client_id=vospace_test
-client_secret=***REMOVED***
\ No newline at end of file
+client_secret=***REMOVED***
diff --git a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
index 9ec78b9..7664b94 100644
--- a/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
+++ b/src/test/java/it/inaf/oats/vospace/FileServiceClientTest.java
@@ -101,23 +101,23 @@ public class FileServiceClientTest {
 
         Transfer transfer = new Transfer();
         transfer.setDirection("pullFromVoSpace");
-        transfer.setTarget("vos://example.com!vospace/mydir");
+        transfer.setTarget("vos://example.com!vospace/mydir(%20+%20)x");
         View view = new View();
         view.setUri(Views.ZIP_VIEW_URI);
         transfer.setView(view);
         
         ContainerNode node = Mockito.mock(ContainerNode.class);
         when(node.getNodes()).thenReturn(List.of());
-        when(node.getUri()).thenReturn("vos://example.com!vospace/mydir");
-        when(nodeDAO.listNode(eq("/mydir"))).thenReturn(Optional.of(node));
+        when(node.getUri()).thenReturn("vos://example.com!vospace/mydir(%20+%20)x");
+        when(nodeDAO.listNode(eq("/mydir( + )x"))).thenReturn(Optional.of(node));
         
         when(linkService.followLinksForArchiveService(any()))
-                .thenReturn(List.of(new ArchiveEntryDescriptor("/mydir")));
+                .thenReturn(List.of(new ArchiveEntryDescriptor("/mydir( + )x")));
 
         ArchiveRequest archiveRequest = testStartArchiveJob(transfer);
 
         assertEquals(1, archiveRequest.getEntryDescriptors().size());
-        assertEquals("/mydir", archiveRequest.getEntryDescriptors().get(0).getTargetNodeVosPath());
+        assertEquals("/mydir( + )x", archiveRequest.getEntryDescriptors().get(0).getTargetNodeVosPath());
     }
 
     @Test
-- 
GitLab