MM-22051: Remove ToJson methods from network writes (#17999)
We replace the double conversion of []byte to string, with a direct write to http.ResponseWriter. https://mattermost.atlassian.net/browse/MM-22051 Tried using gofmt -r, but it only accepts Go expressions. So had to resort to an ugly sed replace sed -E -i 's/w.Write\(\[\]byte\((.*).ToJson\(\)\)\)/if err := json.NewEncoder\(w\).Encode\(\1\); err != nil { mlog.Warn\("Error while writing response", mlog.Err\(err\)\)}/g' *.go ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
ae7119ddf5
Коммит
23800326a0
156
api4/channel.go
156
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))
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user