reverting set peers

This commit is contained in:
afeiszli 2022-02-07 14:43:06 -05:00
parent fb8def3315
commit 8f20f3bd7c

View file

@ -51,80 +51,62 @@ func SetPeers(iface, currentNodeAddr string, keepalive int32, peers []wgtypes.Pe
ncutils.PrintLog("no peers pulled", 1) ncutils.PrintLog("no peers pulled", 1)
return err return err
} }
found := false for _, peer := range peers {
//if a current peer is not in the list of new peers (based on PublicKey) delete it
for _, currentPeer := range devicePeers { for _, currentPeer := range devicePeers {
oldPeerAllowedIps[currentPeer.PublicKey.String()] = currentPeer.AllowedIPs if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
for _, peer := range peers { currentPeer.PublicKey.String() != peer.PublicKey.String() {
if peer.PublicKey == currentPeer.PublicKey { _, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
found = true if err != nil {
log.Println("error removing peer", peer.Endpoint.String())
}
} }
} }
if !found { udpendpoint := peer.Endpoint.String()
_, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true) var allowedips string
if err != nil { var iparr []string
ncutils.PrintLog("error removing peer: "+currentPeer.Endpoint.String(), 1) for _, ipaddr := range peer.AllowedIPs {
} iparr = append(iparr, ipaddr.String())
}
allowedips = strings.Join(iparr, ",")
keepAliveString := strconv.Itoa(int(keepalive))
if keepAliveString == "0" {
keepAliveString = "15"
}
if peer.Endpoint != nil {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" endpoint "+udpendpoint+
" persistent-keepalive "+keepAliveString+
" allowed-ips "+allowedips, true)
} else {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" persistent-keepalive "+keepAliveString+
" allowed-ips "+allowedips, true)
}
if err != nil {
log.Println("error setting peer", peer.PublicKey.String())
} }
} }
//if a new peer is not in the list of existing peers, add it
found = false
replace := false
for _, peer := range peers {
for _, currentPeer := range devicePeers {
if peer.PublicKey == currentPeer.PublicKey {
found = true
}
if found {
//check all fields are still the same
replace = false
if peer.Endpoint != currentPeer.Endpoint || peer.PersistentKeepaliveInterval != &currentPeer.PersistentKeepaliveInterval {
replace = true
}
for _, endpoint := range peer.AllowedIPs {
if ncutils.IPNetSliceContains(currentPeer.AllowedIPs, endpoint) {
replace = true
}
}
} for _, currentPeer := range devicePeers {
shouldDelete := true
if !found || replace { for _, peer := range peers {
udpendpoint := peer.Endpoint.String() if peer.AllowedIPs[0].String() == currentPeer.AllowedIPs[0].String() {
var allowedips string shouldDelete = false
var iparr []string
for _, ipaddr := range peer.AllowedIPs {
iparr = append(iparr, ipaddr.String())
}
allowedips = strings.Join(iparr, ",")
keepAliveString := strconv.Itoa(int(keepalive))
if peer.Endpoint != nil && keepalive > 0 {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" endpoint "+udpendpoint+
" persistent-keepalive "+keepAliveString+
" allowed-ips "+allowedips, true)
} else if peer.Endpoint != nil && keepalive == 0 {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" endpoint "+udpendpoint+
" allowed-ips "+allowedips, true)
} else if peer.Endpoint == nil && keepalive != 0 {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" persistent-keepalive "+keepAliveString+
" allowed-ips "+allowedips, true)
} else {
_, err = ncutils.RunCmd("wg set "+iface+" peer "+peer.PublicKey.String()+
" allowed-ips "+allowedips, true)
}
if err != nil {
ncutils.PrintLog("error setting peer: "+peer.PublicKey.String(), 1)
}
} }
} }
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
} }
if ncutils.IsMac() { if ncutils.IsMac() {
err = SetMacPeerRoutes(iface) err = SetMacPeerRoutes(iface)
return err return err
} else { } else if ncutils.IsLinux() {
local.SetPeerRoutes(iface, currentNodeAddr, oldPeerAllowedIps, peers) local.SetPeerRoutes(iface, currentNodeAddr, oldPeerAllowedIps, peers)
} }