mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-07-18 17:38:07 +08:00
167 lines
3.5 KiB
Go
167 lines
3.5 KiB
Go
package _189_tv
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/hmac"
|
|
"crypto/sha1"
|
|
"encoding/hex"
|
|
"encoding/xml"
|
|
"fmt"
|
|
"net/http"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func clientSuffix() map[string]string {
|
|
return map[string]string{
|
|
"clientType": AndroidTV,
|
|
"version": TvVersion,
|
|
"channelId": TvChannelId,
|
|
"clientSn": "unknown",
|
|
"model": "PJX110",
|
|
"osFamily": "Android",
|
|
"osVersion": "35",
|
|
"networkAccessMode": "WIFI",
|
|
"telecomsOperator": "46011",
|
|
}
|
|
}
|
|
|
|
// SessionKeySignatureOfHmac HMAC签名
|
|
func SessionKeySignatureOfHmac(sessionSecret, sessionKey, operate, fullUrl, dateOfGmt string) string {
|
|
urlpath := regexp.MustCompile(`://[^/]+((/[^/\s?#]+)*)`).FindStringSubmatch(fullUrl)[1]
|
|
mac := hmac.New(sha1.New, []byte(sessionSecret))
|
|
data := fmt.Sprintf("SessionKey=%s&Operate=%s&RequestURI=%s&Date=%s", sessionKey, operate, urlpath, dateOfGmt)
|
|
mac.Write([]byte(data))
|
|
return strings.ToUpper(hex.EncodeToString(mac.Sum(nil)))
|
|
}
|
|
|
|
// AppKeySignatureOfHmac HMAC签名
|
|
func AppKeySignatureOfHmac(sessionSecret, appKey, operate, fullUrl string, timestamp int64) string {
|
|
urlpath := regexp.MustCompile(`://[^/]+((/[^/\s?#]+)*)`).FindStringSubmatch(fullUrl)[1]
|
|
mac := hmac.New(sha1.New, []byte(sessionSecret))
|
|
data := fmt.Sprintf("AppKey=%s&Operate=%s&RequestURI=%s&Timestamp=%d", appKey, operate, urlpath, timestamp)
|
|
mac.Write([]byte(data))
|
|
return strings.ToUpper(hex.EncodeToString(mac.Sum(nil)))
|
|
}
|
|
|
|
// 获取http规范的时间
|
|
func getHttpDateStr() string {
|
|
return time.Now().UTC().Format(http.TimeFormat)
|
|
}
|
|
|
|
// 时间戳
|
|
func timestamp() int64 {
|
|
return time.Now().UTC().UnixNano() / 1e6
|
|
}
|
|
|
|
type Time time.Time
|
|
|
|
func (t *Time) UnmarshalJSON(b []byte) error { return t.Unmarshal(b) }
|
|
func (t *Time) UnmarshalXML(e *xml.Decoder, ee xml.StartElement) error {
|
|
b, err := e.Token()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if b, ok := b.(xml.CharData); ok {
|
|
if err = t.Unmarshal(b); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return e.Skip()
|
|
}
|
|
func (t *Time) Unmarshal(b []byte) error {
|
|
bs := strings.Trim(string(b), "\"")
|
|
var v time.Time
|
|
var err error
|
|
for _, f := range []string{"2006-01-02 15:04:05 -07", "Jan 2, 2006 15:04:05 PM -07"} {
|
|
v, err = time.ParseInLocation(f, bs+" +08", time.Local)
|
|
if err == nil {
|
|
break
|
|
}
|
|
}
|
|
*t = Time(v)
|
|
return err
|
|
}
|
|
|
|
type String string
|
|
|
|
func (t *String) UnmarshalJSON(b []byte) error { return t.Unmarshal(b) }
|
|
func (t *String) UnmarshalXML(e *xml.Decoder, ee xml.StartElement) error {
|
|
b, err := e.Token()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if b, ok := b.(xml.CharData); ok {
|
|
if err = t.Unmarshal(b); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return e.Skip()
|
|
}
|
|
func (s *String) Unmarshal(b []byte) error {
|
|
*s = String(bytes.Trim(b, "\""))
|
|
return nil
|
|
}
|
|
|
|
func toFamilyOrderBy(o string) string {
|
|
switch o {
|
|
case "filename":
|
|
return "1"
|
|
case "filesize":
|
|
return "2"
|
|
case "lastOpTime":
|
|
return "3"
|
|
default:
|
|
return "1"
|
|
}
|
|
}
|
|
|
|
func toDesc(o string) string {
|
|
switch o {
|
|
case "desc":
|
|
return "true"
|
|
case "asc":
|
|
fallthrough
|
|
default:
|
|
return "false"
|
|
}
|
|
}
|
|
|
|
func ParseHttpHeader(str string) map[string]string {
|
|
header := make(map[string]string)
|
|
for _, value := range strings.Split(str, "&") {
|
|
if k, v, found := strings.Cut(value, "="); found {
|
|
header[k] = v
|
|
}
|
|
}
|
|
return header
|
|
}
|
|
|
|
func MustString(str string, err error) string {
|
|
return str
|
|
}
|
|
|
|
func BoolToNumber(b bool) int {
|
|
if b {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func isBool(bs ...bool) bool {
|
|
for _, b := range bs {
|
|
if b {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IF[V any](o bool, t V, f V) V {
|
|
if o {
|
|
return t
|
|
}
|
|
return f
|
|
}
|