Browse Source

added length checks as temp solution

0xdcarns 3 years ago
parent
commit
e7f9310b3d
3 changed files with 35 additions and 23 deletions
  1. 4 2
      logic/util.go
  2. 5 3
      logic/wireguard.go
  3. 26 18
      netclient/wireguard/common.go

+ 4 - 2
logic/util.go

@@ -202,8 +202,10 @@ func StringSliceContains(slice []string, item string) bool {
 // sets the network server peers of a given node
 // sets the network server peers of a given node
 func setNetworkServerPeers(serverNode *models.Node) {
 func setNetworkServerPeers(serverNode *models.Node) {
 	if currentPeersList, err := getSystemPeers(serverNode); err == nil {
 	if currentPeersList, err := getSystemPeers(serverNode); err == nil {
-		if database.SetPeers(currentPeersList, serverNode.Network) {
-			logger.Log(1, "set new peers on network", serverNode.Network)
+		if len(currentPeersList) > 0 {
+			if database.SetPeers(currentPeersList, serverNode.Network) {
+				logger.Log(1, "set new peers on network", serverNode.Network)
+			}
 		}
 		}
 	} else {
 	} else {
 		logger.Log(1, "could not set peers on network", serverNode.Network, ":", err.Error())
 		logger.Log(1, "could not set peers on network", serverNode.Network, ":", err.Error())

+ 5 - 3
logic/wireguard.go

@@ -114,9 +114,11 @@ func getSystemPeers(node *models.Node) (map[string]string, error) {
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
-	for _, peer := range device.Peers {
-		if IsBase64(peer.PublicKey.String()) && peer.Endpoint != nil && CheckEndpoint(peer.Endpoint.String()) {
-			peers[peer.PublicKey.String()] = peer.Endpoint.String()
+	if len(device.Peers) > 0 {
+		for _, peer := range device.Peers {
+			if IsBase64(peer.PublicKey.String()) && peer.Endpoint != nil && CheckEndpoint(peer.Endpoint.String()) {
+				peers[peer.PublicKey.String()] = peer.Endpoint.String()
+			}
 		}
 		}
 	}
 	}
 	return peers, nil
 	return peers, nil

+ 26 - 18
netclient/wireguard/common.go

@@ -58,7 +58,9 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 				iparr = append(iparr, ipaddr.String())
 				iparr = append(iparr, ipaddr.String())
 			}
 			}
 		}
 		}
-		allowedips = strings.Join(iparr, ",")
+		if iparr != nil && len(iparr) > 0 {
+			allowedips = strings.Join(iparr, ",")
+		}
 		keepAliveString := strconv.Itoa(int(keepalive))
 		keepAliveString := strconv.Itoa(int(keepalive))
 		if keepAliveString == "0" {
 		if keepAliveString == "0" {
 			keepAliveString = "15"
 			keepAliveString = "15"
@@ -78,30 +80,36 @@ func SetPeers(iface string, node *models.Node, peers []wgtypes.PeerConfig) error
 		}
 		}
 	}
 	}
 
 
-	for _, currentPeer := range devicePeers {
-		shouldDelete := true
-		for _, peer := range peers {
-			if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
-				shouldDelete = false
-			}
-			// re-check this if logic is not working, added in case of allowedips not working
-			if peer.PublicKey.String() == currentPeer.PublicKey.String() {
-				shouldDelete = false
-			}
-		}
-		if shouldDelete {
-			output, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
-			if err != nil {
-				log.Println(output, "error removing peer", currentPeer.PublicKey.String())
+	if len(devicePeers) > 0 {
+		for _, currentPeer := range devicePeers {
+			shouldDelete := true
+			if len(peers) > 0 {
+				for _, peer := range peers {
+					if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
+						shouldDelete = false
+					}
+					// re-check this if logic is not working, added in case of allowedips not working
+					if peer.PublicKey.String() == currentPeer.PublicKey.String() {
+						shouldDelete = false
+					}
+				}
+				if shouldDelete {
+					output, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
+					if err != nil {
+						log.Println(output, "error removing peer", currentPeer.PublicKey.String())
+					}
+				}
+				oldPeerAllowedIps[currentPeer.PublicKey.String()] = currentPeer.AllowedIPs
 			}
 			}
 		}
 		}
-		oldPeerAllowedIps[currentPeer.PublicKey.String()] = currentPeer.AllowedIPs
 	}
 	}
 	if ncutils.IsMac() {
 	if ncutils.IsMac() {
 		err = SetMacPeerRoutes(iface)
 		err = SetMacPeerRoutes(iface)
 		return err
 		return err
 	} else if ncutils.IsLinux() {
 	} else if ncutils.IsLinux() {
-		local.SetPeerRoutes(iface, oldPeerAllowedIps, peers)
+		if len(peers) > 0 {
+			local.SetPeerRoutes(iface, oldPeerAllowedIps, peers)
+		}
 	}
 	}
 
 
 	return nil
 	return nil