diff --git a/.gitignore b/.gitignore index c6ef218..0c51afb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .idea - +coverage.out diff --git a/main.go b/main.go index c09842a..281447f 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,6 @@ package main import ( "github.com/bakito/adguardhome-sync/pkg/client" - "github.com/bakito/adguardhome-sync/pkg/log" "os" ) @@ -15,10 +14,6 @@ const ( envOReplicaPassword = "REPLICA_PASSWORD" ) -var ( - l = log.GetLogger("main") -) - func main() { // Create a Resty Client @@ -40,7 +35,6 @@ func main() { panic(err) } - // POST http://192.168.2.207/control/filtering/config {"interval":24,"enabled":false} // POST http://192.168.2.207/control/dns_config {"protection_enabled":false} } @@ -56,38 +50,32 @@ func syncFilters(err error, origin client.Client, replica client.Client) error { fa, fd := rf.Filters.Merge(of.Filters) - err = replica.AddFilters(false, fa...) - if err != nil { + if err = replica.AddFilters(false, fa...); err != nil { return err } if len(fa) > 0 { - err = replica.RefreshFilters(false) - if err != nil { + if err = replica.RefreshFilters(false); err != nil { return err } } - err = replica.DeleteFilters(false, fd...) - if err != nil { + if err = replica.DeleteFilters(false, fd...); err != nil { return err } fa, fd = rf.WhitelistFilters.Merge(of.WhitelistFilters) - err = replica.AddFilters(true, fa...) - if err != nil { + if err = replica.AddFilters(true, fa...); err != nil { return err } if len(fa) > 0 { - err = replica.RefreshFilters(true) - if err != nil { + if err = replica.RefreshFilters(true); err != nil { return err } } - err = replica.DeleteFilters(true, fd...) - if err != nil { + if err = replica.DeleteFilters(true, fd...); err != nil { return err } @@ -95,6 +83,11 @@ func syncFilters(err error, origin client.Client, replica client.Client) error { return replica.SetCustomRules(of.UserRules) } + if of.Enabled != rf.Enabled || of.Interval != rf.Interval { + if err = replica.ToggleFiltering(of.Enabled, of.Interval); err != nil { + return err + } + } return nil } @@ -110,13 +103,11 @@ func syncRewrites(err error, origin client.Client, replica client.Client) error a, r := replicaRewrites.Merge(originRewrites) - err = replica.AddRewriteEntries(a...) - if err != nil { + if err = replica.AddRewriteEntries(a...); err != nil { return err } - err = replica.DeleteRewriteEntries(r...) - if err != nil { + if err = replica.DeleteRewriteEntries(r...); err != nil { return err } - return err + return nil } diff --git a/pkg/client/client.go b/pkg/client/client.go index ff50ea0..b2f3008 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -38,6 +38,7 @@ type Client interface { DeleteRewriteEntries(e ...types.RewriteEntry) error Filtering() (*types.FilteringStatus, error) + ToggleFiltering(enabled bool, interval int) error AddFilters(whitelist bool, e ...types.Filter) error DeleteFilters(whitelist bool, e ...types.Filter) error RefreshFilters(whitelist bool) error @@ -153,3 +154,9 @@ func (cl *client) SetCustomRules(rules types.UserRules) error { _, err := cl.client.R().EnableTrace().SetBody(rules.String()).Post("/filtering/set_rules") return err } + +func (cl *client) ToggleFiltering(enabled bool, interval int) error { + cl.log.With("enabled", enabled, "interval", interval).Info("Toggle filtering") + _, err := cl.client.R().EnableTrace().SetBody(&types.FilteringConfig{Enabled: enabled, Interval: interval}).Post("/filtering/config") + return err +} diff --git a/pkg/types/types.go b/pkg/types/types.go index 0c8d4d4..fa1a4c1 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -65,8 +65,7 @@ type Filter struct { } type FilteringStatus struct { - Enabled bool `json:"enabled"` - Interval int `json:"interval"` + FilteringConfig Filters Filters `json:"filters"` WhitelistFilters Filters `json:"whitelist_filters"` UserRules UserRules `json:"user_rules"` @@ -78,6 +77,11 @@ func (ur *UserRules) String() string { return strings.Join(*ur, "\n") } +type FilteringConfig struct { + Enabled bool `json:"enabled"` + Interval int `json:"interval"` +} + type RefreshFilter struct { Whitelist bool `json:"whitelist"` }