summaryrefslogtreecommitdiff
path: root/workhorse/internal/urlprefix/urlprefix.go
blob: 23eefe70c672218056eea4a70c8773ec64406ab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package urlprefix

import (
	"path"
	"strings"
)

type Prefix string

func (p Prefix) Strip(path string) string {
	return CleanURIPath(strings.TrimPrefix(path, string(p)))
}

func (p Prefix) Match(path string) bool {
	pre := string(p)
	return strings.HasPrefix(path, pre) || path+"/" == pre
}

// Borrowed from: net/http/server.go
// Return the canonical path for p, eliminating . and .. elements.
func CleanURIPath(p string) string {
	if p == "" {
		return "/"
	}
	if p[0] != '/' {
		p = "/" + p
	}
	np := path.Clean(p)
	// path.Clean removes trailing slash except for root;
	// put the trailing slash back if necessary.
	if p[len(p)-1] == '/' && np != "/" {
		np += "/"
	}
	return np
}