summaryrefslogtreecommitdiffstats
path: root/model/user_search.go
diff options
context:
space:
mode:
authorJesse Hallam <jesse.hallam@gmail.com>2018-10-17 11:24:12 -0400
committerHarrison Healey <harrisonmhealey@gmail.com>2018-10-17 11:24:12 -0400
commit715097cc76510a3d78ba83e8544ee7c956ed26e9 (patch)
tree0b6d41e88bf75ad34c585d9db80f04cf8d780338 /model/user_search.go
parente8c9ccaa7e47f1cba3d2b126f6ebbb092fa43235 (diff)
downloadchat-715097cc76510a3d78ba83e8544ee7c956ed26e9.tar.gz
chat-715097cc76510a3d78ba83e8544ee7c956ed26e9.tar.bz2
chat-715097cc76510a3d78ba83e8544ee7c956ed26e9.zip
MM-12234: configurable limit to user autocomplete and search matches (#9499)
* unit test cleanup * allow limiting user search results * clean up test users before starting * model UserSearchOptions to simplify parameters
Diffstat (limited to 'model/user_search.go')
-rw-r--r--model/user_search.go29
1 files changed, 27 insertions, 2 deletions
diff --git a/model/user_search.go b/model/user_search.go
index 94596bdcd..68749fbe5 100644
--- a/model/user_search.go
+++ b/model/user_search.go
@@ -8,6 +8,10 @@ import (
"io"
)
+const USER_SEARCH_MAX_LIMIT = 1000
+const USER_SEARCH_DEFAULT_LIMIT = 100
+
+// UserSearch captures the parameters provided by a client for initiating a user search.
type UserSearch struct {
Term string `json:"term"`
TeamId string `json:"team_id"`
@@ -16,17 +20,38 @@ type UserSearch struct {
NotInChannelId string `json:"not_in_channel_id"`
AllowInactive bool `json:"allow_inactive"`
WithoutTeam bool `json:"without_team"`
+ Limit int `json:"limit"`
}
// ToJson convert a User to a json string
-func (u *UserSearch) ToJson() string {
+func (u *UserSearch) ToJson() []byte {
b, _ := json.Marshal(u)
- return string(b)
+ return b
}
// UserSearchFromJson will decode the input and return a User
func UserSearchFromJson(data io.Reader) *UserSearch {
var us *UserSearch
json.NewDecoder(data).Decode(&us)
+
+ if us.Limit == 0 {
+ us.Limit = USER_SEARCH_DEFAULT_LIMIT
+ }
+
return us
}
+
+// UserSearchOptions captures internal parameters derived from the user's permissions and a
+// UserSearch request.
+type UserSearchOptions struct {
+ // IsAdmin tracks whether or not the search is being conducted by an administrator.
+ IsAdmin bool
+ // AllowEmails allows search to examine the emails of users.
+ AllowEmails bool
+ // AllowFullNames allows search to examine the full names of users, vs. just usernames and nicknames.
+ AllowFullNames bool
+ // AllowInactive configures whether or not to return inactive users in the search results.
+ AllowInactive bool
+ // Limit limits the total number of results returned.
+ Limit int
+}