cfdns/cmd/loop.go
2024-10-29 03:09:24 -07:00

68 lines
1.2 KiB
Go

package main
import (
"context"
"sync"
"github.com/cloudflare/cloudflare-go"
"github.com/goodieshq/cfdns/config"
"github.com/rs/zerolog/log"
)
var (
currentIPv4 = ""
currentIPv6 = ""
)
func loop(ctx context.Context, api *cloudflare.API, cfg *config.Config) {
defer func() {
value := recover()
if value != nil {
log.Error().Any("recovered", value).Send()
}
}()
if cfg.IPv4 {
ipv4, err := GetPublicIPv4()
if err != nil {
log.Panic().Err(err).Msg("failed to get public ipv4")
}
if ipv4 != currentIPv4 {
currentIPv4 = ipv4
log.Info().Msgf("updated ipv4 address: %s", ipv4)
}
var wg sync.WaitGroup
for _, domain := range cfg.Domains {
wg.Add(1)
go func() {
CheckAndUpdateIPv4(ctx, api, cfg, &domain)
wg.Done()
}()
}
wg.Wait()
}
if cfg.IPv6 {
ipv6, err := GetPublicIPv6()
if err != nil {
log.Panic().Err(err).Msg("failed to get public ipv6")
}
if ipv6 != currentIPv6 {
currentIPv6 = ipv6
log.Info().Msgf("updated ipv6 address: %s", ipv6)
}
var wg sync.WaitGroup
for _, domain := range cfg.Domains {
wg.Add(1)
go func() {
CheckAndUpdateIPv6(ctx, api, cfg, &domain)
wg.Done()
}()
}
wg.Wait()
}
}