From 6204709810cb7b69a9a5f36563f29418b8680d04 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Mon, 8 Apr 2024 08:27:23 +0200 Subject: [PATCH] Add preflight check for list feature. --- core/src/main/java/ch/cyberduck/core/ListService.java | 10 ++++++++++ .../java/ch/cyberduck/core/ctera/CteraListService.java | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/ch/cyberduck/core/ListService.java b/core/src/main/java/ch/cyberduck/core/ListService.java index e81b1d967e6..fb84ec0bf1a 100644 --- a/core/src/main/java/ch/cyberduck/core/ListService.java +++ b/core/src/main/java/ch/cyberduck/core/ListService.java @@ -17,8 +17,18 @@ * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ +import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; +import java.text.MessageFormat; + public interface ListService { AttributedList list(Path directory, ListProgressListener listener) throws BackgroundException; + + default void preflight(final Path directory) throws BackgroundException { + if(!directory.attributes().getPermission().isExecutable() || !directory.attributes().getPermission().isReadable()) { + throw new AccessDeniedException(MessageFormat.format(LocaleFactory.localizedString("Listing directory {0} failed", "Error"), + directory.getName())).withFile(directory); + } + } } diff --git a/ctera/src/main/java/ch/cyberduck/core/ctera/CteraListService.java b/ctera/src/main/java/ch/cyberduck/core/ctera/CteraListService.java index 0ae7eb8edec..7d8977f6c92 100644 --- a/ctera/src/main/java/ch/cyberduck/core/ctera/CteraListService.java +++ b/ctera/src/main/java/ch/cyberduck/core/ctera/CteraListService.java @@ -18,6 +18,7 @@ import ch.cyberduck.core.Path; import ch.cyberduck.core.dav.DAVListService; import ch.cyberduck.core.dav.DAVPathEncoder; +import ch.cyberduck.core.exception.BackgroundException; import java.io.IOException; import java.util.Collections; @@ -27,8 +28,7 @@ import com.github.sardine.DavResource; -import static ch.cyberduck.core.ctera.CteraAttributesFinderFeature.ALL_ACL_QN; -import static ch.cyberduck.core.ctera.CteraAttributesFinderFeature.GUID_QN; +import static ch.cyberduck.core.ctera.CteraAttributesFinderFeature.*; public class CteraListService extends DAVListService { @@ -45,4 +45,9 @@ protected List list(final Path directory) throws IOException { Stream.of(GUID_QN), ALL_ACL_QN.stream() ).collect(Collectors.toSet()))); } + + @Override + public void preflight(final Path directory) throws BackgroundException { + assumeRole(directory, READPERMISSION); + } }