Skip to content

Commit 2d95d1c

Browse files
committed
feat(serverHandler): filter matched path for alias params
1 parent 42b46be commit 2d95d1c

File tree

3 files changed

+67
-18
lines changed

3 files changed

+67
-18
lines changed

src/serverHandler/aliasHandler.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,9 @@ func newAliasHandler(
210210
dirIndexes: p.DirIndexes,
211211
aliases: allAliases.filterSuccessor(currentAlias.url),
212212

213-
globalAuth: p.GlobalAuth,
214-
authUrls: p.AuthUrls,
215-
authDirs: p.AuthDirs,
213+
globalAuth: p.GlobalAuth || prefixMatched(p.AuthUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.AuthDirs, util.HasFsPrefixDir, currentAlias.fs),
214+
authUrls: filterSuccessor(p.AuthUrls, util.HasUrlPrefixDir, currentAlias.url),
215+
authDirs: filterSuccessor(p.AuthDirs, util.HasFsPrefixDir, currentAlias.fs),
216216

217217
globalRestrictAccess: globalRestrictAccess,
218218
restrictAccessUrls: vhostCtx.restrictAccessUrls.filterSuccessor(util.HasUrlPrefixDir, currentAlias.url),
@@ -222,25 +222,25 @@ func newAliasHandler(
222222
headersUrls: vhostCtx.headersUrls.filterSuccessor(util.HasUrlPrefixDir, currentAlias.url),
223223
headersDirs: vhostCtx.headersDirs.filterSuccessor(util.HasFsPrefixDir, currentAlias.fs),
224224

225-
globalUpload: p.GlobalUpload,
226-
uploadUrls: p.UploadUrls,
227-
uploadDirs: p.UploadDirs,
225+
globalUpload: p.GlobalUpload || prefixMatched(p.UploadUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.UploadDirs, util.HasFsPrefixDir, currentAlias.fs),
226+
uploadUrls: filterSuccessor(p.UploadUrls, util.HasUrlPrefixDir, currentAlias.url),
227+
uploadDirs: filterSuccessor(p.UploadDirs, util.HasFsPrefixDir, currentAlias.fs),
228228

229-
globalMkdir: p.GlobalMkdir,
230-
mkdirUrls: p.MkdirUrls,
231-
mkdirDirs: p.MkdirDirs,
229+
globalMkdir: p.GlobalMkdir || prefixMatched(p.MkdirUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.MkdirDirs, util.HasFsPrefixDir, currentAlias.fs),
230+
mkdirUrls: filterSuccessor(p.MkdirUrls, util.HasUrlPrefixDir, currentAlias.url),
231+
mkdirDirs: filterSuccessor(p.MkdirDirs, util.HasFsPrefixDir, currentAlias.fs),
232232

233-
globalDelete: p.GlobalDelete,
234-
deleteUrls: p.DeleteUrls,
235-
deleteDirs: p.DeleteDirs,
233+
globalDelete: p.GlobalDelete || prefixMatched(p.DeleteUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.DeleteDirs, util.HasFsPrefixDir, currentAlias.fs),
234+
deleteUrls: filterSuccessor(p.DeleteUrls, util.HasUrlPrefixDir, currentAlias.url),
235+
deleteDirs: filterSuccessor(p.DeleteDirs, util.HasFsPrefixDir, currentAlias.fs),
236236

237-
globalArchive: p.GlobalArchive,
238-
archiveUrls: p.ArchiveUrls,
239-
archiveDirs: p.ArchiveDirs,
237+
globalArchive: p.GlobalArchive || prefixMatched(p.ArchiveUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.ArchiveDirs, util.HasFsPrefixDir, currentAlias.fs),
238+
archiveUrls: filterSuccessor(p.ArchiveUrls, util.HasUrlPrefixDir, currentAlias.url),
239+
archiveDirs: filterSuccessor(p.ArchiveDirs, util.HasFsPrefixDir, currentAlias.fs),
240240

241-
globalCors: p.GlobalCors,
242-
corsUrls: p.CorsUrls,
243-
corsDirs: p.CorsDirs,
241+
globalCors: p.GlobalCors || prefixMatched(p.CorsUrls, util.HasUrlPrefixDir, currentAlias.url) || prefixMatched(p.CorsDirs, util.HasFsPrefixDir, currentAlias.fs),
242+
corsUrls: filterSuccessor(p.CorsUrls, util.HasUrlPrefixDir, currentAlias.url),
243+
corsDirs: filterSuccessor(p.CorsDirs, util.HasFsPrefixDir, currentAlias.fs),
244244

245245
shows: vhostCtx.shows,
246246
showDirs: vhostCtx.showDirs,

src/serverHandler/pathValues.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,31 @@ func (list pathHeadersList) filterSuccessor(matchPrefix prefixFilter, refPath st
9999
return result
100100
}
101101
}
102+
103+
// []string
104+
105+
func prefixMatched(list []string, matchPrefix prefixFilter, refPath string) bool {
106+
for i := range list {
107+
if matchPrefix(refPath, list[i]) {
108+
return true
109+
}
110+
}
111+
112+
return false
113+
}
114+
115+
func filterSuccessor(list []string, matchPrefix prefixFilter, refPath string) []string {
116+
var result []string
117+
118+
for _, v := range list {
119+
if len(v) > len(refPath) && matchPrefix(v, refPath) {
120+
result = append(result, v)
121+
}
122+
}
123+
124+
if len(list) == len(result) {
125+
return list
126+
} else {
127+
return result
128+
}
129+
}

src/serverHandler/pathValues_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,24 @@ func TestPathHeaders(t *testing.T) {
6060
t.Error(successors)
6161
}
6262
}
63+
64+
func TestPathList(t *testing.T) {
65+
list := []string{
66+
"/a", "/a/b", "/a/b/c", "/foo/bar",
67+
}
68+
69+
if !prefixMatched(list, util.HasUrlPrefixDir, "/a/b") {
70+
t.Error()
71+
}
72+
if !prefixMatched(list, util.HasUrlPrefixDir, "/a/b/c/d") {
73+
t.Error()
74+
}
75+
if prefixMatched(list, util.HasUrlPrefixDir, "/lorem/ipsum") {
76+
t.Error()
77+
}
78+
79+
successors := filterSuccessor(list, util.HasUrlPrefixDir, "/a/b")
80+
if len(successors) != 1 || successors[0] != "/a/b/c" {
81+
t.Error(successors)
82+
}
83+
}

0 commit comments

Comments
 (0)