瀏覽代碼

proxy update json marshal fix

Abhishek Kondur 2 年之前
父節點
當前提交
893f13d8b4
共有 3 個文件被更改,包括 58 次插入51 次删除
  1. 20 14
      logic/peers.go
  2. 29 36
      models/node.go
  3. 9 1
      mq/handlers.go

+ 20 - 14
logic/peers.go

@@ -263,7 +263,7 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 			continue
 			continue
 		}
 		}
 		currentPeers, err := GetNetworkNodes(node.Network)
 		currentPeers, err := GetNetworkNodes(node.Network)
-		if err == nil {
+		if err != nil {
 			continue
 			continue
 		}
 		}
 		for _, peer := range currentPeers {
 		for _, peer := range currentPeers {
@@ -271,30 +271,30 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 				//skip yourself
 				//skip yourself
 				continue
 				continue
 			}
 			}
-			host, err := GetHost(peer.HostID.String())
+			peerHost, err := GetHost(peer.HostID.String())
 			if err != nil {
 			if err != nil {
 				continue
 				continue
 			}
 			}
-			proxyStatus := host.ProxyEnabled
-			listenPort := host.LocalListenPort
+			proxyStatus := peerHost.ProxyEnabled
+			listenPort := peerHost.LocalListenPort
 			if proxyStatus {
 			if proxyStatus {
-				listenPort = host.ProxyListenPort
+				listenPort = peerHost.ProxyListenPort
 				if listenPort == 0 {
 				if listenPort == 0 {
 					listenPort = proxy_models.NmProxyPort
 					listenPort = proxy_models.NmProxyPort
 				}
 				}
 			} else if listenPort == 0 {
 			} else if listenPort == 0 {
-				listenPort = host.ListenPort
+				listenPort = peerHost.ListenPort
 			}
 			}
