mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 21:15:39 +00:00
50fb8b9123
Instead of modeling remote WebDAV servers as actual webdav.FS instances, we now just proxy traffic to them. This not only simplifies the code, but it also allows WebDAV locking to work correctly by making sure locks are handled by the servers that need to (i.e. the ones actually serving the files). Updates tailscale/corp#16827 Signed-off-by: Percy Wegmann <percy@tailscale.com>
31 lines
759 B
Go
31 lines
759 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package dirfs
|
|
|
|
import (
|
|
"context"
|
|
"io/fs"
|
|
"os"
|
|
|
|
"tailscale.com/tailfs/tailfsimpl/shared"
|
|
)
|
|
|
|
// Stat implements webdav.FileSystem.
|
|
func (dfs *FS) Stat(ctx context.Context, name string) (fs.FileInfo, error) {
|
|
nameWithoutStaticRoot, isStaticRoot := dfs.trimStaticRoot(name)
|
|
if isStaticRoot || shared.IsRoot(name) {
|
|
// Static root is a directory, always use now() as the modified time to
|
|
// bust caches.
|
|
fi := shared.ReadOnlyDirInfo(name, dfs.now())
|
|
return fi, nil
|
|
}
|
|
|
|
child := dfs.childFor(nameWithoutStaticRoot)
|
|
if child == nil {
|
|
return nil, &os.PathError{Op: "stat", Path: name, Err: os.ErrNotExist}
|
|
}
|
|
|
|
return shared.ReadOnlyDirInfo(name, dfs.now()), nil
|
|
}
|