summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/fileserver/staticfiles_test.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2020-09-11 12:20:39 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2020-09-11 12:20:39 -0600
commit0ee4378227cf3019dcbaddeb3977ddd28e58429a (patch)
tree33a8bb0e2f399d239222d2dea8aa135ce0ba741a /modules/caddyhttp/fileserver/staticfiles_test.go
parent9859ab8148435e64accd8d66e67db29fb5cbc9e7 (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.go73
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)
+ }
+ }
+}