Files
go2rtc/pkg/tuya/helper.go
T
seydx 998c85d6f5 - support adding cameras via interface
- support qr code auth
- support resolution change
- support h265
- refactor code
2025-07-10 16:09:18 +02:00

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 = &copyOfV
default:
return nil, fmt.Errorf("invalid type: %T", v)
}
if tokenInfo == nil {
return nil, fmt.Errorf("token info is nil")
}
return tokenInfo, nil
}