Fix macOS Finder WebDAV mount by handling GET on directories (#12)

Go's webdav.Handler returns 405 Method Not Allowed for GET on
collections (directories). macOS Finder sends GET to the WebDAV root
as part of its mount flow and refuses to connect when it gets 405.

Add a finderCompatible wrapper that intercepts GET/HEAD on directories
and returns a minimal 200 response, while passing all standard WebDAV
methods through to the underlying handler unchanged.
This commit is contained in:
Hari 2026-04-01 16:42:34 -04:00 committed by GitHub
parent b74db855c8
commit 18b6ac625f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 63 additions and 2 deletions

View file

@ -155,12 +155,13 @@ func (a *app) handler() http.Handler {
for _, mount := range a.exportMounts {
mountPathPrefix := strings.TrimSuffix(mount.mountPath, "/")
fs := webdav.Dir(mount.exportPath)
dav := &webdav.Handler{
Prefix: mountPathPrefix,
FileSystem: webdav.Dir(mount.exportPath),
FileSystem: fs,
LockSystem: webdav.NewMemLS(),
}
mux.Handle(mount.mountPath, a.requireDAVAuth(mount, dav))
mux.Handle(mount.mountPath, a.requireDAVAuth(mount, finderCompatible(dav, fs, mountPathPrefix)))
}
return mux