mirror of
https://github.com/caddyserver/caddy.git
synced 2025-05-30 15:58:10 +08:00
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.
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user