From 8348acac49198422d4762abf6d8dab29ffa21a4a Mon Sep 17 00:00:00 2001 From: Ben Schumacher Date: Mon, 22 Apr 2024 12:03:28 +0200 Subject: [PATCH] [MM-57826] Make sure the original errors are wrapped when AppErrors are returned (#26771) Co-authored-by: Ibrahim Serdar Acikgoz --- server/channels/api4/channel.go | 2 +- server/channels/api4/channel_category.go | 2 +- server/channels/api4/channel_local.go | 2 +- server/channels/api4/cloud.go | 28 +++++++------- server/channels/api4/config.go | 6 +-- server/channels/api4/config_local.go | 6 +-- server/channels/api4/data_retention.go | 6 +-- server/channels/api4/emoji.go | 2 +- server/channels/api4/hosted_customer.go | 2 +- server/channels/api4/image.go | 4 +- server/channels/api4/ip_filtering.go | 12 +++--- server/channels/api4/ldap.go | 4 +- server/channels/api4/license.go | 10 ++--- server/channels/api4/license_local.go | 2 +- .../api4/outgoing_oauth_connection.go | 38 +++++++++---------- server/channels/api4/plugin.go | 8 ++-- server/channels/api4/plugin_local.go | 2 +- server/channels/api4/remote_cluster.go | 2 +- server/channels/api4/saml.go | 8 ++-- server/channels/api4/system.go | 22 +++++------ server/channels/api4/team.go | 14 +++---- server/channels/api4/user.go | 10 ++--- server/channels/api4/websocket.go | 2 +- server/channels/app/cloud.go | 10 ++--- server/channels/app/desktop_login.go | 6 +-- server/channels/app/draft.go | 16 ++++---- server/channels/app/file.go | 14 +++---- server/channels/app/file_helper.go | 6 +-- server/channels/app/group.go | 4 +- server/channels/app/login.go | 2 +- server/channels/app/notify_admin.go | 6 +-- server/channels/app/post.go | 4 +- server/channels/app/status.go | 2 +- 33 files changed, 132 insertions(+), 132 deletions(-) diff --git a/server/channels/api4/channel.go b/server/channels/api4/channel.go index 3086117330..0eb4a4c09d 100644 --- a/server/channels/api4/channel.go +++ b/server/channels/api4/channel.go @@ -1822,7 +1822,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { if v, ok := err.(*model.AppError); ok { c.Err = v } else { - c.Err = model.NewAppError("addChannelMember", "api.channel.add_members.error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addChannelMember", "api.channel.add_members.error", nil, "", http.StatusBadRequest).Wrap(err) } return } diff --git a/server/channels/api4/channel_category.go b/server/channels/api4/channel_category.go index 99f4e79f9a..56b17de398 100644 --- a/server/channels/api4/channel_category.go +++ b/server/channels/api4/channel_category.go @@ -236,7 +236,7 @@ func validateSidebarCategories(c *Context, teamId, userId string, categories []* LastDeleteAt: 0, }) if err != nil { - return model.NewAppError("validateSidebarCategory", "api.invalid_channel", nil, err.Error(), http.StatusBadRequest) + return model.NewAppError("validateSidebarCategory", "api.invalid_channel", nil, "", http.StatusBadRequest).Wrap(err) } for _, category := range categories { diff --git a/server/channels/api4/channel_local.go b/server/channels/api4/channel_local.go index dd0e1c1feb..5d0a96f389 100644 --- a/server/channels/api4/channel_local.go +++ b/server/channels/api4/channel_local.go @@ -206,7 +206,7 @@ func localAddChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { if v, ok := err.(*model.AppError); ok { c.Err = v } else { - c.Err = model.NewAppError("localAddChannelMember", "api.channel.add_members.error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("localAddChannelMember", "api.channel.add_members.error", nil, "", http.StatusBadRequest).Wrap(err) } return } diff --git a/server/channels/api4/cloud.go b/server/channels/api4/cloud.go index c9cc84d743..d37915173b 100644 --- a/server/channels/api4/cloud.go +++ b/server/channels/api4/cloud.go @@ -90,7 +90,7 @@ func getSubscription(c *Context, w http.ResponseWriter, r *http.Request) { subscription, err := c.App.Cloud().GetSubscription(c.AppContext.Session().UserId) if err != nil { - c.Err = model.NewAppError("Api4.getSubscription", "api.cloud.request_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.getSubscription", "api.cloud.request_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -324,7 +324,7 @@ func validateWorkspaceBusinessEmail(c *Context, w http.ResponseWriter, r *http.R // get the cloud customer email to validate if is a valid business email cloudCustomer, err := c.App.Cloud().GetCloudCustomer(user.Id) if err != nil { - c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, "", http.StatusBadRequest).Wrap(err) return } emailErr := c.App.Cloud().ValidateBusinessEmail(user.Id, cloudCustomer.Email) @@ -334,7 +334,7 @@ func validateWorkspaceBusinessEmail(c *Context, w http.ResponseWriter, r *http.R // grab the current admin email and validate it errValidatingAdminEmail := c.App.Cloud().ValidateBusinessEmail(user.Id, user.Email) if errValidatingAdminEmail != nil { - c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, errValidatingAdminEmail.Error(), http.StatusForbidden) + c.Err = model.NewAppError("Api4.validateWorkspaceBusinessEmail", "api.cloud.request_error", nil, "", http.StatusForbidden).Wrap(errValidatingAdminEmail) emailResp := model.ValidateBusinessEmailResponse{IsValid: false} if err := json.NewEncoder(w).Encode(emailResp); err != nil { c.Logger.Warn("Error while writing response", mlog.Err(err)) @@ -767,7 +767,7 @@ func getSubscriptionInvoicePDF(c *Context, w http.ResponseWriter, r *http.Reques pdfData, filename, appErr := c.App.Cloud().GetInvoicePDF(c.AppContext.Session().UserId, c.Params.InvoiceId) if appErr != nil { - c.Err = model.NewAppError("Api4.getSubscriptionInvoicePDF", "api.cloud.request_error", nil, appErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.getSubscriptionInvoicePDF", "api.cloud.request_error", nil, "", http.StatusInternalServerError).Wrap(appErr) return } @@ -797,14 +797,14 @@ func handleCWSWebhook(c *Context, w http.ResponseWriter, r *http.Request) { bodyBytes, err := io.ReadAll(r.Body) if err != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } defer r.Body.Close() var event *model.CWSWebhookPayload if err = json.Unmarshal(bodyBytes, &event); err != nil || event == nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -826,14 +826,14 @@ func handleCWSWebhook(c *Context, w http.ResponseWriter, r *http.Request) { if event.Subscription != nil && event.CloudWorkspaceOwner != nil { user, appErr := c.App.GetUserByUsername(event.CloudWorkspaceOwner.UserName) if appErr != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, appErr.Error(), appErr.StatusCode) + c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, "", appErr.StatusCode).Wrap(appErr) return } // Get the current cloud product to determine whether it's a monthly or yearly product product, err := c.App.Cloud().GetCloudProduct(user.Id, event.Subscription.ProductID) if err != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.request_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.request_error", nil, "", http.StatusInternalServerError).Wrap(err) return } isYearly = product.IsYearly() @@ -846,13 +846,13 @@ func handleCWSWebhook(c *Context, w http.ResponseWriter, r *http.Request) { case model.EventTypeSendAdminWelcomeEmail: user, appErr := c.App.GetUserByUsername(event.CloudWorkspaceOwner.UserName) if appErr != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, appErr.Error(), appErr.StatusCode) + c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, "", appErr.StatusCode).Wrap(appErr) return } teams, appErr := c.App.GetAllTeams() if appErr != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, appErr.Error(), appErr.StatusCode) + c.Err = model.NewAppError("Api4.handleCWSWebhook", appErr.Id, nil, "", appErr.StatusCode).Wrap(appErr) return } @@ -860,12 +860,12 @@ func handleCWSWebhook(c *Context, w http.ResponseWriter, r *http.Request) { subscription, err := c.App.Cloud().GetSubscription(user.Id) if err != nil { - c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.request_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.handleCWSWebhook", "api.cloud.request_error", nil, "", http.StatusInternalServerError).Wrap(err) return } if err := c.App.Srv().EmailService.SendCloudWelcomeEmail(user.Email, user.Locale, team.InviteId, subscription.GetWorkSpaceNameFromDNS(), subscription.DNS, *c.App.Config().ServiceSettings.SiteURL); err != nil { - c.Err = model.NewAppError("SendCloudWelcomeEmail", "api.user.send_cloud_welcome_email.error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("SendCloudWelcomeEmail", "api.user.send_cloud_welcome_email.error", nil, "", http.StatusInternalServerError).Wrap(err) return } case model.EventTypeTriggerDelinquencyEmail: @@ -911,7 +911,7 @@ func selfServeDeleteWorkspace(c *Context, w http.ResponseWriter, r *http.Request bodyBytes, err := io.ReadAll(r.Body) if err != nil { - c.Err = model.NewAppError("Api4.selfServeDeleteWorkspace", "api.cloud.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("Api4.selfServeDeleteWorkspace", "api.cloud.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } defer r.Body.Close() @@ -923,7 +923,7 @@ func selfServeDeleteWorkspace(c *Context, w http.ResponseWriter, r *http.Request var deleteRequest *model.WorkspaceDeletionRequest if err = json.Unmarshal(bodyBytes, &deleteRequest); err != nil || deleteRequest == nil { - c.Err = model.NewAppError("Api4.selfServeDeleteWorkspace", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.selfServeDeleteWorkspace", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/config.go b/server/channels/api4/config.go index 378e9ffea7..f58f7aee72 100644 --- a/server/channels/api4/config.go +++ b/server/channels/api4/config.go @@ -62,7 +62,7 @@ func getConfig(c *Context, w http.ResponseWriter, r *http.Request) { }, }) if err != nil { - c.Err = model.NewAppError("getConfig", "api.config.get_config.restricted_merge.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getConfig", "api.config.get_config.restricted_merge.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -72,7 +72,7 @@ func getConfig(c *Context, w http.ResponseWriter, r *http.Request) { if c.App.Channels().License().IsCloud() { js, jsonErr := cfg.ToJSONFiltered(model.ConfigAccessTagType, model.ConfigAccessTagCloudRestrictable) if jsonErr != nil { - c.Err = model.NewAppError("getConfig", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getConfig", "api.marshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr) return } w.Write(js) @@ -98,7 +98,7 @@ func configReload(c *Context, w http.ResponseWriter, r *http.Request) { } if err := c.App.ReloadConfig(); err != nil { - c.Err = model.NewAppError("configReload", "api.config.reload_config.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("configReload", "api.config.reload_config.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/config_local.go b/server/channels/api4/config_local.go index 97c4187c4a..ece4791924 100644 --- a/server/channels/api4/config_local.go +++ b/server/channels/api4/config_local.go @@ -72,7 +72,7 @@ func localUpdateConfig(c *Context, w http.ResponseWriter, r *http.Request) { diffs, diffErr := config.Diff(oldCfg, newCfg) if diffErr != nil { - c.Err = model.NewAppError("updateConfig", "api.config.update_config.diff.app_error", nil, diffErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("updateConfig", "api.config.update_config.diff.app_error", nil, "", http.StatusInternalServerError).Wrap(diffErr) return } auditRec.AddEventPriorState(&diffs) @@ -113,7 +113,7 @@ func localPatchConfig(c *Context, w http.ResponseWriter, r *http.Request) { }) if mergeErr != nil { - c.Err = model.NewAppError("patchConfig", "api.config.update_config.restricted_merge.app_error", nil, mergeErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("patchConfig", "api.config.update_config.restricted_merge.app_error", nil, "", http.StatusInternalServerError).Wrap(mergeErr) return } @@ -167,7 +167,7 @@ func localMigrateConfig(c *Context, w http.ResponseWriter, r *http.Request) { err := config.Migrate(from, to) if err != nil { - c.Err = model.NewAppError("migrateConfig", "api.config.migrate_config.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("migrateConfig", "api.config.migrate_config.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/data_retention.go b/server/channels/api4/data_retention.go index 4888490e55..dddf108355 100644 --- a/server/channels/api4/data_retention.go +++ b/server/channels/api4/data_retention.go @@ -373,7 +373,7 @@ func searchChannelsInPolicy(c *Context, w http.ResponseWriter, r *http.Request) channelsJSON, jsonErr := json.Marshal(channels) if jsonErr != nil { - c.Err = model.NewAppError("searchChannelsInPolicy", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("searchChannelsInPolicy", "api.marshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr) return } @@ -458,7 +458,7 @@ func getTeamPoliciesForUser(c *Context, w http.ResponseWriter, r *http.Request) js, jsonErr := json.Marshal(policies) if jsonErr != nil { - c.Err = model.NewAppError("getTeamPoliciesForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getTeamPoliciesForUser", "api.marshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr) return } w.Write(js) @@ -486,7 +486,7 @@ func getChannelPoliciesForUser(c *Context, w http.ResponseWriter, r *http.Reques js, jsonErr := json.Marshal(policies) if jsonErr != nil { - c.Err = model.NewAppError("getChannelPoliciesForUser", "api.marshal_error", nil, jsonErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getChannelPoliciesForUser", "api.marshal_error", nil, "", http.StatusInternalServerError).Wrap(jsonErr) return } w.Write(js) diff --git a/server/channels/api4/emoji.go b/server/channels/api4/emoji.go index 466ba29d37..f6d22f3995 100644 --- a/server/channels/api4/emoji.go +++ b/server/channels/api4/emoji.go @@ -46,7 +46,7 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { } if err := r.ParseMultipartForm(app.MaxEmojiFileSize); err != nil { - c.Err = model.NewAppError("createEmoji", "api.emoji.create.parse.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("createEmoji", "api.emoji.create.parse.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/api4/hosted_customer.go b/server/channels/api4/hosted_customer.go index 3a1a40a1b2..fa967cc17b 100644 --- a/server/channels/api4/hosted_customer.go +++ b/server/channels/api4/hosted_customer.go @@ -280,7 +280,7 @@ func selfHostedInvoicePDF(c *Context, w http.ResponseWriter, r *http.Request) { pdfData, filename, appErr := c.App.Cloud().GetSelfHostedInvoicePDF(c.Params.InvoiceId) if appErr != nil { - c.Err = model.NewAppError("Api4.getSubscriptionInvoicePDF", "api.cloud.request_error", nil, appErr.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.getSubscriptionInvoicePDF", "api.cloud.request_error", nil, "", http.StatusInternalServerError).Wrap(appErr) return } diff --git a/server/channels/api4/image.go b/server/channels/api4/image.go index 12b9195087..07da9fa9e5 100644 --- a/server/channels/api4/image.go +++ b/server/channels/api4/image.go @@ -18,7 +18,7 @@ func getImage(c *Context, w http.ResponseWriter, r *http.Request) { actualURL := r.URL.Query().Get("url") parsedURL, err := url.Parse(actualURL) if err != nil { - c.Err = model.NewAppError("getImage", "api.image.get.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("getImage", "api.image.get.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } else if parsedURL.Opaque != "" { c.Err = model.NewAppError("getImage", "api.image.get.app_error", nil, "", http.StatusBadRequest) @@ -26,7 +26,7 @@ func getImage(c *Context, w http.ResponseWriter, r *http.Request) { } siteURL, err := url.Parse(*c.App.Config().ServiceSettings.SiteURL) if err != nil { - c.Err = model.NewAppError("getImage", "model.config.is_valid.site_url.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getImage", "model.config.is_valid.site_url.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/ip_filtering.go b/server/channels/api4/ip_filtering.go index 477e938d9e..3111ba2f82 100644 --- a/server/channels/api4/ip_filtering.go +++ b/server/channels/api4/ip_filtering.go @@ -40,12 +40,12 @@ func getIPFilters(c *Context, w http.ResponseWriter, r *http.Request) { allowedRanges, err := ipFiltering.GetIPFilters() if err != nil { - c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } if err := json.NewEncoder(w).Encode(allowedRanges); err != nil { - c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } } @@ -66,7 +66,7 @@ func applyIPFilters(c *Context, w http.ResponseWriter, r *http.Request) { allowedRanges := &model.AllowedIPRanges{} // Initialize the allowedRanges variable if err := json.NewDecoder(r.Body).Decode(allowedRanges); err != nil { - c.Err = model.NewAppError("applyIPFilters", "api.context.ip_filtering.apply_ip_filters.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("applyIPFilters", "api.context.ip_filtering.apply_ip_filters.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -75,7 +75,7 @@ func applyIPFilters(c *Context, w http.ResponseWriter, r *http.Request) { updatedAllowedRanges, err := ipFiltering.ApplyIPFilters(allowedRanges) if err != nil { - c.Err = model.NewAppError("applyIPFilters", "api.context.ip_filtering.apply_ip_filters.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("applyIPFilters", "api.context.ip_filtering.apply_ip_filters.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -84,7 +84,7 @@ func applyIPFilters(c *Context, w http.ResponseWriter, r *http.Request) { go c.App.SendIPFiltersChangedEmail(c.AppContext, c.AppContext.Session().UserId) if err := json.NewEncoder(w).Encode(updatedAllowedRanges); err != nil { - c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getIPFilters", "api.context.ip_filtering.get_ip_filters.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } } @@ -102,7 +102,7 @@ func myIP(c *Context, w http.ResponseWriter, r *http.Request) { json, err := json.Marshal(response) if err != nil { - c.Err = model.NewAppError("myIP", "api.context.ip_filtering.get_my_ip.failed", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("myIP", "api.context.ip_filtering.get_my_ip.failed", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/ldap.go b/server/channels/api4/ldap.go index 84e91797db..66d9289d9e 100644 --- a/server/channels/api4/ldap.go +++ b/server/channels/api4/ldap.go @@ -318,7 +318,7 @@ func migrateIDLdap(c *Context, w http.ResponseWriter, r *http.Request) { func parseLdapCertificateRequest(r *http.Request, maxFileSize int64) (*multipart.FileHeader, *model.AppError) { err := r.ParseMultipartForm(maxFileSize) if err != nil { - return nil, model.NewAppError("addLdapCertificate", "api.admin.add_certificate.parseform.app_error", nil, err.Error(), http.StatusBadRequest) + return nil, model.NewAppError("addLdapCertificate", "api.admin.add_certificate.parseform.app_error", nil, "", http.StatusBadRequest).Wrap(err) } m := r.MultipartForm @@ -444,7 +444,7 @@ func addUserToGroupSyncables(c *Context, w http.ResponseWriter, r *http.Request) params := model.CreateDefaultMembershipParams{Since: 0, ReAddRemovedMembers: true, ScopedUserID: &user.Id} err := c.App.CreateDefaultMemberships(c.AppContext, params) if err != nil { - c.Err = model.NewAppError("addUserToGroupSyncables", "api.admin.syncables_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addUserToGroupSyncables", "api.admin.syncables_error", nil, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/api4/license.go b/server/channels/api4/license.go index 2d7d5893c0..b0e5b4956d 100644 --- a/server/channels/api4/license.go +++ b/server/channels/api4/license.go @@ -92,7 +92,7 @@ func addLicense(c *Context, w http.ResponseWriter, r *http.Request) { file, err := fileData.Open() if err != nil { - c.Err = model.NewAppError("addLicense", "api.license.add_license.open.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addLicense", "api.license.add_license.open.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } defer file.Close() @@ -201,7 +201,7 @@ func requestTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) { canStartTrialLicense, err := c.App.Srv().Platform().LicenseManager().CanStartTrial() if err != nil { - c.Err = model.NewAppError("requestTrialLicense", "api.license.request-trial.can-start-trial.error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("requestTrialLicense", "api.license.request-trial.can-start-trial.error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -267,7 +267,7 @@ func requestRenewalLink(c *Context, w http.ResponseWriter, r *http.Request) { // check if it is possible to renew license on the portal with generated token status, e := c.App.Cloud().GetLicenseSelfServeStatus(c.AppContext.Session().UserId, token) if e != nil { - c.Err = model.NewAppError("requestRenewalLink", "api.license.request_renewal_link.cannot_renew_on_cws", nil, e.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("requestRenewalLink", "api.license.request_renewal_link.cannot_renew_on_cws", nil, "", http.StatusInternalServerError).Wrap(e) return } @@ -281,7 +281,7 @@ func requestRenewalLink(c *Context, w http.ResponseWriter, r *http.Request) { _, werr := w.Write([]byte(fmt.Sprintf(`{"renewal_link": "%s"}`, renewalLink))) if werr != nil { - c.Err = model.NewAppError("requestRenewalLink", "api.license.request_renewal_link.app_error", nil, werr.Error(), http.StatusForbidden) + c.Err = model.NewAppError("requestRenewalLink", "api.license.request_renewal_link.app_error", nil, "", http.StatusForbidden).Wrap(werr) return } } @@ -355,7 +355,7 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) { if err := c.App.Cloud().CheckCWSConnection(c.AppContext.Session().UserId); err == nil { err = c.App.Cloud().SubmitTrueUpReview(c.AppContext.Session().UserId, profileMap) if err != nil { - c.Err = model.NewAppError("requestTrueUpReview", "api.license.true_up_review.failed_to_submit", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("requestTrueUpReview", "api.license.true_up_review.failed_to_submit", nil, "", http.StatusInternalServerError).Wrap(err) return } } diff --git a/server/channels/api4/license_local.go b/server/channels/api4/license_local.go index debc84409e..b9e078f63b 100644 --- a/server/channels/api4/license_local.go +++ b/server/channels/api4/license_local.go @@ -48,7 +48,7 @@ func localAddLicense(c *Context, w http.ResponseWriter, r *http.Request) { file, err := fileData.Open() if err != nil { - c.Err = model.NewAppError("addLicense", "api.license.add_license.open.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addLicense", "api.license.add_license.open.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } defer file.Close() diff --git a/server/channels/api4/outgoing_oauth_connection.go b/server/channels/api4/outgoing_oauth_connection.go index d45c4f9252..c31dde1341 100644 --- a/server/channels/api4/outgoing_oauth_connection.go +++ b/server/channels/api4/outgoing_oauth_connection.go @@ -140,12 +140,12 @@ func listOutgoingOAuthConnections(c *Context, w http.ResponseWriter, r *http.Req query, err := NewListOutgoingOAuthConnectionsQueryFromURLQuery(r.URL.Query()) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.input_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.input_error", nil, "", http.StatusBadRequest).Wrap(err) return } if errValid := query.IsValid(); errValid != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.input_error", nil, errValid.Error(), http.StatusBadRequest) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.input_error", nil, "", http.StatusBadRequest).Wrap(errValid) return } @@ -155,7 +155,7 @@ func listOutgoingOAuthConnections(c *Context, w http.ResponseWriter, r *http.Req // retrieve a single connection. connection, err := service.GetConnectionForAudience(c.AppContext, query.Audience) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } connections = append(connections, connection) @@ -165,7 +165,7 @@ func listOutgoingOAuthConnections(c *Context, w http.ResponseWriter, r *http.Req var errList *model.AppError connections, errList = service.GetConnections(c.AppContext, query.ToFilter()) if errList != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, errList.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, "", http.StatusInternalServerError).Wrap(errList) return } } @@ -173,7 +173,7 @@ func listOutgoingOAuthConnections(c *Context, w http.ResponseWriter, r *http.Req service.SanitizeConnections(connections) if errJSON := json.NewEncoder(w).Encode(connections); errJSON != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, errJSON.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, "", http.StatusInternalServerError).Wrap(errJSON) return } } @@ -192,14 +192,14 @@ func getOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Reque connection, err := service.GetConnection(c.AppContext, c.Params.OutgoingOAuthConnectionID) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } service.SanitizeConnection(connection) if err := json.NewEncoder(w).Encode(connection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.list_connections.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } } @@ -220,7 +220,7 @@ func createOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re var inputConnection model.OutgoingOAuthConnection if err := json.NewDecoder(r.Body).Decode(&inputConnection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.input_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.input_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -230,7 +230,7 @@ func createOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re connection, err := service.SaveConnection(c.AppContext, &inputConnection) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -243,7 +243,7 @@ func createOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re w.WriteHeader(http.StatusCreated) if err := json.NewEncoder(w).Encode(connection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.create_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } } @@ -270,7 +270,7 @@ func updateOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re var inputConnection model.OutgoingOAuthConnection if err := json.NewDecoder(r.Body).Decode(&inputConnection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.input_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.input_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -281,7 +281,7 @@ func updateOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re currentConnection, err := service.GetConnection(c.AppContext, c.Params.OutgoingOAuthConnectionID) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } auditRec.AddEventPriorState(currentConnection) @@ -290,7 +290,7 @@ func updateOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re connection, err := service.UpdateConnection(c.AppContext, currentConnection) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -309,7 +309,7 @@ func updateOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re service.SanitizeConnection(connection) if err := json.NewEncoder(w).Encode(connection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.update_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } } @@ -336,13 +336,13 @@ func deleteOutgoingOAuthConnection(c *Context, w http.ResponseWriter, r *http.Re connection, err := service.GetConnection(c.AppContext, c.Params.OutgoingOAuthConnectionID) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.delete_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.delete_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } auditRec.AddEventPriorState(connection) if err := service.DeleteConnection(c.AppContext, c.Params.OutgoingOAuthConnectionID); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.delete_connection.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.delete_connection.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -374,7 +374,7 @@ func validateOutgoingOAuthConnectionCredentials(c *Context, w http.ResponseWrite var inputConnection *model.OutgoingOAuthConnection if err := json.NewDecoder(r.Body).Decode(&inputConnection); err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.input_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.input_error", nil, "", http.StatusBadRequest).Wrap(err) w.WriteHeader(c.Err.StatusCode) return } @@ -384,7 +384,7 @@ func validateOutgoingOAuthConnectionCredentials(c *Context, w http.ResponseWrite var storedConnection *model.OutgoingOAuthConnection storedConnection, err = service.GetConnection(c.AppContext, inputConnection.Id) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.app_error", nil, "", http.StatusInternalServerError).Wrap(err) w.WriteHeader(c.Err.StatusCode) return } @@ -400,7 +400,7 @@ func validateOutgoingOAuthConnectionCredentials(c *Context, w http.ResponseWrite // do not store the token, just check if the credentials are valid and the request can be made _, err := service.RetrieveTokenForConnection(c.AppContext, inputConnection) if err != nil { - c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.app_error", nil, err.Error(), err.StatusCode) + c.Err = model.NewAppError(whereOutgoingOAuthConnection, "api.context.outgoing_oauth_connection.validate_connection_credentials.app_error", nil, "", err.StatusCode).Wrap(err) c.Logger.Error("Failed to retrieve token while validating outgoing oauth connection", logr.Err(err)) resultStatusCode = err.StatusCode } else { diff --git a/server/channels/api4/plugin.go b/server/channels/api4/plugin.go index e037ba0b49..6905185f0c 100644 --- a/server/channels/api4/plugin.go +++ b/server/channels/api4/plugin.go @@ -114,7 +114,7 @@ func installPluginFromURL(c *Context, w http.ResponseWriter, r *http.Request) { pluginFileBytes, err := c.App.DownloadFromURL(downloadURL) if err != nil { - c.Err = model.NewAppError("installPluginFromURL", "api.plugin.install.download_failed.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("installPluginFromURL", "api.plugin.install.download_failed.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -143,7 +143,7 @@ func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request pluginRequest, err := model.PluginRequestFromReader(r.Body) if err != nil { - c.Err = model.NewAppError("installMarketplacePlugin", "app.plugin.marketplace_plugin_request.app_error", nil, err.Error(), http.StatusNotImplemented) + c.Err = model.NewAppError("installMarketplacePlugin", "app.plugin.marketplace_plugin_request.app_error", nil, "", http.StatusNotImplemented).Wrap(err) return } audit.AddEventParameter(auditRec, "plugin_id", pluginRequest.Id) @@ -428,7 +428,7 @@ func setFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h } if err := c.App.Srv().Store().System().SaveOrUpdate(&firstAdminVisitMarketplaceObj); err != nil { - c.Err = model.NewAppError("setFirstAdminVisitMarketplaceStatus", "api.error_set_first_admin_visit_marketplace_status", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("setFirstAdminVisitMarketplaceStatus", "api.error_set_first_admin_visit_marketplace_status", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -460,7 +460,7 @@ func getFirstAdminVisitMarketplaceStatus(c *Context, w http.ResponseWriter, r *h Value: "false", } default: - c.Err = model.NewAppError("getFirstAdminVisitMarketplaceStatus", "api.error_get_first_admin_visit_marketplace_status", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("getFirstAdminVisitMarketplaceStatus", "api.error_get_first_admin_visit_marketplace_status", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/plugin_local.go b/server/channels/api4/plugin_local.go index 88d1e1d6ce..574c03099a 100644 --- a/server/channels/api4/plugin_local.go +++ b/server/channels/api4/plugin_local.go @@ -29,7 +29,7 @@ func (api *API) InitPluginLocal() { func reattachPlugin(c *Context, w http.ResponseWriter, r *http.Request) { var pluginReattachRequest model.PluginReattachRequest if err := json.NewDecoder(r.Body).Decode(&pluginReattachRequest); err != nil { - c.Err = model.NewAppError("reattachPlugin", "api4.plugin.reattachPlugin.invalid_request", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("reattachPlugin", "api4.plugin.reattachPlugin.invalid_request", nil, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/api4/remote_cluster.go b/server/channels/api4/remote_cluster.go index 9935eaff1e..14fdb6ae3b 100644 --- a/server/channels/api4/remote_cluster.go +++ b/server/channels/api4/remote_cluster.go @@ -244,7 +244,7 @@ func remoteSetProfileImage(c *Context, w http.ResponseWriter, r *http.Request) { } if err := r.ParseMultipartForm(*c.App.Config().FileSettings.MaxFileSize); err != nil { - c.Err = model.NewAppError("remoteUploadProfileImage", "api.user.upload_profile_user.parse.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("remoteUploadProfileImage", "api.user.upload_profile_user.parse.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } diff --git a/server/channels/api4/saml.go b/server/channels/api4/saml.go index dc404c985d..b8cddbb70e 100644 --- a/server/channels/api4/saml.go +++ b/server/channels/api4/saml.go @@ -52,7 +52,7 @@ func getSamlMetadata(c *Context, w http.ResponseWriter, r *http.Request) { func parseSamlCertificateRequest(r *http.Request, maxFileSize int64) (*multipart.FileHeader, *model.AppError) { err := r.ParseMultipartForm(maxFileSize) if err != nil { - return nil, model.NewAppError("addSamlCertificate", "api.admin.add_certificate.no_file.app_error", nil, err.Error(), http.StatusBadRequest) + return nil, model.NewAppError("addSamlCertificate", "api.admin.add_certificate.no_file.app_error", nil, "", http.StatusBadRequest).Wrap(err) } m := r.MultipartForm @@ -130,7 +130,7 @@ func addSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) { } d, _, err := mime.ParseMediaType(v) if err != nil { - c.Err = model.NewAppError("addSamlIdpCertificate", "api.admin.saml.set_certificate_from_metadata.invalid_content_type.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addSamlIdpCertificate", "api.admin.saml.set_certificate_from_metadata.invalid_content_type.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -141,7 +141,7 @@ func addSamlIdpCertificate(c *Context, w http.ResponseWriter, r *http.Request) { if d == "application/x-pem-file" { body, err := io.ReadAll(r.Body) if err != nil { - c.Err = model.NewAppError("addSamlIdpCertificate", "api.admin.saml.set_certificate_from_metadata.invalid_body.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addSamlIdpCertificate", "api.admin.saml.set_certificate_from_metadata.invalid_body.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -251,7 +251,7 @@ func getSamlMetadataFromIdp(c *Context, w http.ResponseWriter, r *http.Request) metadata, err := c.App.GetSamlMetadataFromIdp(url) if err != nil { - c.Err = model.NewAppError("getSamlMetadataFromIdp", "api.admin.saml.failure_get_metadata_from_idp.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("getSamlMetadataFromIdp", "api.admin.saml.failure_get_metadata_from_idp.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/api4/system.go b/server/channels/api4/system.go index 9f665505a5..0d8b53e88b 100644 --- a/server/channels/api4/system.go +++ b/server/channels/api4/system.go @@ -121,14 +121,14 @@ func generateSupportPacket(c *Context, w http.ResponseWriter, r *http.Request) { outputDirectoryToUse := OutputDirectory + "_" + model.NewId() err := c.App.CreateZipFileAndAddFiles(fileStorageBackend, fileDatas, outputZipFilename, outputDirectoryToUse) if err != nil { - c.Err = model.NewAppError("Api4.generateSupportPacket", "api.unable_to_create_zip_file", nil, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("Api4.generateSupportPacket", "api.unable_to_create_zip_file", nil, "", http.StatusForbidden).Wrap(err) return } fileBytes, err := fileStorageBackend.ReadFile(path.Join(outputDirectoryToUse, outputZipFilename)) defer fileStorageBackend.RemoveDirectory(outputDirectoryToUse) if err != nil { - c.Err = model.NewAppError("Api4.generateSupportPacket", "api.unable_to_read_file_from_backend", nil, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("Api4.generateSupportPacket", "api.unable_to_read_file_from_backend", nil, "", http.StatusForbidden).Wrap(err) return } fileBytesReader := bytes.NewReader(fileBytes) @@ -678,7 +678,7 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) { msg, appError := notificationInterface.GetNotificationMessage(c.AppContext, &ack, c.AppContext.Session().UserId) if appError != nil { - c.Err = model.NewAppError("pushNotificationAck", "api.push_notification.id_loaded.fetch.app_error", nil, appError.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("pushNotificationAck", "api.push_notification.id_loaded.fetch.app_error", nil, "", http.StatusInternalServerError).Wrap(appError) return } if err2 := json.NewEncoder(w).Encode(msg); err2 != nil { @@ -688,7 +688,7 @@ func pushNotificationAck(c *Context, w http.ResponseWriter, r *http.Request) { return } else if err != nil { - c.Err = model.NewAppError("pushNotificationAck", "api.push_notifications_ack.forward.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("pushNotificationAck", "api.push_notifications_ack.forward.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -795,16 +795,16 @@ func upgradeToEnterprise(c *Context, w http.ResponseWriter, r *http.Request) { "Path": ipErr.Path, } if ipErr.ErrType == "invalid-user-and-permission" { - c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-user-and-permission.app_error", params, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-user-and-permission.app_error", params, "", http.StatusForbidden).Wrap(err) } else if ipErr.ErrType == "invalid-user" { - c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-user.app_error", params, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-user.app_error", params, "", http.StatusForbidden).Wrap(err) } else if ipErr.ErrType == "invalid-permission" { - c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-permission.app_error", params, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.invalid-permission.app_error", params, "", http.StatusForbidden).Wrap(err) } case errors.As(err, &iaErr): - c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.system_not_supported.app_error", nil, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.system_not_supported.app_error", nil, "", http.StatusForbidden).Wrap(err) default: - c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.generic_error.app_error", nil, err.Error(), http.StatusForbidden) + c.Err = model.NewAppError("upgradeToEnterprise", "api.upgrade_to_enterprise.generic_error.app_error", nil, "", http.StatusForbidden).Wrap(err) } return } @@ -830,10 +830,10 @@ func upgradeToEnterpriseStatus(c *Context, w http.ResponseWriter, r *http.Reques var isErr *upgrader.InvalidSignature switch { case errors.As(err, &isErr): - appErr := model.NewAppError("upgradeToEnterpriseStatus", "api.upgrade_to_enterprise_status.app_error", nil, err.Error(), http.StatusBadRequest) + appErr := model.NewAppError("upgradeToEnterpriseStatus", "api.upgrade_to_enterprise_status.app_error", nil, "", http.StatusBadRequest).Wrap(isErr) s = map[string]any{"percentage": 0, "error": appErr.Message} default: - appErr := model.NewAppError("upgradeToEnterpriseStatus", "api.upgrade_to_enterprise_status.signature.app_error", nil, err.Error(), http.StatusBadRequest) + appErr := model.NewAppError("upgradeToEnterpriseStatus", "api.upgrade_to_enterprise_status.signature.app_error", nil, "", http.StatusBadRequest).Wrap(err) s = map[string]any{"percentage": 0, "error": appErr.Message} } } else { diff --git a/server/channels/api4/team.go b/server/channels/api4/team.go index 2a09aee60f..402a531eb4 100644 --- a/server/channels/api4/team.go +++ b/server/channels/api4/team.go @@ -97,7 +97,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) { if c.App.Channels().License().IsCloud() { limits, err := c.App.Cloud().GetCloudLimits(c.AppContext.Session().UserId) if err != nil { - c.Err = model.NewAppError("Api4.createTeam", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.createTeam", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -292,7 +292,7 @@ func restoreTeam(c *Context, w http.ResponseWriter, r *http.Request) { if c.App.Channels().License().IsCloud() { limits, err := c.App.Cloud().GetCloudLimits(c.AppContext.Session().UserId) if err != nil { - c.Err = model.NewAppError("Api4.restoreTeam", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("Api4.restoreTeam", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -741,7 +741,7 @@ func addTeamMember(c *Context, w http.ResponseWriter, r *http.Request) { if v, ok := err.(*model.AppError); ok { c.Err = v } else { - c.Err = model.NewAppError("addTeamMember", "api.team.add_members.error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("addTeamMember", "api.team.add_members.error", nil, "", http.StatusBadRequest).Wrap(err) } return } @@ -1285,7 +1285,7 @@ func importTeam(c *Context, w http.ResponseWriter, r *http.Request) { } if err := r.ParseMultipartForm(MaximumBulkImportSize); err != nil { - c.Err = model.NewAppError("importTeam", "api.team.import_team.parse.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("importTeam", "api.team.import_team.parse.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -1327,7 +1327,7 @@ func importTeam(c *Context, w http.ResponseWriter, r *http.Request) { fileData, err := fileInfo.Open() if err != nil { - c.Err = model.NewAppError("importTeam", "api.team.import_team.open.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("importTeam", "api.team.import_team.open.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } defer fileData.Close() @@ -1445,7 +1445,7 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) { // we then manually schedule the job to send another invite after 48 hours _, appErr = c.App.Srv().Jobs.CreateJob(c.AppContext, model.JobTypeResendInvitationEmail, jobData) if appErr != nil { - c.Err = model.NewAppError("Api4.inviteUsersToTeam", appErr.Id, nil, appErr.Error(), appErr.StatusCode) + c.Err = model.NewAppError("Api4.inviteUsersToTeam", appErr.Id, nil, "", appErr.StatusCode).Wrap(appErr) return } @@ -1672,7 +1672,7 @@ func setTeamIcon(c *Context, w http.ResponseWriter, r *http.Request) { } if err := r.ParseMultipartForm(*c.App.Config().FileSettings.MaxFileSize); err != nil { - c.Err = model.NewAppError("setTeamIcon", "api.team.set_team_icon.parse.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("setTeamIcon", "api.team.set_team_icon.parse.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/api4/user.go b/server/channels/api4/user.go index 0584c8c8a9..6cb4d920e3 100644 --- a/server/channels/api4/user.go +++ b/server/channels/api4/user.go @@ -445,7 +445,7 @@ func setProfileImage(c *Context, w http.ResponseWriter, r *http.Request) { } if err := r.ParseMultipartForm(*c.App.Config().FileSettings.MaxFileSize); err != nil { - c.Err = model.NewAppError("uploadProfileImage", "api.user.upload_profile_user.parse.app_error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("uploadProfileImage", "api.user.upload_profile_user.parse.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return } @@ -1550,7 +1550,7 @@ func updateUserActive(c *Context, w http.ResponseWriter, r *http.Request) { if isSelfDeactivate { c.App.Srv().Go(func() { if err := c.App.Srv().EmailService.SendDeactivateAccountEmail(user.Email, user.Locale, c.App.GetSiteURL()); err != nil { - c.LogErrorByCode(model.NewAppError("SendDeactivateEmail", "api.user.send_deactivate_email_and_forget.failed.error", nil, err.Error(), http.StatusInternalServerError)) + c.LogErrorByCode(model.NewAppError("SendDeactivateEmail", "api.user.send_deactivate_email_and_forget.failed.error", nil, "", http.StatusInternalServerError).Wrap(err)) } }) } @@ -2309,7 +2309,7 @@ func verifyUserEmail(c *Context, w http.ResponseWriter, r *http.Request) { defer c.LogAuditRec(auditRec) if err := c.App.VerifyEmailFromToken(c.AppContext, token); err != nil { - c.Err = model.NewAppError("verifyUserEmail", "api.user.verify_email.bad_link.app_error", nil, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("verifyUserEmail", "api.user.verify_email.bad_link.app_error", nil, "", http.StatusBadRequest).Wrap(err) return } @@ -3061,7 +3061,7 @@ func migrateAuthToLDAP(c *Context, w http.ResponseWriter, r *http.Request) { if migrate := c.App.AccountMigration(); migrate != nil { if err := migrate.MigrateToLdap(c.AppContext, from, matchField, force, false); err != nil { - c.Err = model.NewAppError("api.migrateAuthToLdap", "api.migrate_to_saml.error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("api.migrateAuthToLdap", "api.migrate_to_saml.error", nil, "", http.StatusInternalServerError).Wrap(err) return } } else { @@ -3120,7 +3120,7 @@ func migrateAuthToSaml(c *Context, w http.ResponseWriter, r *http.Request) { if migrate := c.App.AccountMigration(); migrate != nil { if err := migrate.MigrateToSaml(c.AppContext, from, usersMap, auto, false); err != nil { - c.Err = model.NewAppError("api.migrateAuthToSaml", "api.migrate_to_saml.error", nil, err.Error(), http.StatusInternalServerError) + c.Err = model.NewAppError("api.migrateAuthToSaml", "api.migrate_to_saml.error", nil, "", http.StatusInternalServerError).Wrap(err) return } } else { diff --git a/server/channels/api4/websocket.go b/server/channels/api4/websocket.go index 001bc6a052..428d8e5e70 100644 --- a/server/channels/api4/websocket.go +++ b/server/channels/api4/websocket.go @@ -36,7 +36,7 @@ func connectWebSocket(c *Context, w http.ResponseWriter, r *http.Request) { params := map[string]any{ "BlockedOrigin": r.Header.Get("Origin"), } - c.Err = model.NewAppError("connect", "api.web_socket.connect.upgrade.app_error", params, err.Error(), http.StatusBadRequest) + c.Err = model.NewAppError("connect", "api.web_socket.connect.upgrade.app_error", params, "", http.StatusBadRequest).Wrap(err) return } diff --git a/server/channels/app/cloud.go b/server/channels/app/cloud.go index 40dbcc04e3..1c164a9766 100644 --- a/server/channels/app/cloud.go +++ b/server/channels/app/cloud.go @@ -19,7 +19,7 @@ import ( func getCurrentPlanName(a *App) (string, *model.AppError) { subscription, err := a.Cloud().GetSubscription("") if err != nil { - return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_subscription.app_error", nil, err.Error(), http.StatusInternalServerError) + return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_subscription.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } if subscription == nil { return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_subscription.app_error", nil, "", http.StatusInternalServerError) @@ -27,7 +27,7 @@ func getCurrentPlanName(a *App) (string, *model.AppError) { products, err := a.Cloud().GetCloudProducts("", false) if err != nil { - return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_cloud_products.app_error", nil, err.Error(), http.StatusInternalServerError) + return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_cloud_products.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } if products == nil { return "", model.NewAppError("getCurrentPlanName", "app.cloud.get_cloud_products.app_error", nil, "", http.StatusInternalServerError) @@ -45,7 +45,7 @@ func (a *App) SendPaymentFailedEmail(failedPayment *model.FailedPayment) *model. planName, err := getCurrentPlanName(a) if err != nil { - return model.NewAppError("SendPaymentFailedEmail", "app.cloud.get_current_plan_name.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("SendPaymentFailedEmail", "app.cloud.get_current_plan_name.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } for _, admin := range sysAdmins { @@ -73,12 +73,12 @@ func (a *App) SendDelinquencyEmail(emailToSend model.DelinquencyEmail) *model.Ap } planName, aErr := getCurrentPlanName(a) if aErr != nil { - return model.NewAppError("SendDelinquencyEmail", "app.cloud.get_current_plan_name.app_error", nil, aErr.Error(), http.StatusInternalServerError) + return model.NewAppError("SendDelinquencyEmail", "app.cloud.get_current_plan_name.app_error", nil, "", http.StatusInternalServerError).Wrap(aErr) } subscription, err := a.Cloud().GetSubscription("") if err != nil { - return model.NewAppError("SendDelinquencyEmail", "app.cloud.get_subscription.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("SendDelinquencyEmail", "app.cloud.get_subscription.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } if subscription == nil { return model.NewAppError("SendDelinquencyEmail", "app.cloud.get_subscription.app_error", nil, "", http.StatusInternalServerError) diff --git a/server/channels/app/desktop_login.go b/server/channels/app/desktop_login.go index 6d089dbcab..70504853ec 100644 --- a/server/channels/app/desktop_login.go +++ b/server/channels/app/desktop_login.go @@ -16,7 +16,7 @@ func (a *App) GenerateAndSaveDesktopToken(createAt int64, user *model.User) (*st // Delete any other related tokens if there's an error a.Srv().Store().DesktopTokens().DeleteByUserId(user.Id) - return nil, model.NewAppError("GenerateAndSaveDesktopToken", "app.desktop_token.generateServerToken.invalid_or_expired", nil, err.Error(), http.StatusBadRequest) + return nil, model.NewAppError("GenerateAndSaveDesktopToken", "app.desktop_token.generateServerToken.invalid_or_expired", nil, "", http.StatusBadRequest).Wrap(err) } return &token, nil @@ -29,7 +29,7 @@ func (a *App) ValidateDesktopToken(token string, expiryTime int64) (*model.User, // Delete the token if it is expired or invalid a.Srv().Store().DesktopTokens().Delete(token) - return nil, model.NewAppError("ValidateDesktopToken", "app.desktop_token.validate.invalid", nil, err.Error(), http.StatusUnauthorized) + return nil, model.NewAppError("ValidateDesktopToken", "app.desktop_token.validate.invalid", nil, "", http.StatusUnauthorized).Wrap(err) } // Get the user profile @@ -38,7 +38,7 @@ func (a *App) ValidateDesktopToken(token string, expiryTime int64) (*model.User, // Delete the token if the user is invalid somehow a.Srv().Store().DesktopTokens().Delete(token) - return nil, model.NewAppError("ValidateDesktopToken", "app.desktop_token.validate.no_user", nil, userErr.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("ValidateDesktopToken", "app.desktop_token.validate.no_user", nil, "", http.StatusInternalServerError).Wrap(userErr) } // Clean up other tokens if they exist diff --git a/server/channels/app/draft.go b/server/channels/app/draft.go index 3d91a00f20..83c20e64bf 100644 --- a/server/channels/app/draft.go +++ b/server/channels/app/draft.go @@ -25,9 +25,9 @@ func (a *App) GetDraft(userID, channelID, rootID string) (*model.Draft, *model.A var nfErr *store.ErrNotFound switch { case errors.As(err, &nfErr): - return nil, model.NewAppError("GetDraft", "app.draft.get.app_error", nil, err.Error(), http.StatusNotFound) + return nil, model.NewAppError("GetDraft", "app.draft.get.app_error", nil, "", http.StatusNotFound).Wrap(err) default: - return nil, model.NewAppError("GetDraft", "app.draft.get.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("GetDraft", "app.draft.get.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } @@ -42,7 +42,7 @@ func (a *App) UpsertDraft(c request.CTX, draft *model.Draft, connectionID string // Check that channel exists and has not been deleted channel, errCh := a.Srv().Store().Channel().Get(draft.ChannelId, true) if errCh != nil { - err := model.NewAppError("CreateDraft", "api.context.invalid_param.app_error", map[string]interface{}{"Name": "draft.channel_id"}, errCh.Error(), http.StatusBadRequest) + err := model.NewAppError("CreateDraft", "api.context.invalid_param.app_error", map[string]interface{}{"Name": "draft.channel_id"}, "", http.StatusBadRequest).Wrap(errCh) return nil, err } @@ -53,21 +53,21 @@ func (a *App) UpsertDraft(c request.CTX, draft *model.Draft, connectionID string _, nErr := a.Srv().Store().User().Get(context.Background(), draft.UserId) if nErr != nil { - return nil, model.NewAppError("CreateDraft", "app.user.get.app_error", nil, nErr.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("CreateDraft", "app.user.get.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr) } // If the draft is empty, just delete it if draft.Message == "" { deleteErr := a.Srv().Store().Draft().Delete(draft.UserId, draft.ChannelId, draft.RootId) if deleteErr != nil { - return nil, model.NewAppError("CreateDraft", "app.draft.save.app_error", nil, deleteErr.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("CreateDraft", "app.draft.save.app_error", nil, "", http.StatusInternalServerError).Wrap(deleteErr) } return nil, nil } dt, nErr := a.Srv().Store().Draft().Upsert(draft) if nErr != nil { - return nil, model.NewAppError("CreateDraft", "app.draft.save.app_error", nil, nErr.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("CreateDraft", "app.draft.save.app_error", nil, "", http.StatusInternalServerError).Wrap(nErr) } dt = a.prepareDraftWithFileInfos(c, draft.UserId, dt) @@ -91,7 +91,7 @@ func (a *App) GetDraftsForUser(rctx request.CTX, userID, teamID string) ([]*mode drafts, err := a.Srv().Store().Draft().GetDraftsForUser(userID, teamID) if err != nil { - return nil, model.NewAppError("GetDraftsForUser", "app.draft.get_drafts.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("GetDraftsForUser", "app.draft.get_drafts.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } for _, draft := range drafts { @@ -145,7 +145,7 @@ func (a *App) DeleteDraft(rctx request.CTX, draft *model.Draft, connectionID str } if err := a.Srv().Store().Draft().Delete(draft.UserId, draft.ChannelId, draft.RootId); err != nil { - return model.NewAppError("DeleteDraft", "app.draft.delete.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("DeleteDraft", "app.draft.delete.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } draftJSON, jsonErr := json.Marshal(draft) diff --git a/server/channels/app/file.go b/server/channels/app/file.go index f7dccad020..59ce3cd927 100644 --- a/server/channels/app/file.go +++ b/server/channels/app/file.go @@ -1505,13 +1505,13 @@ func (a *App) GetLastAccessibleFileTime() (int64, *model.AppError) { // All files are accessible return 0, nil default: - return 0, model.NewAppError("GetLastAccessibleFileTime", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError) + return 0, model.NewAppError("GetLastAccessibleFileTime", "app.system.get_by_name.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } lastAccessibleFileTime, err := strconv.ParseInt(system.Value, 10, 64) if err != nil { - return 0, model.NewAppError("GetLastAccessibleFileTime", "common.parse_error_int64", map[string]interface{}{"Value": system.Value}, err.Error(), http.StatusInternalServerError) + return 0, model.NewAppError("GetLastAccessibleFileTime", "common.parse_error_int64", map[string]interface{}{"Value": system.Value}, "", http.StatusInternalServerError).Wrap(err) } return lastAccessibleFileTime, nil @@ -1535,13 +1535,13 @@ func (a *App) ComputeLastAccessibleFileTime() error { // All files are already accessible return nil default: - return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.get_by_name.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.get_by_name.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } if systemValue != nil { // Previous value was set, so we must clear it if _, err := a.Srv().Store().System().PermanentDeleteByName(model.SystemLastAccessibleFileTime); err != nil { - return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.permanent_delete_by_name.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.permanent_delete_by_name.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } return nil @@ -1551,7 +1551,7 @@ func (a *App) ComputeLastAccessibleFileTime() error { if err != nil { var nfErr *store.ErrNotFound if !errors.As(err, &nfErr) { - return model.NewAppError("ComputeLastAccessibleFileTime", "app.last_accessible_file.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("ComputeLastAccessibleFileTime", "app.last_accessible_file.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } @@ -1561,7 +1561,7 @@ func (a *App) ComputeLastAccessibleFileTime() error { Value: strconv.FormatInt(createdAt, 10), }) if err != nil { - return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.save.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("ComputeLastAccessibleFileTime", "app.system.save.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } return nil @@ -1577,7 +1577,7 @@ func (a *App) getCloudFilesSizeLimit() (int64, *model.AppError) { // limits is in bits limits, err := a.Cloud().GetCloudLimits("") if err != nil { - return 0, model.NewAppError("getCloudFilesSizeLimit", "api.cloud.app_error", nil, err.Error(), http.StatusInternalServerError) + return 0, model.NewAppError("getCloudFilesSizeLimit", "api.cloud.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } if limits == nil || limits.Files == nil || limits.Files.TotalStorage == nil { diff --git a/server/channels/app/file_helper.go b/server/channels/app/file_helper.go index 66cfaa64e9..2f993dfc6f 100644 --- a/server/channels/app/file_helper.go +++ b/server/channels/app/file_helper.go @@ -18,7 +18,7 @@ func (a *App) removeInaccessibleContentFromFilesSlice(files []*model.FileInfo) ( lastAccessibleFileTime, appErr := a.GetLastAccessibleFileTime() if appErr != nil { - return 0, model.NewAppError("removeInaccessibleFileListContent", "app.last_accessible_file.app_error", nil, appErr.Error(), http.StatusInternalServerError) + return 0, model.NewAppError("removeInaccessibleFileListContent", "app.last_accessible_file.app_error", nil, "", http.StatusInternalServerError).Wrap(appErr) } if lastAccessibleFileTime == 0 { // No need to remove content, all files are accessible @@ -46,7 +46,7 @@ func (a *App) filterInaccessibleFiles(fileList *model.FileInfoList, options filt lastAccessibleFileTime, appErr := a.GetLastAccessibleFileTime() if appErr != nil { - return model.NewAppError("filterInaccessibleFiles", "app.last_accessible_file.app_error", nil, appErr.Error(), http.StatusInternalServerError) + return model.NewAppError("filterInaccessibleFiles", "app.last_accessible_file.app_error", nil, "", http.StatusInternalServerError).Wrap(appErr) } if lastAccessibleFileTime == 0 { // No need to filter, all files are accessible @@ -129,7 +129,7 @@ func (a *App) getFilteredAccessibleFiles(files []*model.FileInfo, options filter filteredFiles := []*model.FileInfo{} lastAccessibleFileTime, appErr := a.GetLastAccessibleFileTime() if appErr != nil { - return filteredFiles, 0, model.NewAppError("getFilteredAccessibleFiles", "app.last_accessible_file.app_error", nil, appErr.Error(), http.StatusInternalServerError) + return filteredFiles, 0, model.NewAppError("getFilteredAccessibleFiles", "app.last_accessible_file.app_error", nil, "", http.StatusInternalServerError).Wrap(appErr) } else if lastAccessibleFileTime == 0 { // No need to filter, all files are accessible return files, 0, nil diff --git a/server/channels/app/group.go b/server/channels/app/group.go index 2290130993..4189f0bbc1 100644 --- a/server/channels/app/group.go +++ b/server/channels/app/group.go @@ -249,9 +249,9 @@ func (a *App) RestoreGroup(groupID string) (*model.Group, *model.AppError) { var nfErr *store.ErrNotFound switch { case errors.As(err, &nfErr): - return nil, model.NewAppError("RestoreGroup", "app.group.no_rows", nil, nfErr.Error(), http.StatusNotFound) + return nil, model.NewAppError("RestoreGroup", "app.group.no_rows", nil, "", http.StatusNotFound).Wrap(nfErr) default: - return nil, model.NewAppError("RestoreGroup", "app.update_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("RestoreGroup", "app.update_error", nil, "", http.StatusInternalServerError).Wrap(err) } } diff --git a/server/channels/app/login.go b/server/channels/app/login.go index 1322acc3eb..afeaf2bb49 100644 --- a/server/channels/app/login.go +++ b/server/channels/app/login.go @@ -214,7 +214,7 @@ func (a *App) DoLogin(c request.CTX, w http.ResponseWriter, r *http.Request, use } if updateErr := a.Srv().Store().User().UpdateLastLogin(user.Id, session.CreateAt); updateErr != nil { - return nil, model.NewAppError("DoLogin", "app.login.doLogin.updateLastLogin.error", nil, updateErr.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("DoLogin", "app.login.doLogin.updateLastLogin.error", nil, "", http.StatusInternalServerError).Wrap(updateErr) } w.Header().Set(model.HeaderToken, session.Token) diff --git a/server/channels/app/notify_admin.go b/server/channels/app/notify_admin.go index 3c6a533abe..73d0242ef9 100644 --- a/server/channels/app/notify_admin.go +++ b/server/channels/app/notify_admin.go @@ -65,9 +65,9 @@ func (a *App) SaveAdminNotifyData(data *model.NotifyAdminData) (*model.NotifyAdm var nfErr *store.ErrNotFound switch { case errors.As(err, &nfErr): - return nil, model.NewAppError("SaveAdminNotifyData", "app.notify_admin.save.app_error", nil, nfErr.Error(), http.StatusNotFound) + return nil, model.NewAppError("SaveAdminNotifyData", "app.notify_admin.save.app_error", nil, "", http.StatusNotFound).Wrap(nfErr) default: - return nil, model.NewAppError("SaveAdminNotifyData", "app.notify_admin.save.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("SaveAdminNotifyData", "app.notify_admin.save.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } } @@ -107,7 +107,7 @@ func (a *App) SendNotifyAdminPosts(c request.CTX, workspaceName string, currentS data, err := a.Srv().Store().NotifyAdmin().Get(trial) if err != nil { - return model.NewAppError("SendNotifyAdminPosts", "app.notify_admin.send_notification_post.app_error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("SendNotifyAdminPosts", "app.notify_admin.send_notification_post.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } data = filterNotificationData(data, func(nad *model.NotifyAdminData) bool { return nad.RequiredPlan != currentSKU }) diff --git a/server/channels/app/post.go b/server/channels/app/post.go index f4badb2d17..a313d13b15 100644 --- a/server/channels/app/post.go +++ b/server/channels/app/post.go @@ -2544,7 +2544,7 @@ func (a *App) MoveThread(c request.CTX, postID string, sourceChannelID, channelI err := a.ValidateMoveOrCopy(c, wpl, originalChannel, targetChannel, user) if err != nil { - return model.NewAppError("validateMoveOrCopy", "app.post.move_thread_command.error", nil, err.Error(), http.StatusBadRequest) + return model.NewAppError("validateMoveOrCopy", "app.post.move_thread_command.error", nil, "", http.StatusBadRequest).Wrap(err) } var targetTeam *model.Team @@ -2576,7 +2576,7 @@ func (a *App) MoveThread(c request.CTX, postID string, sourceChannelID, channelI T, err := i18n.GetTranslationsBySystemLocale() if err != nil { - return model.NewAppError("MoveThread", "app.post.move_thread_command.error", nil, err.Error(), http.StatusInternalServerError) + return model.NewAppError("MoveThread", "app.post.move_thread_command.error", nil, "", http.StatusInternalServerError).Wrap(err) } ephemeralPostProps := model.StringInterface{ diff --git a/server/channels/app/status.go b/server/channels/app/status.go index 536ac6f895..b99a682cda 100644 --- a/server/channels/app/status.go +++ b/server/channels/app/status.go @@ -80,7 +80,7 @@ func (a *App) SetCustomStatus(c request.CTX, userID string, cs *model.CustomStat // Ensure the emoji exists before saving the custom status even if it's deleted afterwards if cs.Emoji != "" { if err := a.confirmEmojiExists(c, cs.Emoji); err != nil { - return model.NewAppError("SetCustomStatus", "api.custom_status.set_custom_statuses.emoji_not_found", nil, err.Error(), http.StatusBadRequest) + return model.NewAppError("SetCustomStatus", "api.custom_status.set_custom_statuses.emoji_not_found", nil, "", http.StatusBadRequest).Wrap(err) } }