openreplay/backend/pkg/url/url.go
Alexander 993b6b58ab
feat(backend): added utm data to PG (#2152)
* feat(backend): added utm data to PG

* feat(backend): added utm data to CH

* feat(db): removed nullableString() calls
2024-05-24 08:33:28 +02:00

68 lines
1.3 KiB
Go

package url
import (
"net/url"
"strings"
)
func DiscardURLQuery(url string) string {
return strings.Split(url, "?")[0]
}
func GetURLParts(rawURL string) (string, string, string, error) {
rawURL = strings.Replace(rawURL, "\t", "", -1) // Other chars?
u, err := url.Parse(rawURL)
if err != nil {
return "", "", "", err
}
// u.Scheme u.Fragment / RawFragment ?
path := u.Path
if u.RawPath != "" {
path = u.RawPath
}
return u.Host, path, u.RawQuery, nil
}
func GetURLQueryParams(rawURL string) (map[string]string, error) {
rawURL = strings.Replace(rawURL, "\t", "", -1)
u, err := url.Parse(rawURL)
if err != nil {
return nil, err
}
params := make(map[string]string)
for key, values := range u.Query() {
params[key] = values[0]
}
return params, nil
}
func getURLExtension(URL string) string {
u, err := url.Parse(URL)
if err != nil {
return ""
}
i := strings.LastIndex(u.Path, ".")
return u.Path[i+1:]
}
func GetResourceType(initiator string, URL string) string {
switch initiator {
case "xmlhttprequest", "fetch":
return "fetch"
case "img":
return "img"
default:
switch getURLExtension(URL) {
case "css":
return "stylesheet"
case "js":
return "script"
case "png", "gif", "jpg", "jpeg", "svg":
return "img"
case "mp4", "mkv", "ogg", "webm", "avi", "mp3":
return "media"
default:
return "other"
}
}
}