123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // Copyright 2019 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package util
-
- import (
- "net/url"
- "path"
- "strings"
- )
-
- // PathEscapeSegments escapes segments of a path while not escaping forward slash
- func PathEscapeSegments(path string) string {
- slice := strings.Split(path, "/")
- for index := range slice {
- slice[index] = url.PathEscape(slice[index])
- }
- escapedPath := strings.Join(slice, "/")
- return escapedPath
- }
-
- // URLJoin joins url components, like path.Join, but preserving contents
- func URLJoin(base string, elems ...string) string {
- if !strings.HasSuffix(base, "/") {
- base += "/"
- }
- baseURL, err := url.Parse(base)
- if err != nil {
- return ""
- }
- joinedPath := path.Join(elems...)
- argURL, err := url.Parse(joinedPath)
- if err != nil {
- return ""
- }
- joinedURL := baseURL.ResolveReference(argURL).String()
- if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") {
- return joinedURL[1:] // Removing leading '/' if needed
- }
- return joinedURL
- }
|