This commit is contained in:
ryan
2026-06-19 15:13:24 +08:00
parent 0b34792709
commit 32861c5db9
376 changed files with 3648 additions and 19957 deletions
+2 -1
View File
@@ -1,9 +1,10 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
// Package flared defines shared error messages for tunnel client operations.
package flared
const (
errTunnelTokenInvalid = "无权进行此操作,Tunnel Token 无效"
errTunnelTokenInvalid = "无权进行此操作,Tunnel Token 无效" //nolint:gosec // false positive: this is an error message, not hardcoded credentials
errTunnelNodeTypeMismatch = "此节点不是 TunnelClient 类型"
)
+10 -5
View File
@@ -18,6 +18,11 @@ import (
"gorm.io/gorm"
)
const (
updateChannelStable = "stable"
defaultTunnelTargetPort = 80
)
type configVersionRow struct {
Version string `gorm:"column:version"`
Checksum string `gorm:"column:checksum"`
@@ -31,7 +36,7 @@ func normalizeReleaseChannel(channel string) string {
if strings.ToLower(strings.TrimSpace(channel)) == "preview" {
return "preview"
}
return "stable"
return updateChannelStable
}
func normalizeFlaredHeartbeatPayload(payload HeartbeatPayload) HeartbeatPayload {
@@ -146,20 +151,20 @@ func decodeStoredDomains(raw string, fallbackDomain string) ([]string, error) {
func parseTunnelTargetAddr(addr string) (string, int) {
addr = strings.TrimSpace(addr)
if addr == "" {
return "127.0.0.1", 80
return "127.0.0.1", defaultTunnelTargetPort
}
host, portStr, err := net.SplitHostPort(addr)
if err != nil {
lastColon := strings.LastIndex(addr, ":")
if lastColon < 0 {
return addr, 80
return addr, defaultTunnelTargetPort
}
host = addr[:lastColon]
portStr = addr[lastColon+1:]
}
port := 80
port := defaultTunnelTargetPort
if _, scanErr := fmt.Sscanf(portStr, "%d", &port); scanErr != nil {
port = 80
port = defaultTunnelTargetPort
}
if host == "" {
host = "127.0.0.1"
+10 -9
View File
@@ -17,10 +17,11 @@ import (
)
const (
nodeStatusOnline = "online"
applyResultOK = "success"
applyResultWarn = "warning"
applyResultFail = "failed"
nodeStatusOnline = "online"
applyResultOK = "success"
applyResultWarn = "warning"
applyResultFail = "failed"
maxApplyLogMessageLength = 16000
)
// Heartbeat processes an OpenFlared heartbeat and returns runtime settings.
@@ -46,13 +47,13 @@ func Heartbeat(ctx context.Context, node *model.OpenFlareNode, payload Heartbeat
"last_seen_at": now,
"status": nodeStatusOnline,
"update_requested": false,
"update_channel": "stable",
"update_channel": updateChannelStable,
"update_tag": "",
}
if !previous.UpdateRequested {
delete(changes, "update_requested")
}
if previous.UpdateChannel == "stable" {
if previous.UpdateChannel == updateChannelStable {
delete(changes, "update_channel")
}
if previous.UpdateTag == "" {
@@ -67,7 +68,7 @@ func Heartbeat(ctx context.Context, node *model.OpenFlareNode, payload Heartbeat
node.ExtVersion = payload.FrpVersion
node.CurrentVersion = payload.CurrentVersion
node.UpdateRequested = false
node.UpdateChannel = "stable"
node.UpdateChannel = updateChannelStable
node.UpdateTag = ""
lastSeen := now
node.LastSeenAt = &lastSeen
@@ -228,8 +229,8 @@ func normalizeApplyLogPayload(payload ApplyLogPayload) ApplyLogPayload {
payload.Checksum = strings.TrimSpace(payload.Checksum)
payload.MainConfigChecksum = strings.TrimSpace(payload.MainConfigChecksum)
payload.RouteConfigChecksum = strings.TrimSpace(payload.RouteConfigChecksum)
if len(payload.Message) > 16000 {
payload.Message = payload.Message[:16000]
if len(payload.Message) > maxApplyLogMessageLength {
payload.Message = payload.Message[:maxApplyLogMessageLength]
}
return payload
}
@@ -5,11 +5,26 @@ package flared
import pkgprotocol "github.com/Rain-kl/Wavelet/pkg/protocol"
// HeartbeatPayload is an alias for FlaredHeartbeatPayload.
type HeartbeatPayload = pkgprotocol.FlaredHeartbeatPayload
// ConnectedRelay is an alias for FlaredConnectedRelay.
type ConnectedRelay = pkgprotocol.FlaredConnectedRelay
// ActiveConfigMeta is an alias for ActiveConfigMeta.
type ActiveConfigMeta = pkgprotocol.ActiveConfigMeta
// HeartbeatResponse is an alias for FlaredHeartbeatResponse.
type HeartbeatResponse = pkgprotocol.FlaredHeartbeatResponse
// TunnelConfigResponse is an alias for FlaredTunnelConfigResponse.
type TunnelConfigResponse = pkgprotocol.FlaredTunnelConfigResponse
// RelayInfo is an alias for FlaredRelayInfo.
type RelayInfo = pkgprotocol.FlaredRelayInfo
// ProxyEntry is an alias for FlaredProxyEntry.
type ProxyEntry = pkgprotocol.FlaredProxyEntry
type ApplyLogPayload = pkgprotocol.ApplyLogPayload
// ApplyLogPayload is an alias for ApplyLogPayload.
type ApplyLogPayload = pkgprotocol.ApplyLogPayload