diff --git a/api4/bot.go b/api4/bot.go index 4688965411..01fbf4be52 100644 --- a/api4/bot.go +++ b/api4/bot.go @@ -13,6 +13,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitBot() { @@ -74,7 +75,9 @@ func createBot(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("bot", createdBot) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write(createdBot.ToJson()) + if err := json.NewEncoder(w).Encode(createdBot); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchBot(c *Context, w http.ResponseWriter, r *http.Request) { @@ -109,7 +112,9 @@ func patchBot(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() auditRec.AddMeta("bot", updatedBot) - w.Write(updatedBot.ToJson()) + if err := json.NewEncoder(w).Encode(updatedBot); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getBot(c *Context, w http.ResponseWriter, r *http.Request) { @@ -148,7 +153,9 @@ func getBot(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write(bot.ToJson()) + if err := json.NewEncoder(w).Encode(bot); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getBots(c *Context, w http.ResponseWriter, r *http.Request) { @@ -183,7 +190,9 @@ func getBots(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write(bots.ToJson()) + if err := json.NewEncoder(w).Encode(bots); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func disableBot(c *Context, w http.ResponseWriter, _ *http.Request) { @@ -220,7 +229,9 @@ func updateBotActive(c *Context, w http.ResponseWriter, active bool) { auditRec.Success() auditRec.AddMeta("bot", bot) - w.Write(bot.ToJson()) + if err := json.NewEncoder(w).Encode(bot); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func assignBot(c *Context, w http.ResponseWriter, _ *http.Request) { @@ -258,7 +269,9 @@ func assignBot(c *Context, w http.ResponseWriter, _ *http.Request) { auditRec.Success() auditRec.AddMeta("bot", bot) - w.Write(bot.ToJson()) + if err := json.NewEncoder(w).Encode(bot); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getBotIconImage(c *Context, w http.ResponseWriter, r *http.Request) { @@ -423,5 +436,7 @@ func convertBotToUser(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() auditRec.AddMeta("convertedTo", user) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/channel.go b/api4/channel.go index 2340e4be39..cfefcc8c2c 100644 --- a/api4/channel.go +++ b/api4/channel.go @@ -111,7 +111,9 @@ func createChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("name=" + channel.Name) w.WriteHeader(http.StatusCreated) - w.Write([]byte(sc.ToJson())) + if err := json.NewEncoder(w).Encode(sc); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -221,7 +223,9 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("name=" + channel.Name) - w.Write([]byte(oldChannel.ToJson())) + if err := json.NewEncoder(w).Encode(oldChannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func convertChannelToPrivate(c *Context, w http.ResponseWriter, r *http.Request) { @@ -273,7 +277,9 @@ func convertChannelToPrivate(c *Context, w http.ResponseWriter, r *http.Request) auditRec.Success() c.LogAudit("name=" + rchannel.Name) - w.Write([]byte(rchannel.ToJson())) + if err := json.NewEncoder(w).Encode(rchannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Request) { @@ -333,7 +339,9 @@ func updateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("name=" + updatedChannel.Name) - w.Write([]byte(updatedChannel.ToJson())) + if err := json.NewEncoder(w).Encode(updatedChannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -400,7 +408,9 @@ func patchChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("") auditRec.AddMeta("patch", rchannel) - w.Write([]byte(rchannel.ToJson())) + if err := json.NewEncoder(w).Encode(rchannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func restoreChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -434,7 +444,9 @@ func restoreChannel(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("name=" + channel.Name) - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func createDirectChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -497,7 +509,9 @@ func createDirectChannel(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("channel", sc) w.WriteHeader(http.StatusCreated) - w.Write([]byte(sc.ToJson())) + if err := json.NewEncoder(w).Encode(sc); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchGroupChannels(c *Context, w http.ResponseWriter, r *http.Request) { @@ -514,7 +528,9 @@ func searchGroupChannels(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(groupChannels.ToJson())) + if err := json.NewEncoder(w).Encode(groupChannels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func createGroupChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -577,7 +593,9 @@ func createGroupChannel(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("channel", groupChannel) w.WriteHeader(http.StatusCreated) - w.Write([]byte(groupChannel.ToJson())) + if err := json.NewEncoder(w).Encode(groupChannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -610,7 +628,9 @@ func getChannel(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelUnread(c *Context, w http.ResponseWriter, r *http.Request) { @@ -635,7 +655,9 @@ func getChannelUnread(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(channelUnread.ToJson())) + if err := json.NewEncoder(w).Encode(channelUnread); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelStats(c *Context, w http.ResponseWriter, r *http.Request) { @@ -667,8 +689,15 @@ func getChannelStats(c *Context, w http.ResponseWriter, r *http.Request) { return } - stats := model.ChannelStats{ChannelId: c.Params.ChannelId, MemberCount: memberCount, GuestCount: guestCount, PinnedPostCount: pinnedPostCount} - w.Write([]byte(stats.ToJson())) + stats := model.ChannelStats{ + ChannelId: c.Params.ChannelId, + MemberCount: memberCount, + GuestCount: guestCount, + PinnedPostCount: pinnedPostCount, + } + if err := json.NewEncoder(w).Encode(stats); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPinnedPosts(c *Context, w http.ResponseWriter, r *http.Request) { @@ -695,7 +724,9 @@ func getPinnedPosts(c *Context, w http.ResponseWriter, r *http.Request) { clientPostList := c.App.PreparePostListForClient(posts) w.Header().Set(model.HeaderEtagServer, clientPostList.Etag()) - w.Write([]byte(clientPostList.ToJson())) + if err := json.NewEncoder(w).Encode(clientPostList); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) { @@ -729,7 +760,6 @@ func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) { return } - var payload []byte if c.Params.IncludeTotalCount { totalCount, err := c.App.GetAllChannelsCount(opts) if err != nil { @@ -740,12 +770,15 @@ func getAllChannels(c *Context, w http.ResponseWriter, r *http.Request) { Channels: channels, TotalCount: totalCount, } - payload = cwc.ToJson() - } else { - payload = []byte(channels.ToJson()) + if err := json.NewEncoder(w).Encode(cwc); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } + return } - w.Write(payload) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPublicChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -771,7 +804,9 @@ func getPublicChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getDeletedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -792,7 +827,9 @@ func getDeletedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Reques return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPrivateChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -818,7 +855,9 @@ func getPrivateChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Reques return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPublicChannelsByIdsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -857,7 +896,9 @@ func getPublicChannelsByIdsForTeam(c *Context, w http.ResponseWriter, r *http.Re return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelsForTeamForUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -903,7 +944,9 @@ func getChannelsForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques } w.Header().Set(model.HeaderEtagServer, channels.Etag()) - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func autocompleteChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -927,7 +970,9 @@ func autocompleteChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Requ // Don't fill in channels props, since unused by client and potentially expensive. - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func autocompleteChannelsForTeamForSearch(c *Context, w http.ResponseWriter, r *http.Request) { @@ -944,7 +989,9 @@ func autocompleteChannelsForTeamForSearch(c *Context, w http.ResponseWriter, r * return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -981,7 +1028,9 @@ func searchChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { // Don't fill in channels props, since unused by client and potentially expensive. - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchArchivedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1018,7 +1067,9 @@ func searchArchivedChannelsForTeam(c *Context, w http.ResponseWriter, r *http.Re // Don't fill in channels props, since unused by client and potentially expensive. - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchAllChannels(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1066,15 +1117,18 @@ func searchAllChannels(c *Context, w http.ResponseWriter, r *http.Request) { } // Don't fill in channels props, since unused by client and potentially expensive. - var payload []byte if props.Page != nil && props.PerPage != nil { data := model.ChannelsWithCount{Channels: channels, TotalCount: totalCount} - payload = data.ToJson() - } else { - payload = []byte(channels.ToJson()) + + if err := json.NewEncoder(w).Encode(data); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } + return } - w.Write(payload) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1159,7 +1213,9 @@ func getChannelByName(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelByNameForTeamName(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1194,7 +1250,9 @@ func getChannelByNameForTeamName(c *Context, w http.ResponseWriter, r *http.Requ return } - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelMembers(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1214,7 +1272,9 @@ func getChannelMembers(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(members.ToJson())) + if err := json.NewEncoder(w).Encode(members); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelMembersTimezones(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1260,7 +1320,9 @@ func getChannelMembersByIds(c *Context, w http.ResponseWriter, r *http.Request) return } - w.Write([]byte(members.ToJson())) + if err := json.NewEncoder(w).Encode(members); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1280,7 +1342,9 @@ func getChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(member.ToJson())) + if err := json.NewEncoder(w).Encode(member); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getChannelMembersForUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1305,7 +1369,9 @@ func getChannelMembersForUser(c *Context, w http.ResponseWriter, r *http.Request return } - w.Write([]byte(members.ToJson())) + if err := json.NewEncoder(w).Encode(members); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func viewChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1351,7 +1417,9 @@ func viewChannel(c *Context, w http.ResponseWriter, r *http.Request) { LastViewedAtTimes: times, } - w.Write([]byte(resp.ToJson())) + if err := json.NewEncoder(w).Encode(resp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateChannelMemberRoles(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1578,7 +1646,9 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("name=" + channel.Name + " user_id=" + cm.UserId) w.WriteHeader(http.StatusCreated) - w.Write([]byte(cm.ToJson())) + if err := json.NewEncoder(w).Encode(cm); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1944,5 +2014,7 @@ func moveChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("channel=" + channel.Name) c.LogAudit("team=" + team.Name) - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/channel_local.go b/api4/channel_local.go index 0eccd5c97c..4430070f7b 100644 --- a/api4/channel_local.go +++ b/api4/channel_local.go @@ -10,6 +10,7 @@ import ( "github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitChannelLocal() { @@ -59,7 +60,9 @@ func localCreateChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("name=" + channel.Name) w.WriteHeader(http.StatusCreated) - w.Write([]byte(sc.ToJson())) + if err := json.NewEncoder(w).Encode(sc); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localUpdateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Request) { @@ -101,7 +104,9 @@ func localUpdateChannelPrivacy(c *Context, w http.ResponseWriter, r *http.Reques auditRec.Success() c.LogAudit("name=" + updatedChannel.Name) - w.Write([]byte(updatedChannel.ToJson())) + if err := json.NewEncoder(w).Encode(updatedChannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localRestoreChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -129,7 +134,9 @@ func localRestoreChannel(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("name=" + channel.Name) - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localAddChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { @@ -212,7 +219,9 @@ func localAddChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("name=" + channel.Name + " user_id=" + cm.UserId) w.WriteHeader(http.StatusCreated) - w.Write([]byte(cm.ToJson())) + if err := json.NewEncoder(w).Encode(cm); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localRemoveChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { @@ -300,7 +309,9 @@ func localPatchChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("") auditRec.AddMeta("patch", rchannel) - w.Write([]byte(rchannel.ToJson())) + if err := json.NewEncoder(w).Encode(rchannel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localMoveChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -370,7 +381,9 @@ func localMoveChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("channel=" + channel.Name) c.LogAudit("team=" + team.Name) - w.Write([]byte(channel.ToJson())) + if err := json.NewEncoder(w).Encode(channel); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localDeleteChannel(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/command.go b/api4/command.go index 78837fc58a..1e0a1a9801 100644 --- a/api4/command.go +++ b/api4/command.go @@ -4,12 +4,14 @@ package api4 import ( + "encoding/json" "net/http" "strconv" "strings" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitCommand() { @@ -56,7 +58,9 @@ func createCommand(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("command", rcmd) w.WriteHeader(http.StatusCreated) - w.Write([]byte(rcmd.ToJson())) + if err := json.NewEncoder(w).Encode(rcmd); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) { @@ -111,7 +115,9 @@ func updateCommand(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(rcmd.ToJson())) + if err := json.NewEncoder(w).Encode(rcmd); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func moveCommand(c *Context, w http.ResponseWriter, r *http.Request) { @@ -284,7 +290,9 @@ func getCommand(c *Context, w http.ResponseWriter, r *http.Request) { c.SetCommandNotFoundError() return } - w.Write([]byte(cmd.ToJson())) + if err := json.NewEncoder(w).Encode(cmd); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) { @@ -344,7 +352,9 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) { } auditRec.Success() - w.Write([]byte(response.ToJson())) + if err := json.NewEncoder(w).Encode(response); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func listAutocompleteCommands(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/command_local.go b/api4/command_local.go index 5e2ae5d3f0..f3b991aad1 100644 --- a/api4/command_local.go +++ b/api4/command_local.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitCommandLocal() { @@ -42,5 +44,7 @@ func localCreateCommand(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("command", rcmd) w.WriteHeader(http.StatusCreated) - w.Write([]byte(rcmd.ToJson())) + if err := json.NewEncoder(w).Encode(rcmd); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/command_test.go b/api4/command_test.go index 886ac110ed..ea18c3ba1a 100644 --- a/api4/command_test.go +++ b/api4/command_test.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "net/http" "net/http/httptest" "net/url" @@ -14,6 +15,7 @@ import ( "github.com/stretchr/testify/require" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func TestCreateCommand(t *testing.T) { @@ -621,7 +623,9 @@ func TestExecuteInvalidCommand(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { rc := &model.CommandResponse{} - w.Write([]byte(rc.ToJson())) + if err := json.NewEncoder(w).Encode(rc); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -699,7 +703,9 @@ func TestExecuteGetCommand(t *testing.T) { require.Equal(t, "ourCommand", values.Get("cmd")) w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -757,7 +763,9 @@ func TestExecutePostCommand(t *testing.T) { require.Equal(t, th.BasicTeam.Name, r.FormValue("team_domain")) w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -809,7 +817,9 @@ func TestExecuteCommandAgainstChannelOnAnotherTeam(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -858,7 +868,9 @@ func TestExecuteCommandAgainstChannelUserIsNotIn(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -915,7 +927,9 @@ func TestExecuteCommandInDirectMessageChannel(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { require.Equal(t, http.MethodPost, r.Method) w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() @@ -977,7 +991,9 @@ func TestExecuteCommandInTeamUserIsNotOn(t *testing.T) { require.Equal(t, team2.Name, r.FormValue("team_domain")) w.Header().Set("Content-Type", "application/json") - w.Write([]byte(expectedCommandResponse.ToJson())) + if err := json.NewEncoder(w).Encode(expectedCommandResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } })) defer ts.Close() diff --git a/api4/compliance.go b/api4/compliance.go index 8aaa74c9b7..2ca8bac8b0 100644 --- a/api4/compliance.go +++ b/api4/compliance.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "net/http" "strconv" @@ -11,6 +12,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitCompliance() { @@ -49,7 +51,9 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) c.LogAudit("") w.WriteHeader(http.StatusCreated) - w.Write([]byte(rjob.ToJson())) + if err := json.NewEncoder(w).Encode(rjob); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getComplianceReports(c *Context, w http.ResponseWriter, r *http.Request) { @@ -68,7 +72,9 @@ func getComplianceReports(c *Context, w http.ResponseWriter, r *http.Request) { } auditRec.Success() - w.Write([]byte(crs.ToJson())) + if err := json.NewEncoder(w).Encode(crs); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) { @@ -95,7 +101,9 @@ func getComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("compliance_id", job.Id) auditRec.AddMeta("compliance_desc", job.Desc) - w.Write([]byte(job.ToJson())) + if err := json.NewEncoder(w).Encode(job); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func downloadComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/config.go b/api4/config.go index ed17d48f62..6e97b23dd6 100644 --- a/api4/config.go +++ b/api4/config.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "fmt" "net/http" "reflect" @@ -69,8 +70,10 @@ func getConfig(c *Context, w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") if c.App.Srv().License() != nil && *c.App.Srv().License().Features.Cloud { w.Write([]byte(cfg.ToJsonFiltered(model.ConfigAccessTagType, model.ConfigAccessTagCloudRestrictable))) - } else { - w.Write([]byte(cfg.ToJson())) + return + } + if err := json.NewEncoder(w).Encode(cfg); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) } } @@ -173,8 +176,11 @@ func updateConfig(c *Context, w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") if c.App.Srv().License() != nil && *c.App.Srv().License().Features.Cloud { w.Write([]byte(cfg.ToJsonFiltered(model.ConfigAccessTagType, model.ConfigAccessTagCloudRestrictable))) - } else { - w.Write([]byte(cfg.ToJson())) + return + } + + if err := json.NewEncoder(w).Encode(cfg); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) } } @@ -291,8 +297,11 @@ func patchConfig(c *Context, w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") if c.App.Srv().License() != nil && *c.App.Srv().License().Features.Cloud { w.Write([]byte(cfg.ToJsonFiltered(model.ConfigAccessTagType, model.ConfigAccessTagCloudRestrictable))) - } else { - w.Write([]byte(cfg.ToJson())) + return + } + + if err := json.NewEncoder(w).Encode(cfg); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) } } diff --git a/api4/config_local.go b/api4/config_local.go index 1d4de69718..c807a1f315 100644 --- a/api4/config_local.go +++ b/api4/config_local.go @@ -4,12 +4,14 @@ package api4 import ( + "encoding/json" "net/http" "reflect" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/config" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/utils" ) @@ -26,7 +28,9 @@ func localGetConfig(c *Context, w http.ResponseWriter, r *http.Request) { cfg := c.App.GetSanitizedConfig() auditRec.Success() w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Write([]byte(cfg.ToJson())) + if err := json.NewEncoder(w).Encode(cfg); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localUpdateConfig(c *Context, w http.ResponseWriter, r *http.Request) { @@ -76,7 +80,9 @@ func localUpdateConfig(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("updateConfig") w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Write([]byte(newCfg.ToJson())) + if err := json.NewEncoder(w).Encode(newCfg); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localPatchConfig(c *Context, w http.ResponseWriter, r *http.Request) { @@ -129,5 +135,7 @@ func localPatchConfig(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Write([]byte(c.App.GetSanitizedConfig().ToJson())) + if err := json.NewEncoder(w).Encode(c.App.GetSanitizedConfig()); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/emoji.go b/api4/emoji.go index 58ca61813d..fc3734f09c 100644 --- a/api4/emoji.go +++ b/api4/emoji.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "io" "io/ioutil" "net/http" @@ -12,6 +13,7 @@ import ( "github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/web" ) @@ -96,7 +98,9 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { } auditRec.Success() - w.Write([]byte(newEmoji.ToJson())) + if err := json.NewEncoder(w).Encode(newEmoji); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) { @@ -204,7 +208,9 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(emoji.ToJson())) + if err := json.NewEncoder(w).Encode(emoji); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getEmojiByName(c *Context, w http.ResponseWriter, r *http.Request) { @@ -219,7 +225,9 @@ func getEmojiByName(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(emoji.ToJson())) + if err := json.NewEncoder(w).Encode(emoji); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getEmojiImage(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/file.go b/api4/file.go index c06a8e2836..98140d168e 100644 --- a/api4/file.go +++ b/api4/file.go @@ -6,6 +6,7 @@ package api4 import ( "bytes" "crypto/subtle" + "encoding/json" "io" "mime" "mime/multipart" @@ -18,6 +19,7 @@ import ( "github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/utils" ) @@ -146,7 +148,9 @@ func uploadFileStream(c *Context, w http.ResponseWriter, r *http.Request) { // Write the response values to the output upon return w.WriteHeader(http.StatusCreated) - w.Write([]byte(fileUploadResponse.ToJson())) + if err := json.NewEncoder(w).Encode(fileUploadResponse); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } // uploadFileSimple uploads a file from a simple POST with the file in the request body @@ -626,7 +630,9 @@ func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) { } w.Header().Set("Cache-Control", "max-age=2592000, private") - w.Write([]byte(info.ToJson())) + if err := json.NewEncoder(w).Encode(info); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPublicFile(c *Context, w http.ResponseWriter, r *http.Request) { @@ -793,5 +799,7 @@ func searchFiles(c *Context, w http.ResponseWriter, r *http.Request) { } w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Write([]byte(results.ToJson())) + if err := json.NewEncoder(w).Encode(results); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/job.go b/api4/job.go index b457c0589e..700e839f5e 100644 --- a/api4/job.go +++ b/api4/job.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "net/http" "path/filepath" "strconv" @@ -45,7 +46,9 @@ func getJob(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(job.ToJson())) + if err := json.NewEncoder(w).Encode(job); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func downloadJob(c *Context, w http.ResponseWriter, r *http.Request) { @@ -132,7 +135,9 @@ func createJob(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("job", job) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write([]byte(job.ToJson())) + if err := json.NewEncoder(w).Encode(job); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getJobs(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/license.go b/api4/license.go index 8d11668472..7efd0e6f5e 100644 --- a/api4/license.go +++ b/api4/license.go @@ -11,6 +11,7 @@ import ( "io/ioutil" "net/http" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/utils" "github.com/mattermost/mattermost-server/v6/audit" @@ -134,7 +135,9 @@ func addLicense(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(license.ToJson())) + if err := json.NewEncoder(w).Encode(license); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func removeLicense(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/license_local.go b/api4/license_local.go index dc143b240f..bf7b21c3c8 100644 --- a/api4/license_local.go +++ b/api4/license_local.go @@ -5,11 +5,13 @@ package api4 import ( "bytes" + "encoding/json" "io" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitLicenseLocal() { @@ -70,7 +72,9 @@ func localAddLicense(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(license.ToJson())) + if err := json.NewEncoder(w).Encode(license); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localRemoveLicense(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/oauth.go b/api4/oauth.go index 2dcfb8f19f..281deaed99 100644 --- a/api4/oauth.go +++ b/api4/oauth.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitOAuth() { @@ -55,7 +57,9 @@ func createOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("client_id=" + rapp.Id) w.WriteHeader(http.StatusCreated) - w.Write([]byte(rapp.ToJson())) + if err := json.NewEncoder(w).Encode(rapp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { @@ -112,7 +116,9 @@ func updateOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("update", updatedOAuthApp) c.LogAudit("success") - w.Write([]byte(updatedOAuthApp.ToJson())) + if err := json.NewEncoder(w).Encode(updatedOAuthApp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getOAuthApps(c *Context, w http.ResponseWriter, r *http.Request) { @@ -162,7 +168,9 @@ func getOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(oauthApp.ToJson())) + if err := json.NewEncoder(w).Encode(oauthApp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getOAuthAppInfo(c *Context, w http.ResponseWriter, r *http.Request) { @@ -178,7 +186,9 @@ func getOAuthAppInfo(c *Context, w http.ResponseWriter, r *http.Request) { } oauthApp.Sanitize() - w.Write([]byte(oauthApp.ToJson())) + if err := json.NewEncoder(w).Encode(oauthApp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { @@ -257,7 +267,9 @@ func regenerateOAuthAppSecret(c *Context, w http.ResponseWriter, r *http.Request auditRec.Success() c.LogAudit("success") - w.Write([]byte(oauthApp.ToJson())) + if err := json.NewEncoder(w).Encode(oauthApp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getAuthorizedOAuthApps(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/plugin.go b/api4/plugin.go index d21313b09f..9653756639 100644 --- a/api4/plugin.go +++ b/api4/plugin.go @@ -162,7 +162,9 @@ func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request auditRec.AddMeta("plugin_desc", manifest.Description) w.WriteHeader(http.StatusCreated) - w.Write([]byte(manifest.ToJson())) + if err := json.NewEncoder(w).Encode(manifest); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPlugins(c *Context, w http.ResponseWriter, r *http.Request) { @@ -182,7 +184,9 @@ func getPlugins(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(response.ToJson())) + if err := json.NewEncoder(w).Encode(response); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPluginStatuses(c *Context, w http.ResponseWriter, r *http.Request) { @@ -202,7 +206,9 @@ func getPluginStatuses(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(response.ToJson())) + if err := json.NewEncoder(w).Encode(response); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func removePlugin(c *Context, w http.ResponseWriter, r *http.Request) { @@ -386,7 +392,9 @@ func installPlugin(c *Context, w http.ResponseWriter, plugin io.ReadSeeker, forc return } w.WriteHeader(http.StatusCreated) - w.Write([]byte(manifest.ToJson())) + if err := json.NewEncoder(w).Encode(manifest); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func setFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *http.Request) { @@ -444,5 +452,7 @@ func getFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h } auditRec.Success() - w.Write([]byte(firstAdminVisitMarketplaceObj.ToJson())) + if err := json.NewEncoder(w).Encode(firstAdminVisitMarketplaceObj); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/post.go b/api4/post.go index 686e5f6e86..cf70752a7d 100644 --- a/api4/post.go +++ b/api4/post.go @@ -96,7 +96,9 @@ func createPost(c *Context, w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusCreated) // Note that rp has already had PreparePostForClient called on it by App.CreatePost - w.Write([]byte(rp.ToJson())) + if err := json.NewEncoder(w).Encode(rp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) { @@ -126,7 +128,9 @@ func createEphemeralPost(c *Context, w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusCreated) rp = model.AddPostActionCookies(rp, c.App.PostActionCookieSecret()) rp = c.App.PreparePostForClient(rp, true, false) - w.Write([]byte(rp.ToJson())) + if err := json.NewEncoder(w).Encode(rp); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPostsForChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -213,7 +217,9 @@ func getPostsForChannel(c *Context, w http.ResponseWriter, r *http.Request) { c.App.AddCursorIdsForPostList(list, afterPost, beforePost, since, page, perPage, collapsedThreads) clientPostList := c.App.PreparePostListForClient(list) - w.Write([]byte(clientPostList.ToJson())) + if err := json.NewEncoder(w).Encode(clientPostList); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPostsForChannelAroundLastUnread(c *Context, w http.ResponseWriter, r *http.Request) { @@ -272,7 +278,9 @@ func getPostsForChannelAroundLastUnread(c *Context, w http.ResponseWriter, r *ht if etag != "" { w.Header().Set(model.HeaderEtagServer, etag) } - w.Write([]byte(clientPostList.ToJson())) + if err := json.NewEncoder(w).Encode(clientPostList); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getFlaggedPostsForUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -329,7 +337,9 @@ func getFlaggedPostsForUser(c *Context, w http.ResponseWriter, r *http.Request) } pl.SortByCreateAt() - w.Write([]byte(c.App.PreparePostListForClient(pl).ToJson())) + if err := json.NewEncoder(w).Encode(c.App.PreparePostListForClient(pl)); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPost(c *Context, w http.ResponseWriter, r *http.Request) { @@ -369,7 +379,9 @@ func getPost(c *Context, w http.ResponseWriter, r *http.Request) { } w.Header().Set(model.HeaderEtagServer, post.Etag()) - w.Write([]byte(post.ToJson())) + if err := json.NewEncoder(w).Encode(post); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deletePost(c *Context, w http.ResponseWriter, _ *http.Request) { @@ -456,7 +468,9 @@ func getPostThread(c *Context, w http.ResponseWriter, r *http.Request) { w.Header().Set(model.HeaderEtagServer, clientPostList.Etag()) - w.Write([]byte(clientPostList.ToJson())) + if err := json.NewEncoder(w).Encode(clientPostList); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) { @@ -528,7 +542,9 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) { results = model.MakePostSearchResults(clientPostList, results.Matches) w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Write([]byte(results.ToJson())) + if err := json.NewEncoder(w).Encode(results); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updatePost(c *Context, w http.ResponseWriter, r *http.Request) { @@ -586,7 +602,9 @@ func updatePost(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() auditRec.AddMeta("update", rpost) - w.Write([]byte(rpost.ToJson())) + if err := json.NewEncoder(w).Encode(rpost); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchPost(c *Context, w http.ResponseWriter, r *http.Request) { @@ -636,7 +654,9 @@ func patchPost(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() auditRec.AddMeta("patch", patchedPost) - w.Write([]byte(patchedPost.ToJson())) + if err := json.NewEncoder(w).Encode(patchedPost); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) { @@ -662,7 +682,9 @@ func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) { c.Err = err return } - w.Write([]byte(state.ToJson())) + if err := json.NewEncoder(w).Encode(state); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func saveIsPinnedPost(c *Context, w http.ResponseWriter, isPinned bool) { diff --git a/api4/preference.go b/api4/preference.go index 9dc75a9b36..b321afec8a 100644 --- a/api4/preference.go +++ b/api4/preference.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitPreference() { @@ -35,7 +37,9 @@ func getPreferences(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(preferences.ToJson())) + if err := json.NewEncoder(w).Encode(preferences); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request) { @@ -55,7 +59,9 @@ func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request return } - w.Write([]byte(preferences.ToJson())) + if err := json.NewEncoder(w).Encode(preferences); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.Request) { @@ -75,7 +81,9 @@ func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.R return } - w.Write([]byte(preferences.ToJson())) + if err := json.NewEncoder(w).Encode(preferences); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/reaction.go b/api4/reaction.go index 0c751ce528..f6114b842b 100644 --- a/api4/reaction.go +++ b/api4/reaction.go @@ -4,9 +4,11 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitReaction() { @@ -44,7 +46,9 @@ func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(reaction.ToJson())) + if err := json.NewEncoder(w).Encode(reaction); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getReactions(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/remote_cluster.go b/api4/remote_cluster.go index 86ea8d7fc9..cd160cb5bc 100644 --- a/api4/remote_cluster.go +++ b/api4/remote_cluster.go @@ -13,6 +13,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/services/remotecluster" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitRemoteCluster() { @@ -213,7 +214,9 @@ func uploadRemoteData(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(info.ToJson())) + if err := json.NewEncoder(w).Encode(info); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func remoteSetProfileImage(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/role.go b/api4/role.go index d6bff0066b..5fdd031317 100644 --- a/api4/role.go +++ b/api4/role.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) var notAllowedPermissions = []string{ @@ -35,7 +37,9 @@ func getRole(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(role.ToJson())) + if err := json.NewEncoder(w).Encode(role); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getRoleByName(c *Context, w http.ResponseWriter, r *http.Request) { @@ -50,7 +54,9 @@ func getRoleByName(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(role.ToJson())) + if err := json.NewEncoder(w).Encode(role); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getRolesByNames(c *Context, w http.ResponseWriter, r *http.Request) { @@ -167,5 +173,7 @@ func patchRole(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("patch", role) c.LogAudit("") - w.Write([]byte(role.ToJson())) + if err := json.NewEncoder(w).Encode(role); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/saml.go b/api4/saml.go index 21b81a002e..f945c32e79 100644 --- a/api4/saml.go +++ b/api4/saml.go @@ -12,6 +12,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitSaml() { @@ -230,7 +231,9 @@ func getSamlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request } status := c.App.GetSamlCertificateStatus() - w.Write([]byte(status.ToJson())) + if err := json.NewEncoder(w).Encode(status); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request) { @@ -252,7 +255,9 @@ func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request) return } - w.Write([]byte(metadata.ToJson())) + if err := json.NewEncoder(w).Encode(metadata); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func resetAuthDataToEmail(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/scheme.go b/api4/scheme.go index 1813b1b574..191407e168 100644 --- a/api4/scheme.go +++ b/api4/scheme.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitScheme() { @@ -51,7 +53,9 @@ func createScheme(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("scheme", scheme) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write([]byte(scheme.ToJson())) + if err := json.NewEncoder(w).Encode(scheme); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getScheme(c *Context, w http.ResponseWriter, r *http.Request) { @@ -71,7 +75,9 @@ func getScheme(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(scheme.ToJson())) + if err := json.NewEncoder(w).Encode(scheme); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getSchemes(c *Context, w http.ResponseWriter, r *http.Request) { @@ -154,7 +160,9 @@ func getChannelsForScheme(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(channels.ToJson())) + if err := json.NewEncoder(w).Encode(channels); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) { @@ -199,7 +207,9 @@ func patchScheme(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("") - w.Write([]byte(scheme.ToJson())) + if err := json.NewEncoder(w).Encode(scheme); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteScheme(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/status.go b/api4/status.go index 8ae5765964..df4cc86281 100644 --- a/api4/status.go +++ b/api4/status.go @@ -4,9 +4,11 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitStatus() { @@ -41,7 +43,9 @@ func getUserStatus(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(statusMap[0].ToJson())) + if err := json.NewEncoder(w).Encode(statusMap[0]); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUserStatusesByIds(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/system.go b/api4/system.go index 96957dd445..4ae5765595 100644 --- a/api4/system.go +++ b/api4/system.go @@ -260,7 +260,9 @@ func getAudits(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("page", c.Params.Page) auditRec.AddMeta("audits_per_page", c.Params.LogsPerPage) - w.Write([]byte(audits.ToJson())) + if err := json.NewEncoder(w).Encode(audits); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func databaseRecycle(c *Context, w http.ResponseWriter, r *http.Request) { @@ -397,7 +399,9 @@ func getAnalytics(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(rows.ToJson())) + if err := json.NewEncoder(w).Encode(rows); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getSupportedTimezones(c *Context, w http.ResponseWriter, r *http.Request) { @@ -539,7 +543,9 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(msg.ToJson())) + if err2 := json.NewEncoder(w).Encode(msg); err2 != nil { + mlog.Warn("Error while writing response", mlog.Err(err2)) + } return } else if err != nil { @@ -600,7 +606,12 @@ func getServerBusyExpires(c *Context, w http.ResponseWriter, r *http.Request) { c.SetPermissionError(model.PermissionManageSystem) return } - w.Write([]byte(c.App.Srv().Busy.ToJson())) + + // We call to ToJson because it actually returns a different struct + // along with doing some computations. + if _, err := w.Write([]byte(c.App.Srv().Busy.ToJson())); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func upgradeToEnterprise(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/team.go b/api4/team.go index 559bda9fef..aa7cf31ad0 100644 --- a/api4/team.go +++ b/api4/team.go @@ -17,6 +17,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) const ( @@ -105,7 +106,9 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("team", team) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write([]byte(rteam.ToJson())) + if err := json.NewEncoder(w).Encode(rteam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -126,7 +129,9 @@ func getTeam(c *Context, w http.ResponseWriter, r *http.Request) { } c.App.SanitizeTeam(*c.AppContext.Session(), team) - w.Write([]byte(team.ToJson())) + if err := json.NewEncoder(w).Encode(team); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getTeamByName(c *Context, w http.ResponseWriter, r *http.Request) { @@ -147,7 +152,9 @@ func getTeamByName(c *Context, w http.ResponseWriter, r *http.Request) { } c.App.SanitizeTeam(*c.AppContext.Session(), team) - w.Write([]byte(team.ToJson())) + if err := json.NewEncoder(w).Encode(team); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -189,7 +196,9 @@ func updateTeam(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("update", updatedTeam) c.App.SanitizeTeam(*c.AppContext.Session(), updatedTeam) - w.Write([]byte(updatedTeam.ToJson())) + if err := json.NewEncoder(w).Encode(updatedTeam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -230,7 +239,9 @@ func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("patched", patchedTeam) c.LogAudit("") - w.Write([]byte(patchedTeam.ToJson())) + if err := json.NewEncoder(w).Encode(patchedTeam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func restoreTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -264,7 +275,9 @@ func restoreTeam(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("team", team) auditRec.Success() - w.Write([]byte(team.ToJson())) + if err := json.NewEncoder(w).Encode(team); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateTeamPrivacy(c *Context, w http.ResponseWriter, r *http.Request) { @@ -316,7 +329,9 @@ func updateTeamPrivacy(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("team", team) auditRec.Success() - w.Write([]byte(team.ToJson())) + if err := json.NewEncoder(w).Encode(team); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func regenerateTeamInviteId(c *Context, w http.ResponseWriter, r *http.Request) { @@ -345,7 +360,9 @@ func regenerateTeamInviteId(c *Context, w http.ResponseWriter, r *http.Request) auditRec.AddMeta("team", patchedTeam) c.LogAudit("") - w.Write([]byte(patchedTeam.ToJson())) + if err := json.NewEncoder(w).Encode(patchedTeam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteTeam(c *Context, w http.ResponseWriter, r *http.Request) { @@ -459,7 +476,9 @@ func getTeamMember(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(team.ToJson())) + if err := json.NewEncoder(w).Encode(team); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getTeamMembers(c *Context, w http.ResponseWriter, r *http.Request) { @@ -644,7 +663,9 @@ func addTeamMember(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() w.WriteHeader(http.StatusCreated) - w.Write([]byte(member.ToJson())) + if err := json.NewEncoder(w).Encode(member); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func addUserToTeamFromInvite(c *Context, w http.ResponseWriter, r *http.Request) { @@ -682,7 +703,9 @@ func addUserToTeamFromInvite(c *Context, w http.ResponseWriter, r *http.Request) } w.WriteHeader(http.StatusCreated) - w.Write([]byte(member.ToJson())) + if err := json.NewEncoder(w).Encode(member); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func addTeamMembers(c *Context, w http.ResponseWriter, r *http.Request) { @@ -854,7 +877,9 @@ func getTeamUnread(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(unreadTeam.ToJson())) + if err := json.NewEncoder(w).Encode(unreadTeam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getTeamStats(c *Context, w http.ResponseWriter, r *http.Request) { @@ -880,7 +905,9 @@ func getTeamStats(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(stats.ToJson())) + if err := json.NewEncoder(w).Encode(stats); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateTeamMemberRoles(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/team_local.go b/api4/team_local.go index 3c30e75dd3..a86ec196b8 100644 --- a/api4/team_local.go +++ b/api4/team_local.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "fmt" "net/http" "strings" @@ -13,6 +14,7 @@ import ( "github.com/mattermost/mattermost-server/v6/app/email" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/store" ) @@ -220,5 +222,7 @@ func localCreateTeam(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("team", team) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write([]byte(rteam.ToJson())) + if err := json.NewEncoder(w).Encode(rteam); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } diff --git a/api4/terms_of_service.go b/api4/terms_of_service.go index 7e739bc0e5..5e39648578 100644 --- a/api4/terms_of_service.go +++ b/api4/terms_of_service.go @@ -4,11 +4,13 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitTermsOfService() { @@ -23,7 +25,9 @@ func getLatestTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) return } - w.Write([]byte(termsOfService.ToJson())) + if err := json.NewEncoder(w).Encode(termsOfService); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func createTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) { @@ -62,9 +66,13 @@ func createTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(termsOfService.ToJson())) + if err := json.NewEncoder(w).Encode(termsOfService); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } else { - w.Write([]byte(oldTermsOfService.ToJson())) + if err := json.NewEncoder(w).Encode(oldTermsOfService); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } auditRec.Success() } diff --git a/api4/upload.go b/api4/upload.go index 59aa9df669..2797f51417 100644 --- a/api4/upload.go +++ b/api4/upload.go @@ -4,6 +4,7 @@ package api4 import ( + "encoding/json" "errors" "io" "mime/multipart" @@ -11,6 +12,7 @@ import ( "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitUpload() { @@ -66,7 +68,9 @@ func createUpload(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() w.WriteHeader(http.StatusCreated) - w.Write([]byte(us.ToJson())) + if err := json.NewEncoder(w).Encode(us); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUpload(c *Context, w http.ResponseWriter, r *http.Request) { @@ -86,7 +90,9 @@ func getUpload(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(us.ToJson())) + if err := json.NewEncoder(w).Encode(us); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func uploadData(c *Context, w http.ResponseWriter, r *http.Request) { @@ -136,7 +142,9 @@ func uploadData(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(info.ToJson())) + if err := json.NewEncoder(w).Encode(info); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func doUploadData(c *Context, us *model.UploadSession, r *http.Request) (*model.FileInfo, *model.AppError) { diff --git a/api4/user.go b/api4/user.go index ada60ce39e..06753d602d 100644 --- a/api4/user.go +++ b/api4/user.go @@ -176,7 +176,9 @@ func createUser(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("user", ruser) // overwrite meta w.WriteHeader(http.StatusCreated) - w.Write([]byte(ruser.ToJson())) + if err := json.NewEncoder(w).Encode(ruser); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -228,7 +230,9 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) { } c.App.UpdateLastActivityAtIfNeeded(*c.AppContext.Session()) w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) { @@ -288,7 +292,9 @@ func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) { c.App.SanitizeProfile(user, c.IsSystemAdmin()) } w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) { @@ -337,7 +343,9 @@ func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) { c.App.SanitizeProfile(user, c.IsSystemAdmin()) w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getDefaultProfileImage(c *Context, w http.ResponseWriter, r *http.Request) { @@ -546,7 +554,9 @@ func getTotalUsersStats(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(stats.ToJson())) + if err := json.NewEncoder(w).Encode(stats); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getFilteredUsersStats(c *Context, w http.ResponseWriter, r *http.Request) { @@ -608,7 +618,9 @@ func getFilteredUsersStats(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(stats.ToJson())) + if err := json.NewEncoder(w).Encode(stats); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getUsersByGroupChannelIds(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1069,7 +1081,9 @@ func autocompleteUsers(c *Context, w http.ResponseWriter, r *http.Request) { autocomplete.Users = result } - w.Write([]byte((autocomplete.ToJson()))) + if err := json.NewEncoder(w).Encode(autocomplete); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1147,7 +1161,9 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("update", ruser) c.LogAudit("") - w.Write([]byte(ruser.ToJson())) + if err := json.NewEncoder(w).Encode(ruser); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func patchUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1224,7 +1240,9 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("patch", ruser) c.LogAudit("") - w.Write([]byte(ruser.ToJson())) + if err := json.NewEncoder(w).Encode(ruser); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1458,7 +1476,9 @@ func updateUserAuth(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("auth_service", user.AuthService) c.LogAudit(fmt.Sprintf("updated user %s auth to service=%v", c.Params.UserId, user.AuthService)) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } // Deprecated: checkUserMfa is deprecated and should not be used anymore, starting with version 6.0 it will be disabled. @@ -1575,7 +1595,9 @@ func generateMfaSecret(c *Context, w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Pragma", "no-cache") w.Header().Set("Expires", "0") - w.Write([]byte(secret.ToJson())) + if err := json.NewEncoder(w).Encode(secret); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updatePassword(c *Context, w http.ResponseWriter, r *http.Request) { @@ -1841,7 +1863,9 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) { user.Sanitize(map[string]bool{}) auditRec.Success() - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2105,7 +2129,9 @@ func getUserAudits(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("page", c.Params.Page) auditRec.AddMeta("audits_per_page", c.Params.LogsPerPage) - w.Write([]byte(audits.ToJson())) + if err := json.NewEncoder(w).Encode(audits); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func verifyUserEmail(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2265,7 +2291,9 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddMeta("token_id", accessToken.Id) c.LogAudit("success - token_id=" + accessToken.Id) - w.Write([]byte(accessToken.ToJson())) + if err := json.NewEncoder(w).Encode(accessToken); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func searchUserAccessTokens(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2355,7 +2383,9 @@ func getUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(accessToken.ToJson())) + if err := json.NewEncoder(w).Encode(accessToken); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func revokeUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2539,7 +2569,9 @@ func getUserTermsOfService(c *Context, w http.ResponseWriter, r *http.Request) { c.Err = err return } - w.Write([]byte(result.ToJson())) + if err := json.NewEncoder(w).Encode(result); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func promoteGuestToUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2687,7 +2719,9 @@ func verifyUserEmailWithoutToken(c *Context, w http.ResponseWriter, r *http.Requ auditRec.Success() c.LogAudit("user verified") - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func convertUserToBot(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2885,7 +2919,9 @@ func getThreadForUser(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(thread.ToJson())) + if err := json.NewEncoder(w).Encode(thread); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getThreadsForUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2950,7 +2986,9 @@ func getThreadsForUser(c *Context, w http.ResponseWriter, r *http.Request) { return } - w.Write([]byte(threads.ToJson())) + if err := json.NewEncoder(w).Encode(threads); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateReadStateThreadByUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -2976,7 +3014,9 @@ func updateReadStateThreadByUser(c *Context, w http.ResponseWriter, r *http.Requ return } - w.Write([]byte(thread.ToJson())) + if err := json.NewEncoder(w).Encode(thread); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } auditRec.Success() } diff --git a/api4/user_local.go b/api4/user_local.go index 3c2a5de14b..65e26b6350 100644 --- a/api4/user_local.go +++ b/api4/user_local.go @@ -4,11 +4,13 @@ package api4 import ( + "encoding/json" "net/http" "strconv" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/store" ) @@ -209,7 +211,9 @@ func localGetUser(c *Context, w http.ResponseWriter, r *http.Request) { c.App.SanitizeProfile(user, c.IsSystemAdmin()) w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localDeleteUser(c *Context, w http.ResponseWriter, r *http.Request) { @@ -288,7 +292,9 @@ func localGetUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) c.App.SanitizeProfile(user, c.IsSystemAdmin()) w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localGetUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) { @@ -317,7 +323,9 @@ func localGetUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) { c.App.SanitizeProfile(user, c.IsSystemAdmin()) w.Header().Set(model.HeaderEtagServer, etag) - w.Write([]byte(user.ToJson())) + if err := json.NewEncoder(w).Encode(user); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localGetUploadsForUser(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/webhook.go b/api4/webhook.go index a0e32cb3e6..9cd2f8282c 100644 --- a/api4/webhook.go +++ b/api4/webhook.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitWebhook() { @@ -81,7 +83,9 @@ func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("success") w.WriteHeader(http.StatusCreated) - w.Write([]byte(incomingHook.ToJson())) + if err := json.NewEncoder(w).Encode(incomingHook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func updateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { @@ -163,7 +167,9 @@ func updateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("success") w.WriteHeader(http.StatusCreated) - w.Write([]byte(incomingHook.ToJson())) + if err := json.NewEncoder(w).Encode(incomingHook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getIncomingHooks(c *Context, w http.ResponseWriter, r *http.Request) { @@ -255,7 +261,9 @@ func getIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(hook.ToJson())) + if err := json.NewEncoder(w).Encode(hook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) { @@ -375,7 +383,9 @@ func updateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(rhook.ToJson())) + if err := json.NewEncoder(w).Encode(rhook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { @@ -425,7 +435,9 @@ func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { c.LogAudit("success") w.WriteHeader(http.StatusCreated) - w.Write([]byte(rhook.ToJson())) + if err := json.NewEncoder(w).Encode(rhook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func getOutgoingHooks(c *Context, w http.ResponseWriter, r *http.Request) { @@ -516,7 +528,9 @@ func getOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.Success() c.LogAudit("success") - w.Write([]byte(hook.ToJson())) + if err := json.NewEncoder(w).Encode(hook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request) { @@ -559,7 +573,9 @@ func regenOutgoingHookToken(c *Context, w http.ResponseWriter, r *http.Request) auditRec.Success() c.LogAudit("success") - w.Write([]byte(rhook.ToJson())) + if err := json.NewEncoder(w).Encode(rhook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func deleteOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/api4/webhook_local.go b/api4/webhook_local.go index 302344ca37..b2448ee26f 100644 --- a/api4/webhook_local.go +++ b/api4/webhook_local.go @@ -4,10 +4,12 @@ package api4 import ( + "encoding/json" "net/http" "github.com/mattermost/mattermost-server/v6/audit" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/shared/mlog" ) func (api *API) InitWebhookLocal() { @@ -63,7 +65,9 @@ func localCreateIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) c.LogAudit("success") w.WriteHeader(http.StatusCreated) - w.Write([]byte(incomingHook.ToJson())) + if err := json.NewEncoder(w).Encode(incomingHook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } } func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) { @@ -103,5 +107,7 @@ func localCreateOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) c.LogAudit("success") w.WriteHeader(http.StatusCreated) - w.Write([]byte(rhook.ToJson())) + if err := json.NewEncoder(w).Encode(rhook); err != nil { + mlog.Warn("Error while writing response", mlog.Err(err)) + } }