增加本地节点Hash辅助判断信息

This commit is contained in:
wyx2685 2024-02-06 20:26:30 +09:00
parent 0d274bcf61
commit 73f9b19222
No known key found for this signature in database
GPG Key ID: 8827A30FF1DB1379
3 changed files with 16 additions and 7 deletions

View File

@ -1,7 +1,9 @@
package panel
import (
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"fmt"
"reflect"
"strconv"
@ -130,7 +132,19 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
r, err := c.client.
R().
SetHeader("If-None-Match", c.nodeEtag).
ForceContentType("application/json").
Get(path)
if r.StatusCode() == 304 {
return nil, nil
}
hash := sha256.Sum256(r.Body())
newBodyHash := hex.EncodeToString(hash[:])
if c.responseBodyHash == newBodyHash {
return nil, nil
}
c.responseBodyHash = newBodyHash
c.nodeEtag = r.Header().Get("ETag")
if err = c.checkResponse(r, path, err); err != nil {
return nil, err
}
@ -141,9 +155,6 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
r.RawBody().Close()
}
}()
if r.StatusCode() == 304 {
return nil, nil
}
} else {
return nil, fmt.Errorf("received nil response")
}
@ -274,8 +285,7 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
cm.Routes = nil
cm.BaseConfig = nil
c.nodeEtag = r.Header().Get("ETag")
return
return node, nil
}
func intervalToTime(i interface{}) time.Duration {

View File

@ -23,6 +23,7 @@ type Client struct {
NodeId int
nodeEtag string
userEtag string
responseBodyHash string
LastReportOnline map[int]int
}

View File

@ -307,10 +307,8 @@ func extractPortFromAddr(addr string) int {
}
func formatAddress(ip string, port int) string {
// 检查 IP 地址是否为 IPv6
if strings.Contains(ip, ":") {
return fmt.Sprintf("[%s]:%d", ip, port)
}
// 对于 IPv4 地址,直接返回 IP:Port 格式
return fmt.Sprintf("%s:%d", ip, port)
}