From 636d973b6b1fb34725e38f757d445364a28f43a9 Mon Sep 17 00:00:00 2001 From: xmdhs Date: Tue, 5 Dec 2023 09:59:27 +0800 Subject: [PATCH] sort and fix some reg --- adguardsdnsfilter.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/adguardsdnsfilter.go b/adguardsdnsfilter.go index c728d50..b906991 100644 --- a/adguardsdnsfilter.go +++ b/adguardsdnsfilter.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net/http" + "slices" "strings" "github.com/AdguardTeam/urlfilter/filterlist" @@ -54,7 +55,9 @@ func adguard(ctx context.Context, c *http.Client) (*Ruleset, error) { ruleR := strings.TrimPrefix(rule, "://") ruleR = strings.ReplaceAll(ruleR, ".", `\.`) reg := strings.ReplaceAll(ruleR, "*", ".*") - reg = `^(.*\.)?` + reg + if !strings.HasPrefix(hr.RuleText, "*") { + reg = `^(.*\.)?` + reg + } if strings.HasSuffix(hr.RuleText, "^") { reg = reg + "$" } @@ -68,14 +71,20 @@ func adguard(ctx context.Context, c *http.Client) (*Ruleset, error) { r.Version = 1 r.Rules = []map[string][]any{ { - "domain": lo.Map[string, any](lo.Keys(domain), func(item string, index int) any { return item }), - "domain_suffix": lo.Map[string, any](lo.Keys(domainSuffix), func(item string, index int) any { return item }), - "domain_regex": lo.Map[string, any](lo.Keys(domainRegex), func(item string, index int) any { return item }), + "domain": toAny(domain), + "domain_suffix": toAny(domainSuffix), + "domain_regex": toAny(domainRegex), }, } return &r, nil } +func toAny(m map[string]struct{}) []any { + sl := lo.Keys(m) + slices.Sort(sl) + return lo.Map[string, any](sl, func(item string, index int) any { return item }) +} + func getFilter(ctx context.Context, c *http.Client) ([]byte, error) { reps, err := http.NewRequestWithContext(ctx, "GET", AdGuardSDNSFilter, nil) if err != nil {