diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2020-09-11 12:20:39 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2020-09-11 12:20:39 -0600 |
commit | 0ee4378227cf3019dcbaddeb3977ddd28e58429a (patch) | |
tree | 33a8bb0e2f399d239222d2dea8aa135ce0ba741a /modules/caddyhttp/fileserver/staticfiles_test.go | |
parent | 9859ab8148435e64accd8d66e67db29fb5cbc9e7 (diff) |
fileserver: Improve file hiding logic for directories and prefixes
Now, a filename to hide that is specified without a path separator will
count as hidden if it appears in any component of the file path (not
only the last component); semantically, this means hiding a file by only
its name (without any part of a path) will hide both files and folders,
e.g. hiding ".git" will hide "/.git" and also "/.git/foo".
We also do prefix matching so that hiding "/.git" will hide "/.git"
and "/.git/foo" but not "/.gitignore".
The remaining logic is a globular match like before.
Diffstat (limited to 'modules/caddyhttp/fileserver/staticfiles_test.go')
-rw-r--r-- | modules/caddyhttp/fileserver/staticfiles_test.go | 73 |
1 files changed, 71 insertions, 2 deletions
diff --git a/modules/caddyhttp/fileserver/staticfiles_test.go b/modules/caddyhttp/fileserver/staticfiles_test.go index 73762c7..f074318 100644 --- a/modules/caddyhttp/fileserver/staticfiles_test.go +++ b/modules/caddyhttp/fileserver/staticfiles_test.go @@ -93,9 +93,78 @@ func TestSanitizedPathJoin(t *testing.T) { } actual := sanitizedPathJoin(tc.inputRoot, u.Path) if actual != tc.expect { - t.Errorf("Test %d: [%s %s] => %s (expected %s)", i, tc.inputRoot, tc.inputPath, actual, tc.expect) + t.Errorf("Test %d: [%s %s] => %s (expected %s)", + i, tc.inputRoot, tc.inputPath, actual, tc.expect) } } } -// TODO: test fileHidden +func TestFileHidden(t *testing.T) { + for i, tc := range []struct { + inputHide []string + inputPath string + expect bool + }{ + { + inputHide: nil, + inputPath: "", + expect: false, + }, + { + inputHide: []string{".gitignore"}, + inputPath: "/.gitignore", + expect: true, + }, + { + inputHide: []string{".git"}, + inputPath: "/.gitignore", + expect: false, + }, + { + inputHide: []string{"/.git"}, + inputPath: "/.gitignore", + expect: false, + }, + { + inputHide: []string{".git"}, + inputPath: "/.git", + expect: true, + }, + { + inputHide: []string{".git"}, + inputPath: "/.git/foo", + expect: true, + }, + { + inputHide: []string{".git"}, + inputPath: "/foo/.git/bar", + expect: true, + }, + { + inputHide: []string{"/prefix"}, + inputPath: "/prefix/foo", + expect: true, + }, + { + inputHide: []string{"/foo/*/bar"}, + inputPath: "/foo/asdf/bar", + expect: true, + }, + { + inputHide: []string{"/foo"}, + inputPath: "/foo", + expect: true, + }, + { + inputHide: []string{"/foo"}, + inputPath: "/foobar", + expect: false, + }, + } { + actual := fileHidden(tc.inputPath, tc.inputHide) + if actual != tc.expect { + t.Errorf("Test %d: Is %s hidden in %v? Got %t but expected %t", + i, tc.inputPath, tc.inputHide, actual, tc.expect) + } + } +} |