gitea
Зеркало из https://github.com/go-gitea/gitea
1// Copyright 2019 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package util5
6import (7"net/url"8"path"9"strings"10)
11
12// PathEscapeSegments escapes segments of a path while not escaping forward slash
13func PathEscapeSegments(path string) string {14slice := strings.Split(path, "/")15for index := range slice {16slice[index] = url.PathEscape(slice[index])17}18escapedPath := strings.Join(slice, "/")19return escapedPath20}
21
22// URLJoin joins url components, like path.Join, but preserving contents
23func URLJoin(base string, elems ...string) string {24if !strings.HasSuffix(base, "/") {25base += "/"26}27baseURL, err := url.Parse(base)28if err != nil {29return ""30}31joinedPath := path.Join(elems...)32argURL, err := url.Parse(joinedPath)33if err != nil {34return ""35}36joinedURL := baseURL.ResolveReference(argURL).String()37if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") {38return joinedURL[1:] // Removing leading '/' if needed39}40return joinedURL41}
42
43func SanitizeURL(s string) (string, error) {44u, err := url.Parse(s)45if err != nil {46return "", err47}48u.User = nil49return u.String(), nil50}
51