diff --git a/controllers/ext_client.go b/controllers/ext_client.go index e6ac43a6..ab55a905 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -339,10 +339,13 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { return } host, err := logic.GetHost(node.HostID.String()) - logger.Log(0, r.Header.Get("user"), - fmt.Sprintf("failed to get ingress gateway host for node [%s] info: %v", nodeid, err)) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) - listenPort := host.LocalListenPort + if err != nil { + logger.Log(0, r.Header.Get("user"), + fmt.Sprintf("failed to get ingress gateway host for node [%s] info: %v", nodeid, err)) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + listenPort := host.ListenPort if host.ProxyEnabled { listenPort = host.ProxyListenPort } diff --git a/controllers/node.go b/controllers/node.go index fd524bd5..c71dcb5a 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -971,6 +971,17 @@ func updateNode(w http.ResponseWriter, r *http.Request) { } } } + host, err := logic.GetHost(newNode.HostID.String()) + if err != nil { + logger.Log(0, r.Header.Get("user"), + fmt.Sprintf("failed to get host for node [ %s ] info: %v", nodeid, err)) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + if newNode.IsIngressGateway { + host.ProxyEnabled = true + logic.UpsertHost(host) + } relayedUpdate := false if currentNode.IsRelayed && (currentNode.Address.String() != newNode.Address.String() || currentNode.Address6.String() != newNode.Address6.String()) { relayedUpdate = true diff --git a/logic/extpeers.go b/logic/extpeers.go index 1f66f176..1bdd12bd 100644 --- a/logic/extpeers.go +++ b/logic/extpeers.go @@ -131,16 +131,16 @@ func CreateExtClient(extclient *models.ExtClient) error { if err != nil { return err } - + logger.Log(0, "EXT CLIENT: ", extclient.Address) if extclient.Address == "" { if parentNetwork.IsIPv4 == "yes" { - newAddress, err := UniqueAddress(extclient.Network, false) + newAddress, err := UniqueAddress(extclient.Network, true) if err != nil { return err } extclient.Address = newAddress.String() - extclientInternalAddr, err := UniqueAddress(extclient.Network, true) + extclientInternalAddr, err := UniqueAddress(extclient.Network, false) if err != nil { return err } @@ -150,12 +150,12 @@ func CreateExtClient(extclient *models.ExtClient) error { if extclient.Address6 == "" { if parentNetwork.IsIPv6 == "yes" { - addr6, err := UniqueAddress6(extclient.Network, false) + addr6, err := UniqueAddress6(extclient.Network, true) if err != nil { return err } extclient.Address6 = addr6.String() - extclientInternalAddr6, err := UniqueAddress6(extclient.Network, true) + extclientInternalAddr6, err := UniqueAddress6(extclient.Network, false) if err != nil { return err } diff --git a/logic/networks.go b/logic/networks.go index 8d4dbe0b..2823bc99 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -211,25 +211,43 @@ func IsIPUnique(network string, ip string, tableName string, isIpv6 bool) bool { isunique := true collection, err := database.FetchRecords(tableName) - if err != nil { return isunique } for _, value := range collection { // filter - var node models.Node - if err = json.Unmarshal([]byte(value), &node); err != nil { - continue - } - if isIpv6 { - if node.Address6.IP.String() == ip && node.Network == network { - return false + + if tableName == database.NODES_TABLE_NAME { + var node models.Node + if err = json.Unmarshal([]byte(value), &node); err != nil { + continue } - } else { - if node.Address.IP.String() == ip && node.Network == network { - return false + if isIpv6 { + if node.Address6.IP.String() == ip && node.Network == network { + return false + } + } else { + if node.Address.IP.String() == ip && node.Network == network { + return false + } + } + } else if tableName == database.EXT_CLIENT_TABLE_NAME { + var extClient models.ExtClient + if err = json.Unmarshal([]byte(value), &extClient); err != nil { + continue + } + if isIpv6 { + if (extClient.Address6 == ip || extClient.InternalIPAddr6 == ip) && extClient.Network == network { + return false + } + + } else { + if (extClient.Address == ip || extClient.InternalIPAddr == ip) && extClient.Network == network { + return false + } } } + } return isunique diff --git a/logic/peers.go b/logic/peers.go index 6367eb75..ccb8f319 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -459,6 +459,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { if err == nil { hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, extPeers...) for _, extPeerIdAndAddr := range extPeerIDAndAddrs { + hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID] = make(map[string]models.IDandAddr) hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID][extPeerIdAndAddr.ID] = models.IDandAddr{ ID: extPeerIdAndAddr.ID, Address: extPeerIdAndAddr.Address,