MCPcopy Create free account
hub / github.com/PasarGuard/node / buildSyncDiff

Method buildSyncDiff

backend/wireguard/user_common.go:51–137  ·  view source on GitHub ↗
(
	existingPeers map[string]*PeerInfo,
	desiredPeers map[string]*DesiredPeer,
)

Source from the content-addressed store, hash-verified

49}
50
51func (wg *WireGuard) buildSyncDiff(
52 existingPeers map[string]*PeerInfo,
53 desiredPeers map[string]*DesiredPeer,
54) (*SyncDiff, error) {
55 targetPeers := make(map[string]*PeerInfo, len(desiredPeers))
56 for key, desired := range desiredPeers {
57 targetPeers[key] = &PeerInfo{
58 Email: desired.Email,
59 PublicKey: desired.ParsedKey,
60 AllowedIPs: desired.AllowedIPNets,
61 }
62 }
63
64 removeSet := make(map[string]*PeerInfo)
65 upsertByKey := make(map[string]*PeerInfo)
66 var peerConfigs []wgtypes.PeerConfig
67 psk, _ := wg.config.GetPreSharedKey()
68 for key, existing := range existingPeers {
69 target, exists := targetPeers[key]
70 if !exists {
71 removeSet[key] = existing
72 continue
73 }
74
75 ipnetsEqual := true
76 if len(existing.AllowedIPs) != len(target.AllowedIPs) {
77 ipnetsEqual = false
78 } else {
79 for i := range existing.AllowedIPs {
80 if existing.AllowedIPs[i].String() != target.AllowedIPs[i].String() {
81 ipnetsEqual = false
82 break
83 }
84 }
85 }
86
87 if existing.Email != target.Email || !ipnetsEqual {
88 if !ipnetsEqual {
89 config, err := buildAddConfigFromPeerInfo(target, psk)
90 if err != nil {
91 log.Printf("quarantining peer update %s due to config error: %v", target.Email, err)
92 continue
93 }
94 config.ReplaceAllowedIPs = true
95 peerConfigs = append(peerConfigs, config)
96 }
97 upsertByKey[key] = target
98 }
99 }
100
101 for key, target := range targetPeers {
102 if _, exists := existingPeers[key]; !exists {
103 config, err := buildAddConfigFromPeerInfo(target, psk)
104 if err != nil {
105 log.Printf("quarantining peer %s due to config error: %v", target.Email, err)
106 continue
107 }
108 upsertByKey[key] = target

Callers 3

newWithManagerFactoryFunction · 0.95
syncUsersFullMethod · 0.95

Calls 4

GetPreSharedKeyMethod · 0.80
StringMethod · 0.45

Tested by

no test coverage detected