gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 6c6f0422903209377198da76daa06c041a362a68
parent 561ad71e58189d1daea28ec50cc9d4bac82dcfec
Author: tobi <31960611+tsmethurst@users.noreply.github.com>
Date:   Tue, 14 Feb 2023 11:55:02 +0100

[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
Diffstat:
Minternal/api/client/search/searchget_test.go | 28++++++++++++++++++++++++++++
Minternal/processing/search.go | 18++++++++++++++++++
2 files changed, 46 insertions(+), 0 deletions(-)

diff --git 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 @@ -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 {