Browse Source

fixed removing peers

worker-9 4 years ago
parent
commit
e4470ae3c9
1 changed files with 25 additions and 1 deletions
  1. 25 1
      netclient/wireguard/kernel.go

+ 25 - 1
netclient/wireguard/kernel.go

@@ -243,6 +243,7 @@ func SetWGConfig(network string, peerupdate bool) error {
 }
 
 func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
+
 	client, err := wgctrl.New()
 	if err != nil {
 		log.Println("failed to start wgctrl")
@@ -253,9 +254,15 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
 		log.Println("failed to parse interface")
 		return
 	}
+	devicePeers := device.Peers
+	if len(devicePeers) > 1 && len(peers) == 0 {
+		log.Println("no peers pulled")
+		return
+	}
+
 	for _, peer := range peers {
 
-		for _, currentPeer := range device.Peers {
+		for _, currentPeer := range devicePeers {
 			if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
 				_, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove")
@@ -289,6 +296,23 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) {
 			log.Println("error setting peer", peer.PublicKey.String(), err)
 		}
 	}
+
+	for _, currentPeer := range devicePeers {
+		shouldDelete := true
+		for _, peer := range peers {
+			if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
+				shouldDelete = false
+			}
+		}
+		if shouldDelete {
+			_, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove")
+			if err != nil {
+				log.Println("error removing peer", currentPeer.PublicKey.String())
+			} else {
+				log.Println("removed peer " + currentPeer.PublicKey.String())
+			}
+		}
+	}
 }
 
 func StorePrivKey(key string, network string) error {