Initial Notifiers implementation

This commit is contained in:
mkelcik
2023-05-04 11:44:27 +02:00
parent 2d52cbe920
commit ffd5253f59
7 changed files with 211 additions and 8 deletions

32
main.go
View File

@@ -10,6 +10,7 @@ import (
"github.com/cloudflare/cloudflare-go"
"github.com/mkelcik/cloudflare-ddns-update/internal"
"github.com/mkelcik/cloudflare-ddns-update/notifications"
"github.com/mkelcik/cloudflare-ddns-update/public_resolvers"
)
@@ -17,6 +18,21 @@ type PublicIpResolver interface {
ResolvePublicIp(ctx context.Context) (net.IP, error)
}
func getNotifiers(tags []string) notifications.Notifiers {
out := notifications.Notifiers{}
for _, t := range tags {
if initFn, ok := notifications.Available[t]; ok {
notifier, err := initFn()
if err != nil {
log.Println(err)
continue
}
out = append(out, notifier)
}
}
return out
}
func getResolver(resolverName string) (PublicIpResolver, string) {
switch resolverName {
// HERE add another resolver if needed
@@ -51,6 +67,8 @@ func main() {
log.Fatal(err)
}
notifiers := getNotifiers(config.Notifiers)
// public ip resolver
publicIpResolver, resolverTag := getResolver(config.PublicIpResolverTag)
@@ -85,9 +103,19 @@ func main() {
if _, err := api.UpdateDNSRecord(ctx, cloudflare.ZoneIdentifier(zoneID), update); err != nil {
log.Printf("error updating dns record: %s", err)
} else {
log.Printf("Updated to `%s`", currentPublicIP)
continue
}
if err := notifiers.NotifyWithLog(ctx, notifications.Notification{
OldIp: net.ParseIP(dnsRecord.Content),
NewIp: currentPublicIP,
CheckedAt: time.Now(),
ResolverTag: resolverTag,
Domain: dnsRecord.Name,
}); err != nil {
log.Printf("errors in notifications: %s", err)
}
log.Printf("Updated to `%s`", currentPublicIP)
}
}
}