summaryrefslogtreecommitdiff
path: root/workhorse/internal/urlprefix/urlprefix.go
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/urlprefix/urlprefix.go')
-rw-r--r--workhorse/internal/urlprefix/urlprefix.go35
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
+}