77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package watcher
|
|
|
|
import (
|
|
"github.com/datahearth/ddnsclient/pkg/providers"
|
|
"github.com/datahearth/ddnsclient/pkg/subdomain"
|
|
"github.com/datahearth/ddnsclient/pkg/utils"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type Watcher interface {
|
|
Run(chan bool) error
|
|
}
|
|
|
|
type watcher struct {
|
|
logger logrus.FieldLogger
|
|
provider providers.Provider
|
|
subdomains []subdomain.Subdomain
|
|
domain string
|
|
webIP string
|
|
}
|
|
|
|
func NewWatcher(logger logrus.FieldLogger, provider providers.Provider, webIP string) (Watcher, error) {
|
|
if logger == nil {
|
|
return nil, utils.ErrNilLogger
|
|
}
|
|
if provider == nil {
|
|
return nil, ErrNilProvider
|
|
}
|
|
if webIP == "" {
|
|
webIP = "http://dynamicdns.park-your-domain.com/getip"
|
|
}
|
|
domain := viper.GetStringMap("watcher")["domain"].(string)
|
|
sbs := utils.AggregateSubdomains(viper.GetStringMap("watcher")["subdomains"].([]string), domain)
|
|
subdomains := make([]subdomain.Subdomain, len(sbs))
|
|
for _, sd := range sbs {
|
|
sub, err := subdomain.NewSubdomain(logger, sd)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
subdomains = append(subdomains, sub)
|
|
}
|
|
|
|
return &watcher{
|
|
logger: logger,
|
|
provider: provider,
|
|
domain: domain,
|
|
subdomains: subdomains,
|
|
webIP: webIP,
|
|
}, nil
|
|
}
|
|
|
|
func (w *watcher) Run(close chan bool) error {
|
|
for {
|
|
select {
|
|
case <-close:
|
|
return nil
|
|
default:
|
|
srvIP, err := utils.RetrieveServerIP(w.webIP)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, sd := range w.subdomains {
|
|
ok, err := sd.CheckIPAddr(srvIP)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !ok {
|
|
w.provider.UpdateIP(sd.GetSubdomainIP(), srvIP)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|