mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	健康检查支持UserAgent和是否基础请求设置
This commit is contained in:
		
							
								
								
									
										75
									
								
								pkg/nodeutils/aes_utils.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								pkg/nodeutils/aes_utils.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
			
		||||
 | 
			
		||||
package nodeutils
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// EncryptData 加密
 | 
			
		||||
func EncryptData(nodeUniqueId string, nodeSecret string, data maps.Map, timeout int32) (string, error) {
 | 
			
		||||
	if data == nil {
 | 
			
		||||
		data = maps.Map{}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var expiresAt int64
 | 
			
		||||
	if timeout > 0 {
 | 
			
		||||
		expiresAt = time.Now().Unix() + int64(timeout)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dataJSON, err := json.Marshal(maps.Map{
 | 
			
		||||
		"expiresAt": expiresAt,
 | 
			
		||||
		"data":      data,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", errors.New("marshal data to json failed: " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var method = &AES256CFBMethod{}
 | 
			
		||||
	err = method.Init([]byte(nodeUniqueId), []byte(nodeSecret))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	result, err := method.Encrypt(dataJSON)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return base64.StdEncoding.EncodeToString(result), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DecryptData 解密
 | 
			
		||||
func DecryptData(nodeUniqueId string, nodeSecret string, encodedString string) (maps.Map, error) {
 | 
			
		||||
	var method = &AES256CFBMethod{}
 | 
			
		||||
	err := method.Init([]byte(nodeUniqueId), []byte(nodeSecret))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	encodedData, err := base64.StdEncoding.DecodeString(encodedString)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.New("base64 decode failed: " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dataJSON, err := method.Decrypt(encodedData)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var result = maps.Map{}
 | 
			
		||||
	err = json.Unmarshal(dataJSON, &result)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.New("unmarshal data failed: " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var expiresAt = result.GetInt64("expiresAt")
 | 
			
		||||
	if expiresAt > 0 && expiresAt < time.Now().Unix() {
 | 
			
		||||
		return nil, errors.New("data is expired")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result.GetMap("data"), nil
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user