package changeDetector import ( "realdnydns/pkg/config" "realdnydns/pkg/dnsProvider" "realdnydns/pkg/externalIpProvider" ) type ChangeDetector struct { externalIpProvider externalIpProvider.ExternalIpProvider dnsProvider dnsProvider.DNSProvider domains []config.DomainConfig } func New( externalIpProvider externalIpProvider.ExternalIpProvider, dnsProvider dnsProvider.DNSProvider, domains []config.DomainConfig, ) ChangeDetector { return ChangeDetector{ externalIpProvider: externalIpProvider, dnsProvider: dnsProvider, domains: domains, } } func (c *ChangeDetector) DetectAndApplyChanges() (int, error) { externalIp, err := c.externalIpProvider.GetExternalIp() if err != nil { return 0, err } var numberUpdated int for _, domain := range c.domains { for _, subdomain := range domain.Subdomains { currentRecord, err := c.dnsProvider.GetRecord(domain.TLD, subdomain) if err != nil { return numberUpdated, err } if currentRecord.IP != externalIp.String() { _, err = c.dnsProvider.UpdateRecord(domain.TLD, subdomain, externalIp, currentRecord.TTL, currentRecord.Prio, currentRecord.Disabled) numberUpdated++ if err != nil { return numberUpdated, err } } } } return numberUpdated, nil }