diff --git a/logic/nodes.go b/logic/nodes.go index 70339cb4..dbbfd62c 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -139,6 +139,13 @@ func IsLeader(node *models.Node) bool { // UpdateNode - takes a node and updates another node with it's values func UpdateNode(currentNode *models.Node, newNode *models.Node) error { + var err error + if newNode.IsHub == "yes" && currentNode.IsHub != "yes" { + if err = unsetHub(newNode.Network); err != nil { + return err + } + } + if newNode.Address != currentNode.Address { if network, err := GetParentNetwork(newNode.Network); err == nil { if !IsAddressInCIDR(newNode.Address, network.AddressRange) { @@ -605,3 +612,25 @@ func isMacAddressUnique(macaddress string, networkName string) (bool, error) { return isunique, nil } + +// unsetHub - unset hub on network nodes +func unsetHub(networkName string) error { + + nodes, err := GetNetworkNodes(networkName) + if err != nil { + return err + } + + for i := range nodes { + if nodes[i].IsHub == "yes" { + nodes[i].IsHub = "no" + newNodeData, err := json.Marshal(&nodes[i]) + if err != nil { + logger.Log(1, "error on node during hub update") + return err + } + database.Insert(nodes[i].ID, string(newNodeData), database.NODES_TABLE_NAME) + } + } + return nil +} diff --git a/logic/server.go b/logic/server.go index 32dcb735..cad44533 100644 --- a/logic/server.go +++ b/logic/server.go @@ -40,8 +40,22 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) { serverCount = len(currentServers) + 1 } var ishub = "no" - if serverCount == 1 && (networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes") { - ishub = "yes" + + if networkSettings.IsHubAndSpoke == "yes" || networkSettings.IsComms == "yes" { + nodes, err := GetNetworkNodes(networkSettings.NetID) + if err != nil || nodes == nil { + ishub = "yes" + } else { + sethub := true + for i := range nodes { + if nodes[i].IsHub == "yes" { + sethub = false + } + } + if sethub { + ishub = "yes" + } + } } var node = &models.Node{ IsServer: "yes",