diff --git a/internal/filtering/safesearch.go b/internal/filtering/safesearch.go index b389573a4ca..e0244f5edf6 100644 --- a/internal/filtering/safesearch.go +++ b/internal/filtering/safesearch.go @@ -23,6 +23,7 @@ type SafeSearchConfig struct { // enabled or disabled. Bing bool `yaml:"bing" json:"bing"` + Brave bool `yaml:"brave" json:"brave"` DuckDuckGo bool `yaml:"duckduckgo" json:"duckduckgo"` Ecosia bool `yaml:"ecosia" json:"ecosia"` Google bool `yaml:"google" json:"google"` diff --git a/internal/filtering/safesearch/rules.go b/internal/filtering/safesearch/rules.go index 8a784ceb93b..9c667b5afb1 100644 --- a/internal/filtering/safesearch/rules.go +++ b/internal/filtering/safesearch/rules.go @@ -5,6 +5,9 @@ import _ "embed" //go:embed rules/bing.txt var bing string +//go:embed rules/brave.txt +var brave string + //go:embed rules/google.txt var google string @@ -29,6 +32,7 @@ var youtube string // https://adguardteam.github.io/HostlistsRegistry/assets/youtube_safe_search.txt. var safeSearchRules = map[Service]string{ Bing: bing, + Brave: brave, DuckDuckGo: duckduckgo, Ecosia: ecosia, Google: google, diff --git a/internal/filtering/safesearch/rules/brave.txt b/internal/filtering/safesearch/rules/brave.txt new file mode 100644 index 00000000000..c77879880a3 --- /dev/null +++ b/internal/filtering/safesearch/rules/brave.txt @@ -0,0 +1 @@ +|search.brave.com^$dnsrewrite=NOERROR;CNAME;safesearch.brave.com diff --git a/internal/filtering/safesearch/safesearch.go b/internal/filtering/safesearch/safesearch.go index a92e533a913..4bbdfa62662 100644 --- a/internal/filtering/safesearch/safesearch.go +++ b/internal/filtering/safesearch/safesearch.go @@ -36,6 +36,7 @@ type Service string // Service enum members. const ( Bing Service = "bing" + Brave Service = "brave" DuckDuckGo Service = "duckduckgo" Ecosia Service = "ecosia" Google Service = "google" @@ -61,6 +62,8 @@ func isServiceProtected(s filtering.SafeSearchConfig, service Service) (ok bool) return s.Yandex case YouTube: return s.YouTube + case Brave: + return s.Brave default: panic(fmt.Errorf("safesearch: invalid sources: not found service %q", service)) } diff --git a/internal/filtering/safesearch/safesearch_test.go b/internal/filtering/safesearch/safesearch_test.go index 77eca2f126c..29d8c3e12d1 100644 --- a/internal/filtering/safesearch/safesearch_test.go +++ b/internal/filtering/safesearch/safesearch_test.go @@ -33,6 +33,7 @@ var testConf = filtering.SafeSearchConfig{ Enabled: true, Bing: true, + Brave: true, DuckDuckGo: true, Ecosia: true, Google: true, @@ -220,3 +221,27 @@ func TestDefault_Update(t *testing.T) { assert.False(t, res.IsFiltered) } + +func TestDefault_CheckHost_brave(t *testing.T) { + ctx := testutil.ContextWithTimeout(t, testTimeout) + ss, err := safesearch.NewDefault(ctx, &safesearch.DefaultConfig{ + Logger: slogutil.NewDiscardLogger(), + ServicesConfig: testConf, + CacheSize: testCacheSize, + CacheTTL: testCacheTTL, + }) + require.NoError(t, err) + + host := "search.brave.com" + + t.Run(host, func(t *testing.T) { + var res filtering.Result + res, err = ss.CheckHost(ctx, host, testQType) + require.NoError(t, err) + + assert.True(t, res.IsFiltered) + assert.Equal(t, filtering.FilteredSafeSearch, res.Reason) + assert.Equal(t, "safesearch.brave.com", res.CanonName) + assert.Empty(t, res.Rules) + }) +} diff --git a/internal/home/config.go b/internal/home/config.go index 315a33453b8..4a210843f67 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -432,6 +432,7 @@ var config = &configuration{ SafeSearchConf: filtering.SafeSearchConfig{ Enabled: false, + Brave: true, Bing: true, DuckDuckGo: true, Ecosia: true,