Selaa lähdekoodia

check node acls,action,connection status

Abhishek Kondur 2 vuotta sitten
vanhempi
commit
392ef6c326
3 muutettua tiedostoa jossa 17 lisäystä ja 8 poistoa
  1. 2 3
      controllers/hosts.go
  2. 9 1
      mq/handlers.go
  3. 6 4
      mq/publishers.go

+ 2 - 3
controllers/hosts.go

@@ -303,6 +303,7 @@ func addHostToNetwork(w http.ResponseWriter, r *http.Request) {
 			Action: models.RequestAck,
 			Host:   *currHost,
 		})
+		mq.BroadCastAddOrUpdatePeer(currHost, newNode, false)
 	}
 
 	logger.Log(2, r.Header.Get("user"), fmt.Sprintf("added host %s to network %s", currHost.Name, network))
@@ -354,9 +355,7 @@ func deleteHostFromNetwork(w http.ResponseWriter, r *http.Request) {
 
 	runUpdates(node, false)
 	go func() { // notify of peer change
-		if err := mq.PublishPeerUpdate(); err != nil {
-			logger.Log(1, "error publishing peer update ", err.Error())
-		}
+		mq.BroadCastDelPeer(currHost, network)
 		if err := mq.PublishDNSDelete(node, currHost); err != nil {
 			logger.Log(1, "error publishing dns update", err.Error())
 		}

+ 9 - 1
mq/handlers.go

@@ -59,9 +59,17 @@ func UpdateNode(client mqtt.Client, msg mqtt.Message) {
 		return
 	}
 	if ifaceDelta { // reduce number of unneeded updates, by only sending on iface changes
-		if err = PublishPeerUpdate(); err != nil {
+		h, err := logic.GetHost(newNode.HostID.String())
+		if err != nil {
+			return
+		}
+		if err = BroadCastAddOrUpdatePeer(h, &newNode, true); err != nil {
 			logger.Log(0, "error updating peers when node", currentNode.ID.String(), "informed the server of an interface change", err.Error())
 		}
+		if nodes, err := logic.GetNetworkNodes(newNode.Network); err == nil {
+			FlushNetworkPeersToHost(h, &newNode, nodes)
+		}
+
 	}
 
 	logger.Log(1, "updated node", id, newNode.ID.String())

+ 6 - 4
mq/publishers.go

@@ -132,7 +132,8 @@ func FlushNetworkPeersToHost(host *models.Host, hNode *models.Node, networkNodes
 			continue
 		}
 
-		if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(nodeI.Network), nodeacls.NodeID(nodeI.ID.String()), nodeacls.NodeID(hNode.ID.String())) {
+		if !nodeacls.AreNodesAllowed(nodeacls.NetworkID(nodeI.Network), nodeacls.NodeID(hNode.ID.String()), nodeacls.NodeID(nodeI.ID.String())) ||
+			hNode.Action == models.NODE_DELETE || hNode.PendingDelete || !hNode.Connected {
 			// remove peer if not allowed
 			rmPeerAction.Peers = append(rmPeerAction.Peers, wgtypes.PeerConfig{
 				PublicKey: peerHost.PublicKey,
@@ -219,7 +220,6 @@ func BroadCastAclUpdate(network string) error {
 
 // BroadCastAddOrUpdatePeer - notifys the hosts in the network to add or update peer.
 func BroadCastAddOrUpdatePeer(host *models.Host, node *models.Node, update bool) error {
-	// TODO: ACLs
 	nodes, err := logic.GetNetworkNodes(node.Network)
 	if err != nil {
 		return err
@@ -249,9 +249,11 @@ func BroadCastAddOrUpdatePeer(host *models.Host, node *models.Node, update bool)
 		}
 		// update allowed ips, according to the peer node
 		p.Peers[0].AllowedIPs = logic.GetAllowedIPs(&nodeI, node, nil)
-		if update && !nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(nodeI.ID.String())) {
-			// remove peer if not allowed
+		if update && (!nodeacls.AreNodesAllowed(nodeacls.NetworkID(node.Network), nodeacls.NodeID(node.ID.String()), nodeacls.NodeID(nodeI.ID.String())) ||
+			node.Action == models.NODE_DELETE || node.PendingDelete || !node.Connected) {
+			// remove peer
 			p.Action = models.RemovePeer
+			p.Peers[0].Remove = true
 		}
 		data, err := json.Marshal(p)
 		if err != nil {