diff options
Diffstat (limited to 'web/params.go')
-rw-r--r-- | web/params.go | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/web/params.go b/web/params.go new file mode 100644 index 000000000..286c3f44f --- /dev/null +++ b/web/params.go @@ -0,0 +1,197 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package web + +import ( + "net/http" + "strconv" + "strings" + + "github.com/gorilla/mux" +) + +const ( + PAGE_DEFAULT = 0 + PER_PAGE_DEFAULT = 60 + PER_PAGE_MAXIMUM = 200 + LOGS_PER_PAGE_DEFAULT = 10000 + LOGS_PER_PAGE_MAXIMUM = 10000 +) + +type Params struct { + UserId string + TeamId string + InviteId string + TokenId string + ChannelId string + PostId string + FileId string + Filename string + PluginId string + CommandId string + HookId string + ReportId string + EmojiId string + AppId string + Email string + Username string + TeamName string + ChannelName string + PreferenceName string + EmojiName string + Category string + Service string + JobId string + JobType string + ActionId string + RoleId string + RoleName string + Page int + PerPage int + LogsPerPage int + Permanent bool +} + +func ParamsFromRequest(r *http.Request) *Params { + params := &Params{} + + props := mux.Vars(r) + query := r.URL.Query() + + if val, ok := props["user_id"]; ok { + params.UserId = val + } + + if val, ok := props["team_id"]; ok { + params.TeamId = val + } + + if val, ok := props["invite_id"]; ok { + params.InviteId = val + } + + if val, ok := props["token_id"]; ok { + params.TokenId = val + } + + if val, ok := props["channel_id"]; ok { + params.ChannelId = val + } else { + params.ChannelId = query.Get("channel_id") + } + + if val, ok := props["post_id"]; ok { + params.PostId = val + } + + if val, ok := props["file_id"]; ok { + params.FileId = val + } + + params.Filename = query.Get("filename") + + if val, ok := props["plugin_id"]; ok { + params.PluginId = val + } + + if val, ok := props["command_id"]; ok { + params.CommandId = val + } + + if val, ok := props["hook_id"]; ok { + params.HookId = val + } + + if val, ok := props["report_id"]; ok { + params.ReportId = val + } + + if val, ok := props["emoji_id"]; ok { + params.EmojiId = val + } + + if val, ok := props["app_id"]; ok { + params.AppId = val + } + + if val, ok := props["email"]; ok { + params.Email = val + } + + if val, ok := props["username"]; ok { + params.Username = val + } + + if val, ok := props["team_name"]; ok { + params.TeamName = strings.ToLower(val) + } + + if val, ok := props["channel_name"]; ok { + params.ChannelName = strings.ToLower(val) + } + + if val, ok := props["category"]; ok { + params.Category = val + } + + if val, ok := props["service"]; ok { + params.Service = val + } + + if val, ok := props["preference_name"]; ok { + params.PreferenceName = val + } + + if val, ok := props["emoji_name"]; ok { + params.EmojiName = val + } + + if val, ok := props["job_id"]; ok { + params.JobId = val + } + + if val, ok := props["job_type"]; ok { + params.JobType = val + } + + if val, ok := props["action_id"]; ok { + params.ActionId = val + } + + if val, ok := props["role_id"]; ok { + params.RoleId = val + } + + if val, ok := props["role_name"]; ok { + params.RoleName = val + } + + if val, err := strconv.Atoi(query.Get("page")); err != nil || val < 0 { + params.Page = PAGE_DEFAULT + } else { + params.Page = val + } + + if val, err := strconv.ParseBool(query.Get("permanent")); err != nil { + params.Permanent = val + } + + if val, err := strconv.Atoi(query.Get("per_page")); err != nil || val < 0 { + params.PerPage = PER_PAGE_DEFAULT + } else if val > PER_PAGE_MAXIMUM { + params.PerPage = PER_PAGE_MAXIMUM + } else { + params.PerPage = val + } + + if val, err := strconv.Atoi(query.Get("logs_per_page")); err != nil || val < 0 { + params.LogsPerPage = LOGS_PER_PAGE_DEFAULT + } else if val > LOGS_PER_PAGE_MAXIMUM { + params.LogsPerPage = LOGS_PER_PAGE_MAXIMUM + } else { + params.LogsPerPage = val + } + + return params +} |