diff options
Diffstat (limited to 'workhorse/internal/urlprefix/urlprefix.go')
-rw-r--r-- | workhorse/internal/urlprefix/urlprefix.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/workhorse/internal/urlprefix/urlprefix.go b/workhorse/internal/urlprefix/urlprefix.go new file mode 100644 index 00000000000..23eefe70c67 --- /dev/null +++ b/workhorse/internal/urlprefix/urlprefix.go @@ -0,0 +1,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 +} |