docxTemplater/tools/token.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
}