mirror of
https://gitee.com/samwaf/SamWaf.git
synced 2026-10-31 10:11:42 +08:00
107 lines
2.5 KiB
Go
107 lines
2.5 KiB
Go
package wafreg
|
|
|
|
import (
|
|
"SamWaf/global"
|
|
"SamWaf/model"
|
|
"SamWaf/wafsec"
|
|
"crypto/sha256"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"time"
|
|
)
|
|
|
|
/*
|
|
*
|
|
生成客户端机器信息
|
|
*/
|
|
func GenClientMachineInfo() model.MachineInfo {
|
|
machineInfo := model.MachineInfo{
|
|
Version: "v1",
|
|
ClientServerName: global.GWAF_CUSTOM_SERVER_NAME,
|
|
ClientTenantId: global.GWAF_TENANT_ID,
|
|
ClientUserCode: global.GWAF_USER_CODE,
|
|
OtherFeature: "",
|
|
}
|
|
//需要加签得字段
|
|
needSignStr := machineInfo.ClientServerName + machineInfo.ClientTenantId + machineInfo.ClientUserCode
|
|
machineInfo.MachineID = fmt.Sprintf("%x", sha256.Sum256([]byte(needSignStr)))
|
|
return machineInfo
|
|
}
|
|
|
|
/*
|
|
*
|
|
生成客户端机器码加密信息
|
|
*/
|
|
func GenClientMachineInfoWithEncrypt() (string, error) {
|
|
cryptoUtil := &wafsec.CryptoUtil{}
|
|
publicKey := []byte(global.GWAF_REG_PUBLIC_KEY)
|
|
machineInfo, err := json.Marshal(GenClientMachineInfo())
|
|
if err != nil {
|
|
return "转换json异常", err
|
|
}
|
|
rsaEncrypt, err := cryptoUtil.RsaEncrypt(machineInfo, publicKey)
|
|
if err != nil {
|
|
return "信息加密异常", err
|
|
}
|
|
encodeToString := base64.StdEncoding.EncodeToString(rsaEncrypt)
|
|
|
|
return encodeToString, nil
|
|
}
|
|
|
|
/*
|
|
*
|
|
|
|
校验注册服务信息
|
|
*/
|
|
func VerifyServerReg(binData []byte) (success bool, info model.RegistrationInfo, err error) {
|
|
|
|
//社区信息处理
|
|
var regInfo = model.RegistrationInfo{
|
|
Version: "v1",
|
|
Username: "user",
|
|
MemberType: "社区版",
|
|
MachineID: "",
|
|
ExpiryDate: time.Now().AddDate(1, 0, 0),
|
|
IsExpiry: false,
|
|
}
|
|
return true, regInfo, nil
|
|
}
|
|
|
|
/*
|
|
*
|
|
|
|
校验注册服务信息
|
|
*/
|
|
func VerifyServerRegByDefaultFile() (bool, model.RegistrationInfo, error) {
|
|
// 从文件中读取二进制数据
|
|
binData, err := ioutil.ReadFile("./registration_data.bin")
|
|
if err != nil {
|
|
return false, model.RegistrationInfo{}, errors.New("not find reginfo")
|
|
}
|
|
return VerifyServerReg(binData)
|
|
}
|
|
|
|
// CheckExpiry 计算给定日期与当前日期的天数差,并返回是否到期
|
|
func CheckExpiry(date time.Time) (int, bool) {
|
|
// 获取当前日期
|
|
now := time.Now()
|
|
|
|
// 将当前时间和给定时间都转为零点,以比较日期
|
|
now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
|
|
date = time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, date.Location())
|
|
|
|
// 计算日期差
|
|
duration := date.Sub(now)
|
|
|
|
// 计算天数差
|
|
days := int(duration.Hours() / 24)
|
|
|
|
// 判断是否到期
|
|
expired := days < 0
|
|
|
|
return days, expired
|
|
}
|