[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
This commit is contained in:
parent
561ad71e58
commit
6c6f042290
|
@ -252,6 +252,34 @@ func (suite *SearchGetTestSuite) TestSearchStatusByURL() {
|
||||||
suite.NotNil(gotStatus)
|
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) {
|
func TestSearchGetTestSuite(t *testing.T) {
|
||||||
suite.Run(t, &SearchGetTestSuite{})
|
suite.Run(t, &SearchGetTestSuite{})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
if username, domain, err := util.ExtractNamestringParts(maybeNamestring); err == nil {
|
||||||
l.Trace("search term is a mention, looking it up...")
|
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)
|
foundAccount, err := p.searchAccountByUsernameDomain(ctx, authed, username, domain, search.Resolve)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var errNotRetrievable *dereferencing.ErrNotRetrievable
|
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, err := url.Parse(query); err == nil {
|
||||||
if uri.Scheme == "https" || uri.Scheme == "http" {
|
if uri.Scheme == "https" || uri.Scheme == "http" {
|
||||||
l.Trace("search term is a uri, looking it up...")
|
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...
|
// check if it's a status...
|
||||||
foundStatus, err := p.searchStatusByURI(ctx, authed, uri)
|
foundStatus, err := p.searchStatusByURI(ctx, authed, uri)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue