mirror of
https://github.com/go-shiori/shiori.git
synced 2024-11-16 22:25:13 +08:00
47 lines
903 B
Go
47 lines
903 B
Go
|
package archiver
|
||
|
|
||
|
import (
|
||
|
nurl "net/url"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func clearUTMParams(url *nurl.URL) {
|
||
|
queries := url.Query()
|
||
|
|
||
|
for key := range queries {
|
||
|
if strings.HasPrefix(key, "utm_") {
|
||
|
queries.Del(key)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
url.RawQuery = queries.Encode()
|
||
|
}
|
||
|
|
||
|
// toAbsoluteURI convert uri to absolute path based on base.
|
||
|
// However, if uri is prefixed with hash (#), the uri won't be changed.
|
||
|
func toAbsoluteURI(uri string, base *nurl.URL) string {
|
||
|
if uri == "" || base == nil {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
// If it is hash tag, return as it is
|
||
|
if uri[:1] == "#" {
|
||
|
return uri
|
||
|
}
|
||
|
|
||
|
// If it is already an absolute URL, return as it is
|
||
|
tmp, err := nurl.ParseRequestURI(uri)
|
||
|
if err == nil && tmp.Scheme != "" && tmp.Hostname() != "" {
|
||
|
return uri
|
||
|
}
|
||
|
|
||
|
// Otherwise, resolve against base URI.
|
||
|
tmp, err = nurl.Parse(uri)
|
||
|
if err != nil {
|
||
|
return uri
|
||
|
}
|
||
|
|
||
|
clearUTMParams(tmp)
|
||
|
return base.ResolveReference(tmp).String()
|
||
|
}
|