diff --git a/src/main/java/it/inaf/oats/vospace/ListNodeController.java b/src/main/java/it/inaf/oats/vospace/ListNodeController.java index 7dd303f42c02a101c3334d6bf8604c8798434326..9f53335769c76d657e598cb10b7adeff09f81f84 100644 --- a/src/main/java/it/inaf/oats/vospace/ListNodeController.java +++ b/src/main/java/it/inaf/oats/vospace/ListNodeController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.http.ResponseEntity; import net.ivoa.xml.vospace.v2.Node; +import net.ivoa.xml.vospace.v2.ContainerNode; import it.inaf.oats.vospace.persistence.NodeDAO; import javax.servlet.http.HttpServletRequest; @@ -17,6 +18,8 @@ import it.inaf.ia2.aa.data.User; import it.inaf.oats.vospace.datamodel.NodeUtils; import java.util.Optional; import it.inaf.oats.vospace.exception.PermissionDeniedException; +import java.util.stream.Collectors; +import java.util.List; @RestController public class ListNodeController extends BaseNodeController { @@ -42,7 +45,22 @@ public class ListNodeController extends BaseNodeController { throw new PermissionDeniedException(path); } } + + Node node = optNode.get(); + + if (node instanceof ContainerNode) { + ContainerNode cnd = (ContainerNode) node; + List<Node> children + = cnd.getNodes().stream().filter( + (n) -> NodeUtils.checkIfReadable( + n, principal.getName(), + principal.getGroups())) + .collect(Collectors.toList()); + cnd.setNodes(children); + optNode = Optional.of(cnd); + } return ResponseEntity.ok(optNode.get()); + } } diff --git a/src/test/java/it/inaf/oats/vospace/ListNodeControllerTest.java b/src/test/java/it/inaf/oats/vospace/ListNodeControllerTest.java index 54dc45ea3f58ee9bf07be55c6b92c8f53974c8c0..18b4a6027bf634e96f2a742c2ea9cabae6167dff 100644 --- a/src/test/java/it/inaf/oats/vospace/ListNodeControllerTest.java +++ b/src/test/java/it/inaf/oats/vospace/ListNodeControllerTest.java @@ -111,7 +111,7 @@ public class ListNodeControllerTest { .andExpect(status().is2xxSuccessful()); } - //@Test + @Test public void testListOnlyReadableChildren() throws Exception { ContainerNode node = new ContainerNode();