From 6c6f0422903209377198da76daa06c041a362a68 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 14 Feb 2023 11:55:02 +0100 Subject: [PATCH] [bugfix] Return empty result rather than 500 error when searching for blocked domains (#1498) * [bugfix] Return empty result when searching for blocked domains * add tests --- internal/api/client/search/searchget_test.go | 28 ++++++++++++++++++++ internal/processing/search.go | 18 +++++++++++++ 2 files changed, 46 insertions(+) diff --git a/internal/api/client/search/searchget_test.go b/internal/api/client/search/searchget_test.go index f284643e..bc07eb47 100644 --- a/internal/api/client/search/searchget_test.go +++ b/internal/api/client/search/searchget_test.go @@ -252,6 +252,34 @@ func (suite *SearchGetTestSuite) TestSearchStatusByURL() { suite.NotNil(gotStatus) } +func (suite *SearchGetTestSuite) TestSearchBlockedDomainURL() { + query := "https://replyguys.com/@someone" + resolve := true + + searchResult, err := suite.testSearch(query, resolve, http.StatusOK) + if err != nil { + suite.FailNow(err.Error()) + } + + suite.Len(searchResult.Accounts, 0) + suite.Len(searchResult.Statuses, 0) + suite.Len(searchResult.Hashtags, 0) +} + +func (suite *SearchGetTestSuite) TestSearchBlockedDomainNamestring() { + query := "@someone@replyguys.com" + resolve := true + + searchResult, err := suite.testSearch(query, resolve, http.StatusOK) + if err != nil { + suite.FailNow(err.Error()) + } + + suite.Len(searchResult.Accounts, 0) + suite.Len(searchResult.Statuses, 0) + suite.Len(searchResult.Hashtags, 0) +} + func TestSearchGetTestSuite(t *testing.T) { suite.Run(t, &SearchGetTestSuite{}) } diff --git a/internal/processing/search.go b/internal/processing/search.go index 6db938b3..90e361cf 100644 --- a/internal/processing/search.go +++ b/internal/processing/search.go @@ -87,6 +87,15 @@ func (p *processor) SearchGet(ctx context.Context, authed *oauth.Auth, search *a if username, domain, err := util.ExtractNamestringParts(maybeNamestring); err == nil { l.Trace("search term is a mention, looking it up...") + blocked, err := p.db.IsDomainBlocked(ctx, domain) + if err != nil { + return nil, gtserror.NewErrorInternalError(fmt.Errorf("error checking domain block: %w", err)) + } + if blocked { + l.Debug("domain is blocked") + return searchResult, nil + } + foundAccount, err := p.searchAccountByUsernameDomain(ctx, authed, username, domain, search.Resolve) if err != nil { var errNotRetrievable *dereferencing.ErrNotRetrievable @@ -110,6 +119,15 @@ func (p *processor) SearchGet(ctx context.Context, authed *oauth.Auth, search *a if uri, err := url.Parse(query); err == nil { if uri.Scheme == "https" || uri.Scheme == "http" { l.Trace("search term is a uri, looking it up...") + blocked, err := p.db.IsURIBlocked(ctx, uri) + if err != nil { + return nil, gtserror.NewErrorInternalError(fmt.Errorf("error checking domain block: %w", err)) + } + if blocked { + l.Debug("domain is blocked") + return searchResult, nil + } + // check if it's a status... foundStatus, err := p.searchStatusByURI(ctx, authed, uri) if err != nil {