From 893f13d8b4cbc237ed199b3ad30cfda202a842da Mon Sep 17 00:00:00 2001 From: Abhishek Kondur Date: Mon, 9 Jan 2023 08:12:26 +0530 Subject: [PATCH] proxy update json marshal fix --- logic/peers.go | 34 ++++++++++++++++----------- models/node.go | 63 ++++++++++++++++++++++---------------------------- mq/handlers.go | 10 +++++++- 3 files changed, 57 insertions(+), 50 deletions(-) diff --git a/logic/peers.go b/logic/peers.go index 29c8f65c..4bb83ebb 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -263,7 +263,7 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload, continue } currentPeers, err := GetNetworkNodes(node.Network) - if err == nil { + if err != nil { continue } for _, peer := range currentPeers { @@ -271,30 +271,30 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload, //skip yourself continue } - host, err := GetHost(peer.HostID.String()) + peerHost, err := GetHost(peer.HostID.String()) if err != nil { continue } - proxyStatus := host.ProxyEnabled - listenPort := host.LocalListenPort + proxyStatus := peerHost.ProxyEnabled + listenPort := peerHost.LocalListenPort if proxyStatus { - listenPort = host.ProxyListenPort + listenPort = peerHost.ProxyListenPort if listenPort == 0 { listenPort = proxy_models.NmProxyPort } } 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, PublicListenPort: int32(listenPort), 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 { @@ -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)) if err == nil { - peerConfMap[host.PublicKey.String()] = proxy_models.PeerConf{ + peerConfMap[peerHost.PublicKey.String()] = proxy_models.PeerConf{ IsRelayed: true, RelayedTo: relayTo, Address: net.ParseIP(peer.PrimaryAddress()), @@ -325,6 +325,7 @@ func GetProxyUpdateForHost(host *models.Host) (proxy_models.ProxyManagerPayload, //proxyPayload.WgAddr = addr.String() proxyPayload.PeerMap = peerConfMap + fmt.Printf("----------> PEERRR MAP: %+v\n", peerConfMap) //proxyPayload.Network = node.Network //proxyPayload.InterfaceName = node.Interface //hardcode or read from host ?? @@ -404,7 +405,12 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { Port: peerHost.ListenPort, } 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 { peerConfig.Endpoint.IP = peer.LocalAddress.IP diff --git a/models/node.go b/models/node.go index 30920658..e924b130 100644 --- a/models/node.go +++ b/models/node.go @@ -8,7 +8,6 @@ import ( "time" "github.com/google/uuid" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) const ( @@ -483,43 +482,37 @@ func (node *Node) DoesACLDeny() bool { return node.DefaultACL == "no" } -func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) { +func (ln *LegacyNode) ConvertToNewNode(host *Host) (*Host, *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 - } 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 if _, cidr, err := net.ParseCIDR(ln.NetworkSettings.AddressRange); err == nil { node.NetworkRange = *cidr @@ -549,7 +542,7 @@ func (ln *LegacyNode) ConvertToNewNode() (*Host, *Node) { node.IsIngressGateway = parseBool(ln.IsIngressGateway) node.DNSOn = parseBool(ln.DNSOn) - return &host, &node + return host, &node } // Node.Legacy converts node to legacy format diff --git a/mq/handlers.go b/mq/handlers.go index a1d97b5c..985bf3fd 100644 --- a/mq/handlers.go +++ b/mq/handlers.go @@ -95,7 +95,15 @@ func UpdateNode(client mqtt.Client, msg mqtt.Message) { logger.Log(1, "error unmarshaling payload ", err.Error()) 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(¤tNode, newNode) if servercfg.Is_EE && ifaceDelta { if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil {