| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package missinggo
- import (
- "net/url"
- "path"
- )
- // Returns URL opaque as an unrooted path.
- func URLOpaquePath(u *url.URL) string {
- if u.Opaque != "" {
- return u.Opaque
- }
- return u.Path
- }
- // Cleans the (absolute) URL path, removing unnecessary . and .. elements. See
- // "net/http".cleanPath.
- func CleanURLPath(p string) string {
- if p == "" {
- return "/"
- }
- if p[0] != '/' {
- p = "/" + p
- }
- cp := path.Clean(p)
- // Add the trailing slash back, as it's relevant to a URL.
- if p[len(p)-1] == '/' && cp != "/" {
- cp += "/"
- }
- return cp
- }
- func URLJoinSubPath(base, rel string) string {
- baseURL, err := url.Parse(base)
- if err != nil {
- // Honey badger doesn't give a fuck.
- panic(err)
- }
- rel = CleanURLPath(rel)
- baseURL.Path = path.Join(baseURL.Path, rel)
- return baseURL.String()
- }
|