proxy update json marshal fix

This commit is contained in:
Abhishek Kondur 2023-01-09 08:12:26 +05:30
parent 95b578455d
commit 893f13d8b4
3 changed files with 57 additions and 50 deletions

View file

@ -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 proxyStatus := peerHost.ProxyEnabled
listenPort := host.LocalListenPort 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 { if _, ok := peerConfMap[peerHost.PublicKey.String()]; !ok {
peerConfMap[host.PublicKey.String()] = proxy_models.PeerConf{ 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

View file

@ -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) host.FirewallInUse = ln.FirewallInUse
var host Host host.Version = ln.Version
if host.ID.String() == "" { host.IPForwarding = parseBool(ln.IPForwarding)
host.ID = uuid.New() //host.HostPass = ln.Password
host.FirewallInUse = ln.FirewallInUse host.Name = ln.Name
host.Version = ln.Version host.ListenPort = int(ln.ListenPort)
host.IPForwarding = parseBool(ln.IPForwarding) if _, cidr, err := net.ParseCIDR(ln.LocalAddress); err == nil {
host.HostPass = ln.Password host.LocalRange = *cidr
host.Name = ln.Name } else {
host.ListenPort = int(ln.ListenPort) if _, cidr, err := net.ParseCIDR(ln.LocalRange); err == nil {
if _, cidr, err := net.ParseCIDR(ln.LocalAddress); 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) host.LocalListenPort = int(ln.LocalListenPort)
node.ID = id 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

View file

@ -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 {