-			if _, ok := peerConfMap[host.PublicKey.String()]; !ok {
-				peerConfMap[host.PublicKey.String()] = proxy_models.PeerConf{
+			if _, ok := peerConfMap[peerHost.PublicKey.String()]; !ok {
+				peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{
 					Proxy:            proxyStatus,
 					Proxy:            proxyStatus,
 					PublicListenPort: int32(listenPort),
 					PublicListenPort: int32(listenPort),
 					NetworkInfo:      make(map[string]proxy_models.NetworkInfo),
 					NetworkInfo:      make(map[string]proxy_models.NetworkInfo),
 				}
 				}
-			} else {
-				peerConfMap[host.PublicKey.String()].NetworkInfo[peer.Network] = proxy_models.NetworkInfo{
-					Address: net.IP(peer.PrimaryAddress()),
-				}
+
+			}
+			peerConfMap[peerHost.PublicKey.String()].NetworkInfo[peer.Network] = proxy_models.NetworkInfo{
+				Address: net.ParseIP(peer.PrimaryAddress()),
 			}
 			}
 
 
 			if peer.IsRelayed {
 			if peer.IsRelayed {
@@ -307,7 +307,7 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 					}
 					}
 					relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, relayHost.LocalListenPort))
 					relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, relayHost.LocalListenPort))
 					if err == nil {
 					if err == nil {
-						peerConfMap[host.PublicKey.String()] = proxy_models.PeerConf{
+						peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{
 							IsRelayed:        true,
 							IsRelayed:        true,
 							RelayedTo:        relayTo,
 							RelayedTo:        relayTo,
 							Address:          net.ParseIP(peer.PrimaryAddress()),
 							Address:          net.ParseIP(peer.PrimaryAddress()),
@@ -325,6 +325,7 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload,
 
 
 	//proxyPayload.WgAddr = addr.String()
 	//proxyPayload.WgAddr = addr.String()
 	proxyPayload.PeerMap = peerConfMap
 	proxyPayload.PeerMap = peerConfMap
+	fmt.Printf("----------> PEERRR MAP: %+v\n", peerConfMap)
 	//proxyPayload.Network = node.Network
 	//proxyPayload.Network = node.Network
 	//proxyPayload.InterfaceName = node.Interface
 	//proxyPayload.InterfaceName = node.Interface
 	//hardcode or read from host ??
 	//hardcode or read from host ??
@@ -404,7 +405,12 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 				Port: peerHost.ListenPort,
 				Port: peerHost.ListenPort,
 			}
 			}
 			if !host.ProxyEnabled && peerHost.ProxyEnabled {
 			if !host.ProxyEnabled && peerHost.ProxyEnabled {
-				peerConfig.Endpoint.Port = peerHost.ProxyListenPort
+				if peerHost.ProxyListenPort == 0 {
+					peerConfig.Endpoint.Port = proxy_models.NmProxyPort
+				} else {
+					peerConfig.Endpoint.Port = peerHost.ProxyListenPort
+				}
+
 			}
 			}
 			if uselocal {
 			if uselocal {
 				peerConfig.Endpoint.IP = peer.LocalAddress.IP
 				peerConfig.Endpoint.IP = peer.LocalAddress.IP

+ 29 - 36
models/node.go

@@ -8,7 +8,6 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/google/uuid"
 	"github.com/google/uuid"
-	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 )
 
 
 const (
 const (
@@ -483,43 +482,37 @@ func (node *Node) DoesACLDeny() bool {
 	return node.DefaultACL == "no"
 	return node.DefaultACL == "no"
 }
 }
 
 
-func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) {
+func (ln *LegacyNode) ConvertToNewNode(host *Host) (*Host, *Node) {
 	var node Node
 	var node Node
-	//host:= logic.GetHost(node.HostID)
-	var host Host
-	if host.ID.String() == "" {
-		host.ID = uuid.New()
-		host.FirewallInUse = ln.FirewallInUse
-		host.Version = ln.Version
-		host.IPForwarding = parseBool(ln.IPForwarding)
-		host.HostPass = ln.Password
-		host.Name = ln.Name
-		host.ListenPort = int(ln.ListenPort)
-		if _, cidr, err := net.ParseCIDR(ln.LocalAddress); err == nil {
+	host.FirewallInUse = ln.FirewallInUse
+	host.Version = ln.Version
+	host.IPForwarding = parseBool(ln.IPForwarding)
+	//host.HostPass = ln.Password
+	host.Name = ln.Name
+	host.ListenPort = int(ln.ListenPort)
+	if _, cidr, err := net.ParseCIDR(ln.LocalAddress); err == nil {
+		host.LocalRange = *cidr
+	} else {
+		if _, cidr, err := net.ParseCIDR(ln.LocalRange); err == nil {
 			host.LocalRange = *cidr
 			host.LocalRange = *cidr
-		} else {
-			if _, cidr, err := net.ParseCIDR(ln.LocalRange); err == nil {
-				host.LocalRange = *cidr
-			}
 		}
 		}
-		host.LocalListenPort = int(ln.LocalListenPort)
-		host.ProxyListenPort = int(ln.ProxyListenPort)
-		host.MTU = int(ln.MTU)
-		host.PublicKey, _ = wgtypes.ParseKey(ln.PublicKey)
-		host.MacAddress, _ = net.ParseMAC(ln.MacAddress)
-		host.TrafficKeyPublic = ln.TrafficKeys.Mine
-		gateway, err := net.ResolveUDPAddr("udp", ln.InternetGateway)
-		if err == nil {
-			host.InternetGateway = *gateway
-		}
-		id, _ := uuid.Parse(ln.ID)
-		host.Nodes = append(host.Nodes, id.String())
-		host.Interfaces = ln.Interfaces
-		host.EndpointIP = net.ParseIP(ln.Endpoint)
-		// host.ProxyEnabled = ln.Proxy // this will always be false..
-	}
-	id, _ := uuid.Parse(ln.ID)
-	node.ID = id
+	}
+	host.LocalListenPort = int(ln.LocalListenPort)
+	host.ProxyListenPort = int(ln.ProxyListenPort)
+	host.MTU = int(ln.MTU)
+	// host.PublicKey, _ = wgtypes.ParseKey(ln.PublicKey)
+	// host.MacAddress, _ = net.ParseMAC(ln.MacAddress)
+	// host.TrafficKeyPublic = ln.TrafficKeys.Mine
+	gateway, err := net.ResolveUDPAddr("udp", ln.InternetGateway)
+	if err == nil {
+		host.InternetGateway = *gateway
+	}
+	nodeID, _ := uuid.Parse(ln.ID)
+	host.Nodes = append(host.Nodes, nodeID.String())
+	host.Interfaces = ln.Interfaces
+	host.EndpointIP = net.ParseIP(ln.Endpoint)
+	// host.ProxyEnabled = ln.Proxy // this will always be false..
+	node.ID = nodeID
 	node.Network = ln.Network
 	node.Network = ln.Network
 	if _, cidr, err := net.ParseCIDR(ln.NetworkSettings.AddressRange); err == nil {
 	if _, cidr, err := net.ParseCIDR(ln.NetworkSettings.AddressRange); err == nil {
 		node.NetworkRange = *cidr
 		node.NetworkRange = *cidr
@@ -549,7 +542,7 @@ func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) {
 	node.IsIngressGateway = parseBool(ln.IsIngressGateway)
 	node.IsIngressGateway = parseBool(ln.IsIngressGateway)
 	node.DNSOn = parseBool(ln.DNSOn)
 	node.DNSOn = parseBool(ln.DNSOn)
 
 
-	return &host, &node
+	return host, &node
 }
 }
 
 
 // Node.Legacy converts node to legacy format
 // Node.Legacy converts node to legacy format

+ 9 - 1
mq/handlers.go

@@ -95,7 +95,15 @@ func UpdateNode(client mqtt.Client, msg mqtt.Message) {
 			logger.Log(1, "error unmarshaling payload ", err.Error())
 			logger.Log(1, "error unmarshaling payload ", err.Error())
 			return
 			return
 		}
 		}
-		_, newNode := oldNode.ConvertToNewNode()
+		host, err := logic.GetHost(oldNode.HostID)
+		if err != nil && database.IsEmptyRecord(err) {
+			return
+		}
+		host, newNode := oldNode.ConvertToNewNode(host)
+		err = logic.UpsertHost(host)
+		if err != nil {
+			logger.Log(0, "failed to update host: ", err.Error())
+		}
 		ifaceDelta := logic.IfaceDelta(&currentNode, newNode)
 		ifaceDelta := logic.IfaceDelta(&currentNode, newNode)
 		if servercfg.Is_EE && ifaceDelta {
 		if servercfg.Is_EE && ifaceDelta {
 			if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil {
 			if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil {