Files
karma/internal/uri/urls.go
2019-09-26 20:37:23 +01:00

66 lines
1.5 KiB
Go

package uri
import (
"encoding/base64"
"net/url"
"path"
)
// JoinURL can be used to join a base url (http(s)://domain.com) and a path (/my/path)
// it will return a joined string or an error (if you supply invalid url)
func JoinURL(base string, sub string) (string, error) {
u, err := url.Parse(base)
if err != nil {
return "", err
}
u.Path = path.Join(u.Path, sub)
return u.String(), nil
}
// SanitizeURI returns a copy of an URI string with password replaced by "xxx"
func SanitizeURI(s string) string {
u, err := url.Parse(s)
if err != nil {
return s
}
if u.User != nil {
if _, pwdSet := u.User.Password(); pwdSet {
u.User = url.UserPassword(u.User.Username(), "xxx")
}
return u.String()
}
return s
}
// HeadersForBasicAuth checks if the passed uri contains user & password
// (http://user:pass@example.com) and if so generates headers for Basic Auth
// based on
func HeadersForBasicAuth(s string) map[string]string {
headers := map[string]string{}
u, err := url.Parse(s)
if err != nil {
return headers
}
if u.User != nil {
if password, pwdSet := u.User.Password(); pwdSet {
auth := u.User.Username() + ":" + password
headers["Authorization"] = "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
}
}
return headers
}
// WithoutUserinfo takes an URL and returns a copy of it with basic auth
// stripped
func WithoutUserinfo(s string) string {
u, err := url.Parse(s)
if err != nil {
return s
}
u.User = nil
return u.String()
}