From e31dbb5aeb3cafe7ead980d7741cb1a575fa7e22 Mon Sep 17 00:00:00 2001 From: Ballista01 <87925547+Ballista01@users.noreply.github.com> Date: Mon, 27 Jun 2022 05:27:01 -0400 Subject: [PATCH] handle all JSON marshal errors in model/client4.go (#20440) * handle all JSON marshal errors in model/client4.go * handle a JSON marshal error in model/client4.go at line 4162 * declare jsonErr at L4162 before use * change email *ValidateBusinessEmailRequest to email *StartCloudTrialRequest at L7866 to keep up with updated master branch --- model/client4.go | 119 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 93 insertions(+), 26 deletions(-) diff --git a/model/client4.go b/model/client4.go index 92dced5f8a..5e3f61e910 100644 --- a/model/client4.go +++ b/model/client4.go @@ -4159,10 +4159,14 @@ func (c *Client4) DoPostAction(postId, actionId string) (*Response, error) { func (c *Client4) DoPostActionWithCookie(postId, actionId, selected, cookieStr string) (*Response, error) { var body []byte if selected != "" || cookieStr != "" { - body, _ = json.Marshal(DoPostActionRequest{ + var jsonErr error + body, jsonErr = json.Marshal(DoPostActionRequest{ SelectedOption: selected, Cookie: cookieStr, }) + if jsonErr != nil { + return nil, NewAppError("DoPostActionWithCookie", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } } r, err := c.DoAPIPost(c.postRoute(postId)+"/actions/"+actionId, string(body)) if err != nil { @@ -4212,7 +4216,10 @@ func (c *Client4) GetTopThreadsForUserSince(teamId string, timeRange string, pag // provided data. Used with interactive message buttons, menus and // slash commands. func (c *Client4) OpenInteractiveDialog(request OpenDialogRequest) (*Response, error) { - b, _ := json.Marshal(request) + b, jsonErr := json.Marshal(request) + if jsonErr != nil { + return nil, NewAppError("OpenInteractiveDialog", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPost("/actions/dialogs/open", string(b)) if err != nil { return BuildResponse(r), err @@ -4224,7 +4231,10 @@ func (c *Client4) OpenInteractiveDialog(request OpenDialogRequest) (*Response, e // SubmitInteractiveDialog will submit the provided dialog data to the integration // configured by the URL. Used with the interactive dialogs integration feature. func (c *Client4) SubmitInteractiveDialog(request SubmitDialogRequest) (*SubmitDialogResponse, *Response, error) { - b, _ := json.Marshal(request) + b, jsonErr := json.Marshal(request) + if jsonErr != nil { + return nil, nil, NewAppError("SubmitInteractiveDialog", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPost("/actions/dialogs/submit", string(b)) if err != nil { return nil, BuildResponse(r), err @@ -5135,7 +5145,10 @@ func (c *Client4) ResetSamlAuthDataToEmail(includeDeleted bool, dryRun bool, use "dry_run": dryRun, "user_ids": userIDs, } - b, _ := json.Marshal(params) + b, jsonErr := json.Marshal(params) + if jsonErr != nil { + return 0, nil, NewAppError("ResetSamlAuthDataToEmail", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.samlRoute()+"/reset_auth_data", b) if err != nil { return 0, BuildResponse(r), err @@ -5249,9 +5262,12 @@ func (c *Client4) GetClusterStatus() ([]*ClusterInfo, *Response, error) { // If includeRemovedMembers is true, then group members who left or were removed from a // synced team/channel will be re-joined; otherwise, they will be excluded. func (c *Client4) SyncLdap(includeRemovedMembers bool) (*Response, error) { - reqBody, _ := json.Marshal(map[string]interface{}{ + reqBody, jsonErr := json.Marshal(map[string]interface{}{ "include_removed_members": includeRemovedMembers, }) + if jsonErr != nil { + return nil, NewAppError("SyncLdap", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.ldapRoute()+"/sync", reqBody) if err != nil { return BuildResponse(r), err @@ -5987,7 +6003,10 @@ func (c *Client4) GetTeamsForRetentionPolicy(policyID string, page, perPage int) // SearchTeamsForRetentionPolicy will search the teams to which the specified policy is currently applied. func (c *Client4) SearchTeamsForRetentionPolicy(policyID string, term string) ([]*Team, *Response, error) { - body, _ := json.Marshal(map[string]interface{}{"term": term}) + body, jsonErr := json.Marshal(map[string]interface{}{"term": term}) + if jsonErr != nil { + return nil, nil, NewAppError("SearchTeamsForRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.dataRetentionPolicyRoute(policyID)+"/teams/search", body) if err != nil { return nil, BuildResponse(r), err @@ -6003,7 +6022,10 @@ func (c *Client4) SearchTeamsForRetentionPolicy(policyID string, term string) ([ // AddTeamsToRetentionPolicy will add the specified teams to the granular data retention policy // with the specified ID. func (c *Client4) AddTeamsToRetentionPolicy(policyID string, teamIDs []string) (*Response, error) { - body, _ := json.Marshal(teamIDs) + body, jsonErr := json.Marshal(teamIDs) + if jsonErr != nil { + return nil, NewAppError("AddTeamsToRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.dataRetentionPolicyRoute(policyID)+"/teams", body) if err != nil { return BuildResponse(r), err @@ -6015,7 +6037,10 @@ func (c *Client4) AddTeamsToRetentionPolicy(policyID string, teamIDs []string) ( // RemoveTeamsFromRetentionPolicy will remove the specified teams from the granular data retention policy // with the specified ID. func (c *Client4) RemoveTeamsFromRetentionPolicy(policyID string, teamIDs []string) (*Response, error) { - body, _ := json.Marshal(teamIDs) + body, jsonErr := json.Marshal(teamIDs) + if jsonErr != nil { + return nil, NewAppError("RemoveTeamsFromRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIDeleteBytes(c.dataRetentionPolicyRoute(policyID)+"/teams", body) if err != nil { return BuildResponse(r), err @@ -6041,7 +6066,10 @@ func (c *Client4) GetChannelsForRetentionPolicy(policyID string, page, perPage i // SearchChannelsForRetentionPolicy will search the channels to which the specified policy is currently applied. func (c *Client4) SearchChannelsForRetentionPolicy(policyID string, term string) (ChannelListWithTeamData, *Response, error) { - body, _ := json.Marshal(map[string]interface{}{"term": term}) + body, jsonErr := json.Marshal(map[string]interface{}{"term": term}) + if jsonErr != nil { + return nil, nil, NewAppError("SearchChannelsForRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.dataRetentionPolicyRoute(policyID)+"/channels/search", body) if err != nil { return nil, BuildResponse(r), err @@ -6057,7 +6085,10 @@ func (c *Client4) SearchChannelsForRetentionPolicy(policyID string, term string) // AddChannelsToRetentionPolicy will add the specified channels to the granular data retention policy // with the specified ID. func (c *Client4) AddChannelsToRetentionPolicy(policyID string, channelIDs []string) (*Response, error) { - body, _ := json.Marshal(channelIDs) + body, jsonErr := json.Marshal(channelIDs) + if jsonErr != nil { + return nil, NewAppError("AddChannelsToRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.dataRetentionPolicyRoute(policyID)+"/channels", body) if err != nil { return BuildResponse(r), err @@ -6069,7 +6100,10 @@ func (c *Client4) AddChannelsToRetentionPolicy(policyID string, channelIDs []str // RemoveChannelsFromRetentionPolicy will remove the specified channels from the granular data retention policy // with the specified ID. func (c *Client4) RemoveChannelsFromRetentionPolicy(policyID string, channelIDs []string) (*Response, error) { - body, _ := json.Marshal(channelIDs) + body, jsonErr := json.Marshal(channelIDs) + if jsonErr != nil { + return nil, NewAppError("RemoveChannelsFromRetentionPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIDeleteBytes(c.dataRetentionPolicyRoute(policyID)+"/channels", body) if err != nil { return BuildResponse(r), err @@ -7297,7 +7331,10 @@ func (c *Client4) DeleteGroup(groupID string) (*Group, *Response, error) { } func (c *Client4) PatchGroup(groupID string, patch *GroupPatch) (*Group, *Response, error) { - payload, _ := json.Marshal(patch) + payload, jsonErr := json.Marshal(patch) + if jsonErr != nil { + return nil, nil, NewAppError("PatchGroup", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPut(c.groupRoute(groupID)+"/patch", string(payload)) if err != nil { return nil, BuildResponse(r), err @@ -7345,7 +7382,10 @@ func (c *Client4) DeleteGroupMembers(groupID string, userIds *GroupModifyMembers } func (c *Client4) LinkGroupSyncable(groupID, syncableID string, syncableType GroupSyncableType, patch *GroupSyncablePatch) (*GroupSyncable, *Response, error) { - payload, _ := json.Marshal(patch) + payload, jsonErr := json.Marshal(patch) + if jsonErr != nil { + return nil, nil, NewAppError("LinkGroupSyncable", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } url := fmt.Sprintf("%s/link", c.groupSyncableRoute(groupID, syncableID, syncableType)) r, err := c.DoAPIPost(url, string(payload)) if err != nil { @@ -7396,7 +7436,10 @@ func (c *Client4) GetGroupSyncables(groupID string, syncableType GroupSyncableTy } func (c *Client4) PatchGroupSyncable(groupID, syncableID string, syncableType GroupSyncableType, patch *GroupSyncablePatch) (*GroupSyncable, *Response, error) { - payload, _ := json.Marshal(patch) + payload, jsonErr := json.Marshal(patch) + if jsonErr != nil { + return nil, nil, NewAppError("PatchGroupSyncable", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPut(c.groupSyncableRoute(groupID, syncableID, syncableType)+"/patch", string(payload)) if err != nil { return nil, BuildResponse(r), err @@ -7530,7 +7573,10 @@ func (c *Client4) GetChannelMemberCountsByGroup(channelID string, includeTimezon // RequestTrialLicense will request a trial license and install it in the server func (c *Client4) RequestTrialLicense(users int) (*Response, error) { - b, _ := json.Marshal(map[string]interface{}{"users": users, "terms_accepted": true}) + b, jsonErr := json.Marshal(map[string]interface{}{"users": users, "terms_accepted": true}) + if jsonErr != nil { + return nil, NewAppError("RequestTrialLicense", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPost("/trial-license", string(b)) if err != nil { return BuildResponse(r), err @@ -7569,7 +7615,10 @@ func (c *Client4) GetSidebarCategoriesForTeamForUser(userID, teamID, etag string } func (c *Client4) CreateSidebarCategoryForTeamForUser(userID, teamID string, category *SidebarCategoryWithChannels) (*SidebarCategoryWithChannels, *Response, error) { - payload, _ := json.Marshal(category) + payload, jsonErr := json.Marshal(category) + if jsonErr != nil { + return nil, nil, NewAppError("CreateSidebarCategoryForTeamForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } route := c.userCategoryRoute(userID, teamID) r, err := c.DoAPIPostBytes(route, payload) if err != nil { @@ -7585,7 +7634,10 @@ func (c *Client4) CreateSidebarCategoryForTeamForUser(userID, teamID string, cat } func (c *Client4) UpdateSidebarCategoriesForTeamForUser(userID, teamID string, categories []*SidebarCategoryWithChannels) ([]*SidebarCategoryWithChannels, *Response, error) { - payload, _ := json.Marshal(categories) + payload, jsonErr := json.Marshal(categories) + if jsonErr != nil { + return nil, nil, NewAppError("UpdateSidebarCategoriesForTeamForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } route := c.userCategoryRoute(userID, teamID) r, err := c.DoAPIPutBytes(route, payload) @@ -7614,7 +7666,10 @@ func (c *Client4) GetSidebarCategoryOrderForTeamForUser(userID, teamID, etag str } func (c *Client4) UpdateSidebarCategoryOrderForTeamForUser(userID, teamID string, order []string) ([]string, *Response, error) { - payload, _ := json.Marshal(order) + payload, jsonErr := json.Marshal(order) + if jsonErr != nil { + return nil, nil, NewAppError("UpdateSidebarCategoryOrderForTeamForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } route := c.userCategoryRoute(userID, teamID) + "/order" r, err := c.DoAPIPutBytes(route, payload) if err != nil { @@ -7641,7 +7696,10 @@ func (c *Client4) GetSidebarCategoryForTeamForUser(userID, teamID, categoryID, e } func (c *Client4) UpdateSidebarCategoryForTeamForUser(userID, teamID, categoryID string, category *SidebarCategoryWithChannels) (*SidebarCategoryWithChannels, *Response, error) { - payload, _ := json.Marshal(category) + payload, jsonErr := json.Marshal(category) + if jsonErr != nil { + return nil, nil, NewAppError("UpdateSidebarCategoryForTeamForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } route := c.userCategoryRoute(userID, teamID) + "/" + categoryID r, err := c.DoAPIPutBytes(route, payload) if err != nil { @@ -7827,8 +7885,10 @@ func (c *Client4) CreateCustomerPayment() (*StripeSetupIntent, *Response, error) } func (c *Client4) ConfirmCustomerPayment(confirmRequest *ConfirmPaymentMethodRequest) (*Response, error) { - json, _ := json.Marshal(confirmRequest) - + json, jsonErr := json.Marshal(confirmRequest) + if jsonErr != nil { + return nil, NewAppError("ConfirmCustomerPayment", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPostBytes(c.cloudRoute()+"/payment/confirm", json) if err != nil { return BuildResponse(r), err @@ -7839,7 +7899,10 @@ func (c *Client4) ConfirmCustomerPayment(confirmRequest *ConfirmPaymentMethodReq } func (c *Client4) RequestCloudTrial(email *StartCloudTrialRequest) (*Subscription, *Response, error) { - payload, _ := json.Marshal(email) + payload, jsonErr := json.Marshal(email) + if jsonErr != nil { + return nil, nil, NewAppError("RequestCloudTrial", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPutBytes(c.cloudRoute()+"/request-trial", payload) if err != nil { return nil, BuildResponse(r), err @@ -7903,8 +7966,10 @@ func (c *Client4) GetInvoicesForSubscription() ([]*Invoice, *Response, error) { } func (c *Client4) UpdateCloudCustomer(customerInfo *CloudCustomerInfo) (*CloudCustomer, *Response, error) { - customerBytes, _ := json.Marshal(customerInfo) - + customerBytes, jsonErr := json.Marshal(customerInfo) + if jsonErr != nil { + return nil, nil, NewAppError("UpdateCloudCustomer", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPutBytes(c.cloudRoute()+"/customer", customerBytes) if err != nil { return nil, BuildResponse(r), err @@ -7918,8 +7983,10 @@ func (c *Client4) UpdateCloudCustomer(customerInfo *CloudCustomerInfo) (*CloudCu } func (c *Client4) UpdateCloudCustomerAddress(address *Address) (*CloudCustomer, *Response, error) { - addressBytes, _ := json.Marshal(address) - + addressBytes, jsonErr := json.Marshal(address) + if jsonErr != nil { + return nil, nil, NewAppError("UpdateCloudCustomerAddress", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + } r, err := c.DoAPIPutBytes(c.cloudRoute()+"/customer/address", addressBytes) if err != nil { return nil, BuildResponse(r), err