chrislu
1 year ago
8 changed files with 135 additions and 5 deletions
-
7k8s/charts/seaweedfs/templates/filer-statefulset.yaml
-
7k8s/charts/seaweedfs/templates/master-statefulset.yaml
-
7k8s/charts/seaweedfs/templates/s3-deployment.yaml
-
7k8s/charts/seaweedfs/templates/volume-statefulset.yaml
-
5k8s/charts/seaweedfs/values.yaml
-
2weed/command/filer.go
-
8weed/server/webdav_server.go
-
97weed/server/wrapped_webdav_fs.go
@ -0,0 +1,97 @@ |
|||||
|
package weed_server |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"golang.org/x/net/webdav" |
||||
|
"io/fs" |
||||
|
"os" |
||||
|
"strings" |
||||
|
) |
||||
|
|
||||
|
type wrappedFs struct { |
||||
|
subFolder string |
||||
|
webdav.FileSystem |
||||
|
} |
||||
|
|
||||
|
// NewWrappedFs returns a webdav.FileSystem identical to fs, except it
|
||||
|
// provides access to a sub-folder of fs that is denominated by subFolder.
|
||||
|
// It transparently handles renaming paths and filenames so that the outer part of the wrapped filesystem
|
||||
|
// does not leak out.
|
||||
|
func NewWrappedFs(fs webdav.FileSystem, subFolder string) webdav.FileSystem { |
||||
|
return wrappedFs{ |
||||
|
subFolder: subFolder, |
||||
|
FileSystem: fs, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFs) Mkdir(ctx context.Context, name string, perm os.FileMode) error { |
||||
|
name = w.subFolder + name |
||||
|
return w.FileSystem.Mkdir(ctx, name, perm) |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFs) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (webdav.File, error) { |
||||
|
name = w.subFolder + name |
||||
|
file, err := w.FileSystem.OpenFile(ctx, name, flag, perm) |
||||
|
file = wrappedFile{ |
||||
|
File: file, |
||||
|
subFolder: &w.subFolder, |
||||
|
} |
||||
|
|
||||
|
return file, err |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFs) RemoveAll(ctx context.Context, name string) error { |
||||
|
name = w.subFolder + name |
||||
|
return w.FileSystem.RemoveAll(ctx, name) |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFs) Rename(ctx context.Context, oldName, newName string) error { |
||||
|
oldName = w.subFolder + oldName |
||||
|
newName = w.subFolder + newName |
||||
|
return w.FileSystem.Rename(ctx, oldName, newName) |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFs) Stat(ctx context.Context, name string) (os.FileInfo, error) { |
||||
|
name = w.subFolder + name |
||||
|
info, err := w.FileSystem.Stat(ctx, name) |
||||
|
info = wrappedFileInfo{ |
||||
|
subFolder: &w.subFolder, |
||||
|
FileInfo: info, |
||||
|
} |
||||
|
return info, err |
||||
|
} |
||||
|
|
||||
|
type wrappedFile struct { |
||||
|
webdav.File |
||||
|
subFolder *string |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFile) Readdir(count int) ([]fs.FileInfo, error) { |
||||
|
infos, err := w.File.Readdir(count) |
||||
|
for i, info := range infos { |
||||
|
infos[i] = wrappedFileInfo{ |
||||
|
subFolder: w.subFolder, |
||||
|
FileInfo: info, |
||||
|
} |
||||
|
} |
||||
|
return infos, err |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFile) Stat() (fs.FileInfo, error) { |
||||
|
info, err := w.File.Stat() |
||||
|
info = wrappedFileInfo{ |
||||
|
subFolder: w.subFolder, |
||||
|
FileInfo: info, |
||||
|
} |
||||
|
return info, err |
||||
|
} |
||||
|
|
||||
|
type wrappedFileInfo struct { |
||||
|
subFolder *string |
||||
|
fs.FileInfo |
||||
|
} |
||||
|
|
||||
|
func (w wrappedFileInfo) Name() string { |
||||
|
name := w.FileInfo.Name() |
||||
|
return strings.TrimPrefix(name, *w.subFolder) |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue