diff --git a/src/main/java/org/olat/admin/sysinfo/manager/CustomStaticFolderManager.java b/src/main/java/org/olat/admin/sysinfo/manager/CustomStaticFolderManager.java index a751c329b965b31ba38159462bc257bd889bb856..1cfe1062d445dcbcf0dd821b8752b0e43d121fca 100644 --- a/src/main/java/org/olat/admin/sysinfo/manager/CustomStaticFolderManager.java +++ b/src/main/java/org/olat/admin/sysinfo/manager/CustomStaticFolderManager.java @@ -68,6 +68,11 @@ public class CustomStaticFolderManager implements InitializingBean, WebDAVProvid public String getMountPoint() { return MOUNT_POINT; } + + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null && identityEnv.getRoles() != null && identityEnv.getRoles().isOLATAdmin(); + } @Override public VFSContainer getContainer(IdentityEnvironment identityEnv) { diff --git a/src/main/java/org/olat/commons/calendar/CalendarWebDAVProvider.java b/src/main/java/org/olat/commons/calendar/CalendarWebDAVProvider.java index 28474840361ff3f80706fc8cf624827cfc33810c..430b0c6e3e59a9838be9d6c8800758d2bba739b3 100644 --- a/src/main/java/org/olat/commons/calendar/CalendarWebDAVProvider.java +++ b/src/main/java/org/olat/commons/calendar/CalendarWebDAVProvider.java @@ -38,6 +38,12 @@ public class CalendarWebDAVProvider implements WebDAVProvider { private static final String MOUNT_POINT = "calendars"; + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null; + } + + @Override public VFSContainer getContainer(IdentityEnvironment identityEnv) { VirtualContainer calendars = new VirtualContainer("calendars"); calendars.setLocalSecurityCallback(new ReadOnlyCallback()); @@ -48,8 +54,8 @@ public class CalendarWebDAVProvider implements WebDAVProvider { return calendars; } + @Override public String getMountPoint() { return MOUNT_POINT; } - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/modules/bc/BriefcaseWebDAVProvider.java b/src/main/java/org/olat/core/commons/modules/bc/BriefcaseWebDAVProvider.java index 47dbbb2c85f60ccd0c1078444f31d63cd4a28fae..1dad8af1cdd2d15abe9b83d7646a9273bb3f00f4 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/BriefcaseWebDAVProvider.java +++ b/src/main/java/org/olat/core/commons/modules/bc/BriefcaseWebDAVProvider.java @@ -36,7 +36,8 @@ import org.olat.core.util.vfs.VFSContainer; public class BriefcaseWebDAVProvider implements WebDAVProvider { private static final String MOUNTPOINT = "home"; - + + @Override public String getMountPoint() { return MOUNTPOINT; } @@ -46,6 +47,11 @@ public class BriefcaseWebDAVProvider implements WebDAVProvider { return new BriefcaseWebDAVMergeSource(identity); } + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null; + } + /** * @see org.olat.core.commons.services.webdav.WebDAVProvider#getContainer(org.olat.core.id.Identity) */ diff --git a/src/main/java/org/olat/core/commons/services/webdav/WebDAVProvider.java b/src/main/java/org/olat/core/commons/services/webdav/WebDAVProvider.java index e0901275e1930931ccd16d5827417c7c44113cb3..5879ac519fd08bbb8a49e422db2027d3a3b650eb 100644 --- a/src/main/java/org/olat/core/commons/services/webdav/WebDAVProvider.java +++ b/src/main/java/org/olat/core/commons/services/webdav/WebDAVProvider.java @@ -30,6 +30,8 @@ import org.olat.core.id.IdentityEnvironment; import org.olat.core.util.vfs.VFSContainer; public interface WebDAVProvider { + + public boolean hasAccess(IdentityEnvironment identityEnv); /** * Get a name under which this provider would like to list its container as at the root level of the WebDAV mount point diff --git a/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java b/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java index c9d042f2246628c4ef902a0ecd9bf03b4e32ec6c..187a107fa0367a91d16c01f9826a6a38bd90690a 100644 --- a/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/webdav/manager/WebDAVManagerImpl.java @@ -130,7 +130,9 @@ public class WebDAVManagerImpl implements WebDAVManager, InitializingBean { MergeSource vfsRoot = new MergeSource(null, "webdav"); for (Map.Entry<String, WebDAVProvider> entry : webdavModule.getWebDAVProviders().entrySet()) { WebDAVProvider provider = entry.getValue(); - vfsRoot.addContainer(new WebDAVProviderNamedContainer(identityEnv, provider)); + if(provider.hasAccess(identityEnv)) { + vfsRoot.addContainer(new WebDAVProviderNamedContainer(identityEnv, provider)); + } } return vfsRoot; } @@ -139,9 +141,7 @@ public class WebDAVManagerImpl implements WebDAVManager, InitializingBean { //create the / folder VirtualContainer rootContainer = new VirtualContainer(""); rootContainer.setLocalSecurityCallback(new ReadOnlyCallback()); - - VFSResourceRoot fdc = new VFSResourceRoot(usess.getIdentity(), rootContainer); - return fdc; + return new VFSResourceRoot(usess.getIdentity(), rootContainer); } /** diff --git a/src/main/java/org/olat/course/CoursefolderWebDAVProvider.java b/src/main/java/org/olat/course/CoursefolderWebDAVProvider.java index 52eccf277dc49d53a63433b2396b29a929ef9817..a40accd541213e510bf32997d199afcc0fe836fd 100644 --- a/src/main/java/org/olat/course/CoursefolderWebDAVProvider.java +++ b/src/main/java/org/olat/course/CoursefolderWebDAVProvider.java @@ -40,6 +40,11 @@ public class CoursefolderWebDAVProvider implements WebDAVProvider { public String getMountPoint() { return MOUNTPOINT; } + + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null; + } @Override public VFSContainer getContainer(IdentityEnvironment identityEnv) { diff --git a/src/main/java/org/olat/group/GroupfoldersWebDAVProvider.java b/src/main/java/org/olat/group/GroupfoldersWebDAVProvider.java index 71f8579d588a664570c5936873eb0ab0423adb27..29d9fbfcfeea81c54ca73edd176e38d67c83f263 100644 --- a/src/main/java/org/olat/group/GroupfoldersWebDAVProvider.java +++ b/src/main/java/org/olat/group/GroupfoldersWebDAVProvider.java @@ -46,6 +46,11 @@ public class GroupfoldersWebDAVProvider implements WebDAVProvider { public void setCollaborationManager(CollaborationManager collaborationManager) { this.collaborationManager = collaborationManager; } + + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null; + } @Override public String getMountPoint() { diff --git a/src/main/java/org/olat/modules/sharedfolder/SharedFolderWebDAVProvider.java b/src/main/java/org/olat/modules/sharedfolder/SharedFolderWebDAVProvider.java index 8fa86c8ca1632b5be5e1f0ae8e24c5520c172194..8c16f8db64b65a309f62692c237ad5ba0491af52 100644 --- a/src/main/java/org/olat/modules/sharedfolder/SharedFolderWebDAVProvider.java +++ b/src/main/java/org/olat/modules/sharedfolder/SharedFolderWebDAVProvider.java @@ -79,9 +79,15 @@ public class SharedFolderWebDAVProvider implements WebDAVProvider { /** * @see org.olat.core.commons.services.webdav.WebDAVProvider#getMountPoint() */ + @Override public String getMountPoint() { return "sharedfolders"; } + + @Override + public boolean hasAccess(IdentityEnvironment identityEnv) { + return identityEnv != null; + } /** * @see org.olat.core.commons.services.webdav.WebDAVProvider#getContainer(org.olat.core.id.Identity) diff --git a/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java b/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java index c52d4e80bce89512bc95c1cc8791bd03ed3594b2..9a74b0c2f251dc32e688861e1ca2f2a78bfa0758 100644 --- a/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java +++ b/src/test/java/org/olat/core/commons/services/webdav/WebDAVCommandsTest.java @@ -664,6 +664,58 @@ public class WebDAVCommandsTest extends WebDAVTestCase { conn.close(); } + @Test + public void customizingFolder() + throws IOException, URISyntaxException { + Identity admin = JunitTestHelper.createAndPersistIdentityAsAdmin("admin-webdav"); + dbInstance.commitAndCloseSession(); + + WebDAVConnection conn = new WebDAVConnection(); + conn.setCredentials(admin.getName(), "A6B7C8"); + + //Has access? + URI customizingUri = conn.getBaseURI().path("webdav").path("customizing").build(); + String customizingXml = conn.propfind(customizingUri, 2); + Assert.assertTrue(customizingXml.contains("<D:href>/webdav/customizing/</D:href>")); + + //PUT in the folder + URI textUri = conn.getBaseURI().path("webdav").path("customizing").path("infos.txt").build(); + HttpPut put = conn.createPut(textUri); + InputStream dataStream = WebDAVCommandsTest.class.getResourceAsStream("text.txt"); + InputStreamEntity entity = new InputStreamEntity(dataStream, -1); + put.setEntity(entity); + HttpResponse putResponse = conn.execute(put); + Assert.assertEquals(201, putResponse.getStatusLine().getStatusCode()); + + //GET + HttpGet get = conn.createGet(textUri); + HttpResponse getResponse = conn.execute(get); + Assert.assertEquals(200, getResponse.getStatusLine().getStatusCode()); + String text = EntityUtils.toString(getResponse.getEntity()); + Assert.assertEquals("Small text", text); + + conn.close(); + } + + @Test + public void customizingFolder_permission() + throws IOException, URISyntaxException { + Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("user-webdav"); + dbInstance.commitAndCloseSession(); + + WebDAVConnection conn = new WebDAVConnection(); + conn.setCredentials(user.getName(), "A6B7C8"); + + URI customizingUri = conn.getBaseURI().path("webdav").path("customizing").build(); + HttpPropFind propfind = new HttpPropFind(customizingUri); + propfind.addHeader("Depth", Integer.toString(2)); + HttpResponse response = conn.execute(propfind); + Assert.assertEquals(404, response.getStatusLine().getStatusCode()); + EntityUtils.consume(response.getEntity()); + + conn.close(); + } + private VFSItem createFile(VFSContainer container, String filename) throws IOException { VFSLeaf testLeaf = container.createChildLeaf(filename); InputStream in = WebDAVCommandsTest.class.getResourceAsStream("text.txt");