From f135e6c1bf51c7c13b1f15c43daa930ee806db63 Mon Sep 17 00:00:00 2001 From: Mario de Frutos Dieguez Date: Sun, 24 May 2020 10:50:07 +0200 Subject: [PATCH] [MM-24453] Sanitize user term search (#14494) * Sanitize user term search Remove the @ at the beginning of the search term in order to make it possible for ES to return results --- store/searchlayer/user_layer.go | 9 ++++++--- store/searchlayer/utils.go | 10 ++++++++++ store/searchtest/user_layer.go | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 store/searchlayer/utils.go diff --git a/store/searchlayer/user_layer.go b/store/searchlayer/user_layer.go index 32c07c7777..f1afbc9199 100644 --- a/store/searchlayer/user_layer.go +++ b/store/searchlayer/user_layer.go @@ -45,7 +45,9 @@ func (s *SearchUserStore) Search(teamId, term string, options *model.UserSearchO return []*model.User{}, nil } - usersIds, err := engine.SearchUsersInTeam(teamId, listOfAllowedChannels, term, options) + sanitizedTerm := sanitizeSearchTerm(term) + + usersIds, err := engine.SearchUsersInTeam(teamId, listOfAllowedChannels, sanitizedTerm, options) if err != nil { mlog.Error("Encountered error on Search", mlog.String("search_engine", engine.GetName()), mlog.Err(err)) continue @@ -101,10 +103,11 @@ func (s *SearchUserStore) autocompleteUsersInChannelByEngine(engine searchengine var err *model.AppError uchanIds := []string{} nuchanIds := []string{} + sanitizedTerm := sanitizeSearchTerm(term) if options.ListOfAllowedChannels != nil && !strings.Contains(strings.Join(options.ListOfAllowedChannels, "."), channelId) { - nuchanIds, err = engine.SearchUsersInTeam(teamId, options.ListOfAllowedChannels, term, options) + nuchanIds, err = engine.SearchUsersInTeam(teamId, options.ListOfAllowedChannels, sanitizedTerm, options) } else { - uchanIds, nuchanIds, err = engine.SearchUsersInChannel(teamId, channelId, options.ListOfAllowedChannels, term, options) + uchanIds, nuchanIds, err = engine.SearchUsersInChannel(teamId, channelId, options.ListOfAllowedChannels, sanitizedTerm, options) } if err != nil { return nil, err diff --git a/store/searchlayer/utils.go b/store/searchlayer/utils.go new file mode 100644 index 0000000000..176c4ed43e --- /dev/null +++ b/store/searchlayer/utils.go @@ -0,0 +1,10 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package searchlayer + +import "strings" + +func sanitizeSearchTerm(term string) string { + return strings.TrimLeft(term, "@") +} diff --git a/store/searchtest/user_layer.go b/store/searchtest/user_layer.go index 512048968b..7972fcd9ae 100644 --- a/store/searchtest/user_layer.go +++ b/store/searchtest/user_layer.go @@ -104,7 +104,7 @@ var searchUserStoreTests = []searchTest{ { Name: "Should ignore leading @ when searching users", Fn: testShouldIgnoreLeadingAtSymbols, - Tags: []string{ENGINE_MYSQL, ENGINE_POSTGRES}, + Tags: []string{ENGINE_ALL}, }, { Name: "Should search users in a case insensitive manner",