toggle filtering

This commit is contained in:
bakito 2021-03-28 08:59:18 +02:00
parent 44e35a1c85
commit ee670346f2
No known key found for this signature in database
GPG Key ID: FAF93C1C384DD6B4
4 changed files with 28 additions and 26 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
.idea
coverage.out

37
main.go
View File

@ -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
}

View File

@ -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
}

View File

@ -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"`
}