From 24070bf6ba0534517e342307976d22730f8f1bbe Mon Sep 17 00:00:00 2001 From: Timo Behrendt Date: Mon, 1 Apr 2024 11:47:07 +0200 Subject: [PATCH] feat: working example in main.go --- main.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 main.go diff --git a/main.go b/main.go new file mode 100644 index 0000000..14fbefe --- /dev/null +++ b/main.go @@ -0,0 +1,72 @@ +package main + +import ( + "fmt" + "realdnydns/pkg/changeDetector" + "realdnydns/pkg/config" + "realdnydns/pkg/dnsProvider" + ionos "realdnydns/pkg/dnsProvider/ionos" + "realdnydns/pkg/externalIpProvider" + plainExternalIpProvider "realdnydns/pkg/externalIpProvider/plain" + "time" + + "github.com/go-co-op/gocron" +) + +func main() { + configClient := config.Config{} + err := configClient.Load("config.yaml") + if err != nil { + panic(err) + } + + var externalIpProvider externalIpProvider.ExternalIpProvider + switch configClient.ExternalIPProvider.Type { + case "plain": + var plainConfig plainExternalIpProvider.PlainExternalIpProviderConfig + err := configClient.ExternalIPProvider.ProviderConfig.Decode(&plainConfig) + if err != nil { + panic(err) + } + + externalIpProvider, err = plainExternalIpProvider.New(plainConfig) + default: + panic(fmt.Errorf("unknown external IP provider: %s", configClient.ExternalIPProvider.Type)) + } + + var dnsProvider dnsProvider.DNSProvider + switch configClient.DNSProvider.Type { + case "ionos": + var ionosConfig ionos.IONOSConfig + err := configClient.DNSProvider.ProviderConfig.Decode(&ionosConfig) + if err != nil { + panic(err) + } + dnsProvider, err = ionos.NewIonos(&ionosConfig) + if err != nil { + panic(err) + } + default: + panic(fmt.Errorf("unknown DNS provider: %s", configClient.DNSProvider.Type)) + } + + changeDetector := changeDetector.New(externalIpProvider, dnsProvider, configClient.Domains) + + s := gocron.NewScheduler(time.UTC) + s.SingletonMode() + job, err := s.CronWithSeconds(configClient.CheckInterval).DoWithJobDetails(func(in string, job gocron.Job) { + numberChanged, err := changeDetector.DetectAndApplyChanges() + if err != nil { + panic(err) + } + fmt.Printf("Number of changes: %d\n", numberChanged) + fmt.Println("Next run:", job.NextRun()) + }) + if err != nil { + panic(err) + } + + fmt.Println("Starting scheduler") + fmt.Println("Next run:", job.NextRun()) + s.StartBlocking() +}