Files
realDynDNS/main.go

73 lines
1.9 KiB
Go

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()
}