71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package huya
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type CookiePair struct {
|
|
Key string
|
|
Value string
|
|
}
|
|
|
|
func CookiePairs(cookie string) []CookiePair {
|
|
parts := strings.Split(cookie, ";")
|
|
pairs := make([]CookiePair, 0, len(parts))
|
|
for _, part := range parts {
|
|
item := strings.TrimSpace(part)
|
|
if item == "" || !strings.Contains(item, "=") {
|
|
continue
|
|
}
|
|
key, value, _ := strings.Cut(item, "=")
|
|
key = strings.TrimSpace(key)
|
|
if key == "" {
|
|
continue
|
|
}
|
|
pairs = append(pairs, CookiePair{Key: key, Value: strings.TrimSpace(value)})
|
|
}
|
|
return pairs
|
|
}
|
|
|
|
func NormalizeCookie(cookie string) string {
|
|
pairs := CookiePairs(cookie)
|
|
order := make([]string, 0, len(pairs))
|
|
values := map[string]string{}
|
|
for _, pair := range pairs {
|
|
if _, ok := values[pair.Key]; !ok {
|
|
order = append(order, pair.Key)
|
|
}
|
|
values[pair.Key] = pair.Value
|
|
}
|
|
out := make([]string, 0, len(order))
|
|
for _, key := range order {
|
|
out = append(out, key+"="+values[key])
|
|
}
|
|
return strings.Join(out, "; ")
|
|
}
|
|
|
|
func CookieValue(cookie, key string) string {
|
|
value := ""
|
|
for _, pair := range CookiePairs(cookie) {
|
|
if pair.Key == key {
|
|
value = pair.Value
|
|
}
|
|
}
|
|
return value
|
|
}
|
|
|
|
func ResolveUID(cookie string) int64 {
|
|
for _, key := range []string{"yyuid", "udb_uid", "uid"} {
|
|
value := CookieValue(cookie, key)
|
|
if value == "" {
|
|
continue
|
|
}
|
|
uid, err := strconv.ParseInt(value, 10, 64)
|
|
if err == nil && uid > 0 {
|
|
return uid
|
|
}
|
|
}
|
|
return 0
|
|
}
|