998c85d6f5
- support qr code auth - support resolution change - support h265 - refactor code
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package tuya
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
func FormToJSON(content any) string {
|
|
if content == nil {
|
|
return "{}"
|
|
}
|
|
|
|
jsonBytes, err := json.Marshal(content)
|
|
if err != nil {
|
|
return "{}"
|
|
}
|
|
|
|
return string(jsonBytes)
|
|
}
|
|
|
|
func ToBase64(tokenInfo *TokenInfo) (string, error) {
|
|
jsonData, err := json.Marshal(tokenInfo)
|
|
if err != nil {
|
|
return "", fmt.Errorf("error marshalling token: %v", err)
|
|
}
|
|
|
|
encoded := base64.URLEncoding.EncodeToString(jsonData)
|
|
|
|
return encoded, nil
|
|
}
|
|
|
|
func FromBase64(encodedTokenInfo string) (*TokenInfo, error) {
|
|
jsonData, err := base64.URLEncoding.DecodeString(encodedTokenInfo)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error decoding token: %v", err)
|
|
}
|
|
|
|
var tokenInfo TokenInfo
|
|
err = json.Unmarshal(jsonData, &tokenInfo)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error unmarshalling token: %v", err)
|
|
}
|
|
|
|
return &tokenInfo, nil
|
|
}
|
|
|
|
func ParseTokenInfo(tokenInfoOrString any) (*TokenInfo, error) {
|
|
var tokenInfo *TokenInfo
|
|
var err error
|
|
|
|
switch v := tokenInfoOrString.(type) {
|
|
case string:
|
|
tokenInfo, err = FromBase64(v)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to decode base64 token: %w", err)
|
|
}
|
|
case *TokenInfo:
|
|
tokenInfo = v
|
|
case TokenInfo:
|
|
copyOfV := v
|
|
tokenInfo = ©OfV
|
|
default:
|
|
return nil, fmt.Errorf("invalid type: %T", v)
|
|
}
|
|
|
|
if tokenInfo == nil {
|
|
return nil, fmt.Errorf("token info is nil")
|
|
}
|
|
|
|
return tokenInfo, nil
|
|
}
|