-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
68 lines (59 loc) · 1.28 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"flag"
"log"
"time"
"golang.zx2c4.com/wireguard/wgctrl"
)
var wg *wgctrl.Client
var cfg Config
var configFile string
func init() {
flag.StringVar(&configFile, "config", "config.yml", "Specify config file")
flag.Parse()
cfg = ParseConfig(configFile)
for i, _ := range cfg.Records {
GetRecord(&cfg.Records[i])
}
DisplayConfig(&cfg)
var err error
wg, err = wgctrl.New()
if err != nil {
log.Fatalf("Unable to create client: %e\n", err)
}
}
func main() {
check()
checkInterval := time.Duration(cfg.Settings.Interval) * time.Second
for range time.Tick(checkInterval) {
check()
}
}
func check() {
connections, err := wg.Devices()
if err != nil {
log.Fatalf("Unable to get connections: %e\n", err)
}
for _, con := range connections {
for _, peers := range con.Peers {
key := peers.PublicKey.String()
record := GetRecordWithKey(&cfg, key)
if record == nil {
continue
}
endpoint := peers.Endpoint
if endpoint != nil {
ip := endpoint.IP
detectChange(record, ip.String())
} else {
log.Println("No endpoint in connection")
}
}
}
}
func detectChange(record *Record, ip string) {
if record.LastIP != ip {
log.Printf("New IP detected for %s: %s -> %s\n", record.Name, record.LastIP, ip)
go UpdateRecord(record, ip)
}
}