Skip to content

Commit f2a5435

Browse files
committed
refactor(serverHandler): embed alias into aliasHandler
- aliasHandler can now use methods from alias - removed aliasHandler.root, use .alias.fs instead - removed aliasHandler.aliasPrefix, use .alias.url instead - add aliases.filterSuccssor() method - add prefixFilter type
1 parent a431ba6 commit f2a5435

File tree

7 files changed

+42
-52
lines changed

7 files changed

+42
-52
lines changed

src/serverHandler/aliasHandler.go

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,18 @@ import (
1414

1515
var defaultHandler = http.NotFoundHandler()
1616

17-
type pathStrings struct {
18-
path string
19-
strings []string
20-
}
17+
type prefixFilter func(whole, prefix string) bool
2118

2219
type aliasHandler struct {
23-
root string
20+
alias
21+
2422
emptyRoot bool
2523
autoDirSlash int
2624
hsts bool
2725
hstsMaxAge string
2826
toHttps bool
2927
toHttpsPort string // with prefix ":"
3028
defaultSort string
31-
aliasPrefix string
3229

3330
users *user.List
3431
theme theme.Theme
@@ -186,33 +183,25 @@ func newAliasHandler(
186183
vhostCtx *vhostContext,
187184
currentAlias alias,
188185
allAliases aliases,
189-
) http.Handler {
186+
) *aliasHandler {
190187
emptyRoot := p.EmptyRoot && currentAlias.url == "/"
191188

192-
aliases := aliases{}
193-
for _, alias := range allAliases {
194-
if alias.isSuccessorOf(currentAlias.url) {
195-
aliases = append(aliases, alias)
196-
}
197-
}
198-
199189
h := &aliasHandler{
200-
root: currentAlias.fs,
190+
alias: currentAlias,
201191
emptyRoot: emptyRoot,
202192
autoDirSlash: p.AutoDirSlash,
203193
hsts: p.Hsts,
204194
hstsMaxAge: strconv.Itoa(p.HstsMaxAge),
205195
toHttps: p.ToHttps,
206196
toHttpsPort: p.ToHttpsPort,
207197
defaultSort: p.DefaultSort,
208-
aliasPrefix: currentAlias.url,
209198

210199
users: vhostCtx.users,
211200
theme: vhostCtx.theme,
212201
logger: vhostCtx.logger,
213202

214203
dirIndexes: p.DirIndexes,
215-
aliases: aliases,
204+
aliases: allAliases.filterSuccessor(currentAlias.url),
216205

217206
globalAuth: p.GlobalAuth,
218207
authUrls: p.AuthUrls,

src/serverHandler/aliases.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,34 @@ func newAliases(entries [][2]string) aliases {
1717
return aliases
1818
}
1919

20-
func (aliases aliases) byUrlPath(urlPath string) (aliasItem alias, ok bool) {
21-
for _, alias := range aliases {
20+
func (list aliases) byUrlPath(urlPath string) (aliasItem alias, ok bool) {
21+
for _, alias := range list {
2222
if alias.isMatch(urlPath) {
2323
return alias, true
2424
}
2525
}
2626
return alias{}, false
2727
}
2828

29-
func (aliases aliases) Len() int {
30-
return len(aliases)
29+
func (list aliases) filterSuccessor(url string) aliases {
30+
var result aliases
31+
32+
for _, a := range list {
33+
if a.isSuccessorOf(url) {
34+
result = append(result, a)
35+
}
36+
}
37+
38+
return result
39+
}
40+
41+
func (list aliases) Len() int {
42+
return len(list)
3143
}
3244

33-
func (aliases aliases) Less(i, j int) bool {
34-
iLen := len(aliases[i].url)
35-
jLen := len(aliases[j].url)
45+
func (list aliases) Less(i, j int) bool {
46+
iLen := len(list[i].url)
47+
jLen := len(list[j].url)
3648
if iLen != jLen {
3749
// longer is prior
3850
return iLen > jLen
@@ -41,6 +53,6 @@ func (aliases aliases) Less(i, j int) bool {
4153
return i > j
4254
}
4355

44-
func (aliases aliases) Swap(i, j int) {
45-
aliases[i], aliases[j] = aliases[j], aliases[i]
56+
func (list aliases) Swap(i, j int) {
57+
list[i], list[j] = list[j], list[i]
4658
}

src/serverHandler/archive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (h *aliasHandler) archive(
158158
h.visitTreeNode(
159159
r,
160160
session.vhostReqPath,
161-
path.Clean(h.root+session.aliasReqPath),
161+
path.Clean(h.fs+session.aliasReqPath),
162162
"",
163163
data.Item != nil, // not empty root
164164
selections,

src/serverHandler/middleware.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func (h *aliasHandler) applyMiddlewares(mids []middleware.Middleware, w http.Res
1515
VhostReqPath: session.vhostReqPath,
1616
AliasReqPath: session.aliasReqPath,
1717
AliasFsPath: session.fsPath,
18-
AliasFsRoot: h.root,
18+
AliasFsRoot: h.fs,
1919

2020
WantJson: session.wantJson,
2121

src/serverHandler/multiplexHandler.go

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,12 @@ import (
55
"net/http"
66
)
77

8-
type aliasWithHandler struct {
9-
alias alias
10-
handler http.Handler
11-
}
12-
13-
type multiplexHandler []aliasWithHandler
8+
type multiplexHandler []*aliasHandler
149

1510
func (mux multiplexHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
16-
for _, ah := range mux {
17-
if ah.alias.isMatch(r.URL.Path) || ah.alias.isPredecessorOf(r.URL.Path) {
18-
ah.handler.ServeHTTP(w, r)
11+
for _, h := range mux {
12+
if h.isMatch(r.URL.Path) || h.isPredecessorOf(r.URL.Path) {
13+
h.ServeHTTP(w, r)
1914
return
2015
}
2116
}
@@ -32,21 +27,15 @@ func newMultiplexHandler(
3227
}
3328

3429
aliases := newAliases(p.Aliases)
35-
3630
if len(aliases) == 1 {
37-
alias, hasRootAlias := aliases.byUrlPath("/")
38-
if hasRootAlias {
31+
if alias, hasRootAlias := aliases.byUrlPath("/"); hasRootAlias {
3932
return newAliasHandler(p, vhostCtx, alias, aliases)
4033
}
4134
}
4235

43-
aliasWithHandlers := make([]aliasWithHandler, len(aliases))
36+
mux := make(multiplexHandler, len(aliases))
4437
for i, alias := range aliases {
45-
aliasWithHandlers[i] = aliasWithHandler{
46-
alias: alias,
47-
handler: newAliasHandler(p, vhostCtx, alias, aliases),
48-
}
38+
mux[i] = newAliasHandler(p, vhostCtx, alias, aliases)
4939
}
50-
51-
return multiplexHandler(aliasWithHandlers)
40+
return mux
5241
}

src/serverHandler/mutate.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ func (h *aliasHandler) mutate(w http.ResponseWriter, r *http.Request, session *s
1616
switch {
1717
case data.IsUpload:
1818
if data.CanUpload {
19-
success = h.saveUploadFiles(session.authUserName, h.root+session.aliasReqPath, data.CanMkdir, data.CanDelete, data.AliasSubItems, r)
19+
success = h.saveUploadFiles(session.authUserName, h.fs+session.aliasReqPath, data.CanMkdir, data.CanDelete, data.AliasSubItems, r)
2020
}
2121
case data.IsMkdir:
2222
if data.CanMkdir && !h.logError(r.ParseForm()) {
23-
success = h.mkdirs(session.authUserName, h.root+session.aliasReqPath, r.Form["name"], data.AliasSubItems, r)
23+
success = h.mkdirs(session.authUserName, h.fs+session.aliasReqPath, r.Form["name"], data.AliasSubItems, r)
2424
}
2525
case data.IsDelete:
2626
if data.CanDelete && !h.logError(r.ParseForm()) {
27-
success = h.deleteItems(session.authUserName, h.root+session.aliasReqPath, r.Form["name"], data.AliasSubItems, r)
27+
success = h.deleteItems(session.authUserName, h.fs+session.aliasReqPath, r.Form["name"], data.AliasSubItems, r)
2828
}
2929
}
3030

src/serverHandler/sessionData.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,8 @@ func (h *aliasHandler) getSessionData(r *http.Request) (session *sessionContext,
324324
vhostReqPath := r.URL.Path
325325
tailSlash := vhostReqPath[len(vhostReqPath)-1] == '/'
326326

327-
reqPath := util.CleanUrlPath(vhostReqPath[len(h.aliasPrefix):])
328-
fsPath := filepath.Clean(h.root + reqPath)
327+
reqPath := util.CleanUrlPath(vhostReqPath[len(h.url):])
328+
fsPath := filepath.Clean(h.fs + reqPath)
329329

330330
rawQuery := r.URL.RawQuery
331331

0 commit comments

Comments
 (0)