Files
bikinibottom/installs_on_host/go2rtc/pkg/tuya/helper.go
T
2026-04-04 19:36:14 +02:00

70 lines
1.4 KiB
Go

package tuya
import (
"crypto/md5"
cryptoRand "crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/hex"
"encoding/pem"
"errors"
"net/http"
"net/http/cookiejar"
"regexp"
"time"
"golang.org/x/net/publicsuffix"
)
func EncryptPassword(password, pbKey string) (string, error) {
// Hash password with MD5
hasher := md5.New()
hasher.Write([]byte(password))
hashedPassword := hex.EncodeToString(hasher.Sum(nil))
// Decode PEM public key
block, _ := pem.Decode([]byte("-----BEGIN PUBLIC KEY-----\n" + pbKey + "\n-----END PUBLIC KEY-----"))
if block == nil {
return "", errors.New("failed to decode PEM block")
}
pubKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return "", err
}
rsaPubKey, ok := pubKey.(*rsa.PublicKey)
if !ok {
return "", errors.New("not an RSA public key")
}
// Encrypt with RSA
encrypted, err := rsa.EncryptPKCS1v15(cryptoRand.Reader, rsaPubKey, []byte(hashedPassword))
if err != nil {
return "", err
}
// Convert to hex string
return hex.EncodeToString(encrypted), nil
}
func IsEmailAddress(input string) bool {
emailRegex := regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
return emailRegex.MatchString(input)
}
func CreateHTTPClientWithSession() *http.Client {
jar, err := cookiejar.New(&cookiejar.Options{
PublicSuffixList: publicsuffix.List,
})
if err != nil {
return nil
}
return &http.Client{
Timeout: 30 * time.Second,
Jar: jar,
}
}