65 lines
1.0 KiB
Go
65 lines
1.0 KiB
Go
package tools
|
|
|
|
import (
|
|
"crypto/aes"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
)
|
|
|
|
var (
|
|
TokenKey = "z1eRU{fq*VtfLAszrz" //nolint
|
|
)
|
|
|
|
func SetToken(token string) {
|
|
TokenKey = token
|
|
}
|
|
|
|
type StateToken struct {
|
|
PenaID string `json:"pena_id"`
|
|
Service string `json:"service"` // yandex, google, etc
|
|
RedirectURL string `json:"redirect_url"`
|
|
}
|
|
|
|
func EncryptTokenAES(data any) (string, error) {
|
|
cipher, err := aes.NewCipher([]byte(TokenKey))
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
msg, err := json.Marshal(data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
encrypted := make([]byte, len(msg))
|
|
cipher.Encrypt(encrypted, msg)
|
|
|
|
return hex.EncodeToString(encrypted), nil
|
|
}
|
|
|
|
func DecryptTokenAES(data string, result any) error {
|
|
cipher, err := aes.NewCipher([]byte(TokenKey))
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
msg, err := hex.DecodeString(data)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
decrypted := make([]byte, len(msg))
|
|
|
|
cipher.Decrypt(decrypted, msg)
|
|
|
|
err = json.Unmarshal(decrypted, &result)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|