docxTemplater/tools/token.go

61 lines
986 B
Go
Raw Normal View History

package tools
import (
"crypto/rc4"
"encoding/hex"
"encoding/json"
)
const (
TokenKey = "z1eRU{fq*VtfLAszrz"
)
type StateToken struct {
UserID string `json:"user_id"`
Service string `json:"service"` // yandex, google, etc
RedirectUrl string `json:"redirect_url"`
}
func EncryptTokenRC4(data any) (string, error) {
cipher, err := rc4.NewCipher([]byte(TokenKey))
if err != nil {
return "", err
}
msg, err := json.Marshal(data)
if err != nil {
return "", err
}
encrypted := make([]byte, len(msg))
cipher.XORKeyStream(encrypted, msg)
return hex.EncodeToString(encrypted), nil
}
func DecryptTokenRC4(data string, result any) error {
cipher, err := rc4.NewCipher([]byte(TokenKey))
if err != nil {
return err
}
msg, err := hex.DecodeString(data)
if err != nil {
return err
}
decrypted := make([]byte, len(msg))
cipher.XORKeyStream(decrypted, msg)
err = json.Unmarshal(decrypted, &result)
if err != nil {
return err
}
return nil
}