From 84a0c09d56b52dc830eb3acbe6fd89e47f9ad5e7 Mon Sep 17 00:00:00 2001 From: Caleb Roseland Date: Thu, 12 Sep 2024 10:21:06 -0500 Subject: [PATCH] Content-Type fixes in client4.ts and remote_cluster.go (#27887) Co-authored-by: Mattermost Build Co-authored-by: Miguel de la Cruz --- server/channels/api4/remote_cluster.go | 6 ++++-- server/channels/api4/remote_cluster_test.go | 2 +- server/public/model/client4.go | 13 ++++++++----- webapp/platform/client/src/client4.ts | 6 +++++- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/server/channels/api4/remote_cluster.go b/server/channels/api4/remote_cluster.go index 993ef3139b..f824e7fc3a 100644 --- a/server/channels/api4/remote_cluster.go +++ b/server/channels/api4/remote_cluster.go @@ -539,7 +539,9 @@ func generateRemoteClusterInvite(c *Context, w http.ResponseWriter, r *http.Requ } w.WriteHeader(http.StatusCreated) - w.Write([]byte(inviteCode)) + if err := json.NewEncoder(w).Encode(inviteCode); err != nil { + c.Logger.Warn("Error while writing response", mlog.Err(err)) + } } func getRemoteCluster(c *Context, w http.ResponseWriter, r *http.Request) { @@ -663,5 +665,5 @@ func deleteRemoteCluster(c *Context, w http.ResponseWriter, r *http.Request) { } auditRec.Success() - w.WriteHeader(http.StatusNoContent) + ReturnStatusOK(w) } diff --git a/server/channels/api4/remote_cluster_test.go b/server/channels/api4/remote_cluster_test.go index 7bd5d33bff..5df433e348 100644 --- a/server/channels/api4/remote_cluster_test.go +++ b/server/channels/api4/remote_cluster_test.go @@ -605,7 +605,7 @@ func TestDeleteRemoteCluster(t *testing.T) { require.Zero(t, initialRC.DeleteAt) resp, err := th.SystemAdminClient.DeleteRemoteCluster(context.Background(), rc.RemoteId) - CheckNoContentStatus(t, resp) + CheckOKStatus(t, resp) require.NoError(t, err) deletedRC, appErr := th.App.GetRemoteCluster(rc.RemoteId) diff --git a/server/public/model/client4.go b/server/public/model/client4.go index 38f9c908f9..76cbb4cbfc 100644 --- a/server/public/model/client4.go +++ b/server/public/model/client4.go @@ -8848,11 +8848,12 @@ func (c *Client4) GenerateRemoteClusterInvite(ctx context.Context, remoteCluster } defer closeBody(r) - b, err := io.ReadAll(r.Body) - if err != nil { - return "", nil, NewAppError("GenerateRemoteClusterInvite", "api.read_error", nil, "", http.StatusInternalServerError).Wrap(err) + var inviteCode string + if err := json.NewDecoder(r.Body).Decode(&inviteCode); err != nil { + return "", nil, NewAppError("GenerateRemoteClusterInvite", "api.unmarshall_error", nil, "", http.StatusInternalServerError).Wrap(err) } - return string(b), BuildResponse(r), nil + + return inviteCode, BuildResponse(r), nil } func (c *Client4) GetRemoteCluster(ctx context.Context, remoteClusterId string) (*RemoteCluster, *Response, error) { @@ -8863,7 +8864,9 @@ func (c *Client4) GetRemoteCluster(ctx context.Context, remoteClusterId string) defer closeBody(r) var rc *RemoteCluster - json.NewDecoder(r.Body).Decode(&rc) + if err := json.NewDecoder(r.Body).Decode(&rc); err != nil { + return nil, nil, NewAppError("GetRemoteCluster", "api.unmarshall_error", nil, "", http.StatusInternalServerError).Wrap(err) + } return rc, BuildResponse(r), nil } diff --git a/webapp/platform/client/src/client4.ts b/webapp/platform/client/src/client4.ts index 70bdfe96a3..4025622d45 100644 --- a/webapp/platform/client/src/client4.ts +++ b/webapp/platform/client/src/client4.ts @@ -4179,7 +4179,11 @@ export default class Client4 { let data; try { - data = await response.json(); + if (headers.get('Content-Type') === 'application/json') { + data = await response.json(); + } else { + data = await response.text(); + } } catch (err) { throw new ClientError(this.getUrl(), { message: 'Received invalid response from the server.',