Added a newServePath() func that is a special variant of newPath that is used in ServeHTTP (it lacks an unnecessary check for * catch-all symbol).
This commit is contained in:
parent
cc2cd72df8
commit
5d613b34ee
16
httpr.go
16
httpr.go
@ -36,9 +36,21 @@ func newPath(path string) (path, error) {
|
|||||||
return parts, nil
|
return parts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newServePath is a reduced version of newPath for ServeHTTP.
|
||||||
|
func newServePath(path string) (path, error) {
|
||||||
|
pathLen := len(path)
|
||||||
|
|
||||||
|
if path[0] != '/' {
|
||||||
|
return nil, errors.New("path should start with a slash symbol \"/\"")
|
||||||
|
}
|
||||||
|
|
||||||
path = strings.ReplaceAll(path, "//", "/")
|
path = strings.ReplaceAll(path, "//", "/")
|
||||||
|
|
||||||
parts := strings.Split(strings.TrimSuffix(path, "/"), "/")
|
if path[pathLen-1] == '/' {
|
||||||
|
path = path[:pathLen-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.Split(path, "/")
|
||||||
|
|
||||||
parts[0] = "/"
|
parts[0] = "/"
|
||||||
|
|
||||||
@ -179,7 +191,7 @@ func (rr *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
path, err := newPath(r.URL.Path)
|
path, err := newServePath(r.URL.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusNotAcceptable)
|
http.Error(w, err.Error(), http.StatusNotAcceptable)
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user