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
44
api4/post.go
44
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) {
|
||||
|
||||
Ссылка в новой задаче
Block a user