From e42716c43e0241e9d6d2ca7f7efe8d33a27127c2 Mon Sep 17 00:00:00 2001 From: tjpcc Date: Wed, 3 May 2023 13:21:34 -0600 Subject: hide private files from the FS - ResolveFile acts like ErrNotFound - ResolveDirectory acts like ErrNotFound - RenderDirectoryListing strips out dot-prefixed entries --- contrib/fs/file.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'contrib/fs/file.go') diff --git a/contrib/fs/file.go b/contrib/fs/file.go index 591c1bd..d231466 100644 --- a/contrib/fs/file.go +++ b/contrib/fs/file.go @@ -15,6 +15,11 @@ import ( // returned. func ResolveFile(request *sr.Request, fileSystem fs.FS) (string, fs.File, error) { filepath := strings.TrimPrefix(request.Path, "/") + + if isPrivate(filepath) { + return "", nil, nil + } + file, err := fileSystem.Open(filepath) if isNotFound(err) { return "", nil, nil @@ -57,3 +62,12 @@ func mediaType(filePath string) string { } return mtype } + +func isPrivate(fullpath string) bool { + for _, segment := range strings.Split(fullpath, "/") { + if len(segment) > 1 && segment[0] == '.' { + return true + } + } + return false +} -- cgit v1.2.3