diff --git a/server/channels/api4/license.go b/server/channels/api4/license.go index b0e5b4956d5..29a0fca2cc7 100644 --- a/server/channels/api4/license.go +++ b/server/channels/api4/license.go @@ -327,7 +327,7 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) { return } - status, appErr := c.App.GetOrCreateTrueUpReviewStatus() + status, appErr := c.App.GetOrCreateTrueUpReviewStatus(c.AppContext) if appErr != nil { c.Err = appErr return @@ -394,7 +394,7 @@ func trueUpReviewStatus(c *Context, w http.ResponseWriter, r *http.Request) { return } - status, appErr := c.App.GetOrCreateTrueUpReviewStatus() + status, appErr := c.App.GetOrCreateTrueUpReviewStatus(c.AppContext) if appErr != nil { c.Err = appErr } diff --git a/server/channels/api4/oauth.go b/server/channels/api4/oauth.go index f946b12f7f3..8cb6ae73e71 100644 --- a/server/channels/api4/oauth.go +++ b/server/channels/api4/oauth.go @@ -230,7 +230,7 @@ func deleteOAuthApp(c *Context, w http.ResponseWriter, r *http.Request) { return } - err = c.App.DeleteOAuthApp(oauthApp.Id) + err = c.App.DeleteOAuthApp(c.AppContext, oauthApp.Id) if err != nil { c.Err = err return diff --git a/server/channels/api4/plugin.go b/server/channels/api4/plugin.go index 6905185f0c3..c3804ec07e7 100644 --- a/server/channels/api4/plugin.go +++ b/server/channels/api4/plugin.go @@ -297,7 +297,7 @@ func getMarketplacePlugins(c *Context, w http.ResponseWriter, r *http.Request) { return } - plugins, appErr := c.App.GetMarketplacePlugins(filter) + plugins, appErr := c.App.GetMarketplacePlugins(c.AppContext, filter) if appErr != nil { c.Err = appErr return diff --git a/server/channels/api4/post.go b/server/channels/api4/post.go index db5dd065fc1..8371e9add9d 100644 --- a/server/channels/api4/post.go +++ b/server/channels/api4/post.go @@ -1005,7 +1005,7 @@ func setPostReminder(c *Context, w http.ResponseWriter, r *http.Request) { return } - appErr := c.App.SetPostReminder(c.Params.PostId, c.Params.UserId, reminder.TargetTime) + appErr := c.App.SetPostReminder(c.AppContext, c.Params.PostId, c.Params.UserId, reminder.TargetTime) if appErr != nil { c.Err = appErr return diff --git a/server/channels/api4/team.go b/server/channels/api4/team.go index 402a531eb46..9d0e2c831e2 100644 --- a/server/channels/api4/team.go +++ b/server/channels/api4/team.go @@ -1412,7 +1412,7 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) { var invitesWithError []*model.EmailInviteWithError var appErr *model.AppError if emailList != nil { - invitesWithError, appErr = c.App.InviteNewUsersToTeamGracefully(memberInvite, c.Params.TeamId, c.AppContext.Session().UserId, "") + invitesWithError, appErr = c.App.InviteNewUsersToTeamGracefully(c.AppContext, memberInvite, c.Params.TeamId, c.AppContext.Session().UserId, "") } if invitesWithError != nil { @@ -1458,7 +1458,7 @@ func inviteUsersToTeam(c *Context, w http.ResponseWriter, r *http.Request) { w.Write(js) } else { - appErr := c.App.InviteNewUsersToTeam(emailList, c.Params.TeamId, c.AppContext.Session().UserId) + appErr := c.App.InviteNewUsersToTeam(c.AppContext, emailList, c.Params.TeamId, c.AppContext.Session().UserId) if appErr != nil { c.Err = appErr return @@ -1528,7 +1528,7 @@ func inviteGuestsToChannels(c *Context, w http.ResponseWriter, r *http.Request) var appErr *model.AppError if guestsInvite.Emails != nil { - invitesWithError, appErr = c.App.InviteGuestsToChannelsGracefully(c.Params.TeamId, &guestsInvite, c.AppContext.Session().UserId) + invitesWithError, appErr = c.App.InviteGuestsToChannelsGracefully(c.AppContext, c.Params.TeamId, &guestsInvite, c.AppContext.Session().UserId) } if appErr != nil { @@ -1549,7 +1549,7 @@ func inviteGuestsToChannels(c *Context, w http.ResponseWriter, r *http.Request) w.Write(js) } else { - appErr := c.App.InviteGuestsToChannels(c.Params.TeamId, &guestsInvite, c.AppContext.Session().UserId) + appErr := c.App.InviteGuestsToChannels(c.AppContext, c.Params.TeamId, &guestsInvite, c.AppContext.Session().UserId) if appErr != nil { c.Err = appErr return diff --git a/server/channels/api4/team_test.go b/server/channels/api4/team_test.go index 64ab518786c..69ba06f0204 100644 --- a/server/channels/api4/team_test.go +++ b/server/channels/api4/team_test.go @@ -3534,30 +3534,30 @@ func TestInviteGuestsToTeam(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.TeamSettings.RestrictCreationToDomains = "@global.com,@common.com" }) t.Run("team domain restrictions should not affect inviting guests", func(t *testing.T) { - err := th.App.InviteGuestsToChannels(th.BasicTeam.Id, &model.GuestsInvite{Emails: emailList, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) + err := th.App.InviteGuestsToChannels(th.Context, th.BasicTeam.Id, &model.GuestsInvite{Emails: emailList, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) require.Nil(t, err, "guest user invites should not be affected by team restrictions") }) t.Run("guest restrictions should affect guest users", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.GuestAccountsSettings.RestrictCreationToDomains = "@guest.com" }) - err := th.App.InviteGuestsToChannels(th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@invalid.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) + err := th.App.InviteGuestsToChannels(th.Context, th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@invalid.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) require.NotNil(t, err, "guest user invites should be affected by the guest domain restrictions") - res, err := th.App.InviteGuestsToChannelsGracefully(th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@invalid.com", "guest1@guest.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) + res, err := th.App.InviteGuestsToChannelsGracefully(th.Context, th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@invalid.com", "guest1@guest.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) require.Nil(t, err) require.Len(t, res, 2) require.NotNil(t, res[0].Error) require.Nil(t, res[1].Error) - err = th.App.InviteGuestsToChannels(th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@guest.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) + err = th.App.InviteGuestsToChannels(th.Context, th.BasicTeam.Id, &model.GuestsInvite{Emails: []string{"guest1@guest.com"}, Channels: []string{th.BasicChannel.Id}, Message: "test message"}, th.BasicUser.Id) require.Nil(t, err, "whitelisted guest user email should be allowed by the guest domain restrictions") }) t.Run("guest restrictions should not affect inviting new team members", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.GuestAccountsSettings.RestrictCreationToDomains = "@guest.com" }) - err := th.App.InviteNewUsersToTeam([]string{"user@global.com"}, th.BasicTeam.Id, th.BasicUser.Id) + err := th.App.InviteNewUsersToTeam(th.Context, []string{"user@global.com"}, th.BasicTeam.Id, th.BasicUser.Id) require.Nil(t, err, "non guest user invites should not be affected by the guest domain restrictions") }) @@ -3576,12 +3576,12 @@ func TestInviteGuestsToTeam(t *testing.T) { Channels: []string{th.BasicChannel.Id}, Message: "test message", } - err = th.App.InviteGuestsToChannels(th.BasicTeam.Id, invite, th.BasicUser.Id) + err = th.App.InviteGuestsToChannels(th.Context, th.BasicTeam.Id, invite, th.BasicUser.Id) require.NotNil(t, err) assert.Equal(t, "app.email.rate_limit_exceeded.app_error", err.Id) assert.Equal(t, http.StatusRequestEntityTooLarge, err.StatusCode) - _, appErr := th.App.InviteGuestsToChannelsGracefully(th.BasicTeam.Id, invite, th.BasicUser.Id) + _, appErr := th.App.InviteGuestsToChannelsGracefully(th.Context, th.BasicTeam.Id, invite, th.BasicUser.Id) require.NotNil(t, appErr) assert.Equal(t, "app.email.rate_limit_exceeded.app_error", err.Id) assert.Equal(t, http.StatusRequestEntityTooLarge, err.StatusCode) diff --git a/server/channels/api4/user.go b/server/channels/api4/user.go index 6cb4d920e3e..af0c66b9dff 100644 --- a/server/channels/api4/user.go +++ b/server/channels/api4/user.go @@ -1798,7 +1798,7 @@ func sendPasswordReset(c *Context, w http.ResponseWriter, r *http.Request) { defer c.LogAuditRec(auditRec) audit.AddEventParameter(auditRec, "email", email) - sent, err := c.App.SendPasswordReset(email, c.App.GetSiteURL()) + sent, err := c.App.SendPasswordReset(c.AppContext, email, c.App.GetSiteURL()) if err != nil { if *c.App.Config().ServiceSettings.ExperimentalEnableHardenedMode { ReturnStatusOK(w) @@ -2452,7 +2452,7 @@ func createUserAccessToken(c *Context, w http.ResponseWriter, r *http.Request) { accessToken.UserId = c.Params.UserId accessToken.Token = "" - token, err := c.App.CreateUserAccessToken(&accessToken) + token, err := c.App.CreateUserAccessToken(c.AppContext, &accessToken) if err != nil { c.Err = err return diff --git a/server/channels/app/app_iface.go b/server/channels/app/app_iface.go index b89f743f6dc..631f7b3ae49 100644 --- a/server/channels/app/app_iface.go +++ b/server/channels/app/app_iface.go @@ -205,7 +205,7 @@ type AppIface interface { GetLdapGroup(rctx request.CTX, ldapGroupID string) (*model.Group, *model.AppError) // GetMarketplacePlugins returns a list of plugins from the marketplace-server, // and plugins that are installed locally. - GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) + GetMarketplacePlugins(rctx request.CTX, filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) // GetPluginStatus returns the status for a plugin installed on this server. GetPluginStatus(id string) (*model.PluginStatus, *model.AppError) // GetPluginStatuses returns the status for plugins installed on this server. @@ -472,7 +472,7 @@ type AppIface interface { BulkExport(ctx request.CTX, writer io.Writer, outPath string, job *model.Job, opts model.BulkExportOpts) *model.AppError BulkImport(c request.CTX, jsonlReader io.Reader, attachmentsReader *zip.Reader, dryRun bool, workers int) (*model.AppError, int) BulkImportWithPath(c request.CTX, jsonlReader io.Reader, attachmentsReader *zip.Reader, dryRun, extractContent bool, workers int, importPath string) (*model.AppError, int) - CanNotifyAdmin(trial bool) bool + CanNotifyAdmin(rctx request.CTX, trial bool) bool CancelJob(c request.CTX, jobId string) *model.AppError ChannelMembersToRemove(teamID *string) ([]*model.ChannelMember, *model.AppError) Channels() *Channels @@ -500,7 +500,7 @@ type AppIface interface { ClientConfigHash() string Cloud() einterfaces.CloudInterface Cluster() einterfaces.ClusterInterface - CompareAndDeletePluginKey(pluginID string, key string, oldValue []byte) (bool, *model.AppError) + CompareAndDeletePluginKey(rctx request.CTX, pluginID string, key string, oldValue []byte) (bool, *model.AppError) CompareAndSetPluginKey(pluginID string, key string, oldValue, newValue []byte) (bool, *model.AppError) CompileReportChunks(format string, prefix string, numberOfChunks int, headers []string) *model.AppError CompleteOAuth(c request.CTX, service string, body io.ReadCloser, teamID string, props map[string]string, tokenUser *model.User) (*model.User, *model.AppError) @@ -529,7 +529,7 @@ type AppIface interface { CreateOAuthStateToken(extra string) (*model.Token, *model.AppError) CreateOAuthUser(c request.CTX, service string, userData io.Reader, teamID string, tokenUser *model.User) (*model.User, *model.AppError) CreateOutgoingWebhook(hook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError) - CreatePasswordRecoveryToken(userID, email string) (*model.Token, *model.AppError) + CreatePasswordRecoveryToken(rctx request.CTX, userID, email string) (*model.Token, *model.AppError) CreatePost(c request.CTX, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError) CreatePostAsUser(c request.CTX, post *model.Post, currentSessionId string, setOnline bool) (*model.Post, *model.AppError) CreatePostMissingChannel(c request.CTX, post *model.Post, triggerWebhooks bool, setOnline bool) (*model.Post, *model.AppError) @@ -543,7 +543,7 @@ type AppIface interface { CreateTeamWithUser(c request.CTX, team *model.Team, userID string) (*model.Team, *model.AppError) CreateTermsOfService(text, userID string) (*model.TermsOfService, *model.AppError) CreateUploadSession(c request.CTX, us *model.UploadSession) (*model.UploadSession, *model.AppError) - CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) + CreateUserAccessToken(rctx request.CTX, token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) CreateUserAsAdmin(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) CreateUserFromSignup(c request.CTX, user *model.User, redirect string) (*model.User, *model.AppError) CreateUserWithInviteId(c request.CTX, user *model.User, inviteId, redirect string) (*model.User, *model.AppError) @@ -564,14 +564,14 @@ type AppIface interface { DeleteCommand(commandID string) *model.AppError DeleteDraft(rctx request.CTX, draft *model.Draft, connectionID string) *model.AppError DeleteEmoji(c request.CTX, emoji *model.Emoji) *model.AppError - DeleteEphemeralPost(userID, postID string) + DeleteEphemeralPost(rctx request.CTX, userID, postID string) DeleteExport(name string) *model.AppError DeleteGroup(groupID string) (*model.Group, *model.AppError) DeleteGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError) DeleteGroupMembers(groupID string, userIDs []string) ([]*model.GroupMember, *model.AppError) DeleteGroupSyncable(groupID string, syncableID string, syncableType model.GroupSyncableType) (*model.GroupSyncable, *model.AppError) DeleteIncomingWebhook(hookID string) *model.AppError - DeleteOAuthApp(appID string) *model.AppError + DeleteOAuthApp(rctx request.CTX, appID string) *model.AppError DeleteOutgoingWebhook(hookID string) *model.AppError DeletePluginKey(pluginID string, key string) *model.AppError DeletePost(c request.CTX, postID, deleteByID string) (*model.Post, *model.AppError) @@ -613,7 +613,7 @@ type AppIface interface { FillInChannelsProps(c request.CTX, channelList model.ChannelList) *model.AppError FilterUsersByVisible(c request.CTX, viewer *model.User, otherUsers []*model.User) ([]*model.User, *model.AppError) FindTeamByName(name string) bool - FinishSendAdminNotifyPost(trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) + FinishSendAdminNotifyPost(rctx request.CTX, trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) GenerateAndSaveDesktopToken(createAt int64, user *model.User) (*string, *model.AppError) GenerateMfaSecret(userID string) (*model.MfaSecret, *model.AppError) GeneratePresignURLForExport(name string) (*model.PresignURLResponse, *model.AppError) @@ -747,7 +747,7 @@ type AppIface interface { GetOnboarding() (*model.System, *model.AppError) GetOpenGraphMetadata(requestURL string) ([]byte, error) GetOrCreateDirectChannel(c request.CTX, userID, otherUserID string, channelOptions ...model.ChannelOption) (*model.Channel, *model.AppError) - GetOrCreateTrueUpReviewStatus() (*model.TrueUpReviewStatus, *model.AppError) + GetOrCreateTrueUpReviewStatus(rctx request.CTX) (*model.TrueUpReviewStatus, *model.AppError) GetOutgoingWebhook(hookID string) (*model.OutgoingWebhook, *model.AppError) GetOutgoingWebhooksForChannelPageByUser(channelID string, userID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) GetOutgoingWebhooksForTeamPage(teamID string, page, perPage int) ([]*model.OutgoingWebhook, *model.AppError) @@ -830,7 +830,7 @@ type AppIface interface { GetTeamByInviteId(inviteId string) (*model.Team, *model.AppError) GetTeamByName(name string) (*model.Team, *model.AppError) GetTeamIcon(team *model.Team) ([]byte, *model.AppError) - GetTeamIdFromQuery(query url.Values) (string, *model.AppError) + GetTeamIdFromQuery(rctx request.CTX, query url.Values) (string, *model.AppError) GetTeamMember(c request.CTX, teamID, userID string) (*model.TeamMember, *model.AppError) GetTeamMembers(teamID string, offset int, limit int, teamMembersGetOptions *model.TeamMembersGetOptions) ([]*model.TeamMember, *model.AppError) GetTeamMembersByIds(teamID string, userIDs []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) @@ -921,10 +921,10 @@ type AppIface interface { InvalidateAllResendInviteEmailJobs(c request.CTX) *model.AppError InvalidateCacheForUser(userID string) InvalidatePasswordRecoveryTokensForUser(userID string) *model.AppError - InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError - InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) - InviteNewUsersToTeam(emailList []string, teamID, senderId string) *model.AppError - InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) + InviteGuestsToChannels(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError + InviteGuestsToChannelsGracefully(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) + InviteNewUsersToTeam(rctx request.CTX, emailList []string, teamID, senderId string) *model.AppError + InviteNewUsersToTeamGracefully(rctx request.CTX, memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) InviteRemoteToChannel(channelID, remoteID, userID string, shareIfNotShared bool) error IsCRTEnabledForUser(c request.CTX, userID string) bool IsConfigReadOnly() bool @@ -1007,7 +1007,7 @@ type AppIface interface { RegenerateOAuthAppSecret(app *model.OAuthApp) (*model.OAuthApp, *model.AppError) RegenerateTeamInviteId(teamID string) (*model.Team, *model.AppError) RegisterPluginCommand(pluginID string, command *model.Command) error - RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (remoteID string, err error) + RegisterPluginForSharedChannels(rctx request.CTX, opts model.RegisterPluginOpts) (remoteID string, err error) ReloadConfig() error RemoveAllDeactivatedMembersFromChannel(c request.CTX, channel *model.Channel) *model.AppError RemoveChannelsFromRetentionPolicy(policyID string, channelIDs []string) *model.AppError @@ -1088,7 +1088,7 @@ type AppIface interface { SendIPFiltersChangedEmail(c request.CTX, userID string) error SendNotifications(c request.CTX, post *model.Post, team *model.Team, channel *model.Channel, sender *model.User, parentPostList *model.PostList, setOnline bool) ([]string, error) SendNotifyAdminPosts(c request.CTX, workspaceName string, currentSKU string, trial bool) *model.AppError - SendPasswordReset(email string, siteURL string) (bool, *model.AppError) + SendPasswordReset(rctx request.CTX, email string, siteURL string) (bool, *model.AppError) SendPersistentNotifications() error SendReportToUser(rctx request.CTX, job *model.Job, format string) *model.AppError SendTestPushNotification(deviceID string) string @@ -1114,7 +1114,7 @@ type AppIface interface { SetPluginKey(pluginID string, key string, value []byte) *model.AppError SetPluginKeyWithExpiry(pluginID string, key string, value []byte, expireInSeconds int64) *model.AppError SetPluginKeyWithOptions(pluginID string, key string, value []byte, options model.PluginKVSetOptions) (bool, *model.AppError) - SetPostReminder(postID, userID string, targetTime int64) *model.AppError + SetPostReminder(rctx request.CTX, postID, userID string, targetTime int64) *model.AppError SetProfileImage(c request.CTX, userID string, imageData *multipart.FileHeader) *model.AppError SetProfileImageFromFile(c request.CTX, userID string, file io.Reader) *model.AppError SetProfileImageFromMultiPartFile(c request.CTX, userID string, file multipart.File) *model.AppError @@ -1217,7 +1217,7 @@ type AppIface interface { UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError) UserAlreadyNotifiedOnRequiredFeature(user string, feature model.MattermostFeature) bool UserCanSeeOtherUser(c request.CTX, userID string, otherUserId string) (bool, *model.AppError) - UserIsFirstAdmin(user *model.User) bool + UserIsFirstAdmin(rctx request.CTX, user *model.User) bool ValidateDesktopToken(token string, expiryTime int64) (*model.User, *model.AppError) VerifyEmailFromToken(c request.CTX, userSuppliedTokenString string) *model.AppError VerifyUserEmail(userID, email string) *model.AppError diff --git a/server/channels/app/command_autocomplete.go b/server/channels/app/command_autocomplete.go index 6d102238c89..17eee0958d4 100644 --- a/server/channels/app/command_autocomplete.go +++ b/server/channels/app/command_autocomplete.go @@ -245,7 +245,7 @@ func (a *App) getDynamicListArgument(c request.CTX, commandArgs *model.CommandAr if strings.HasPrefix(dynamicArg.FetchURL, "builtin:") { listItems, err := a.getBuiltinDynamicListArgument(c, commandArgs, arg, parsed, toBeParsed) if err != nil { - a.Log().Error("Can't fetch dynamic list arguments for", mlog.String("url", dynamicArg.FetchURL), mlog.Err(err)) + c.Logger().Error("Can't fetch dynamic list arguments for", mlog.String("url", dynamicArg.FetchURL), mlog.Err(err)) return false, parsed, toBeParsed, []model.AutocompleteSuggestion{} } return parseListItems(listItems, parsed, toBeParsed) @@ -274,7 +274,7 @@ func (a *App) getDynamicListArgument(c request.CTX, commandArgs *model.CommandAr resp, err := a.doPluginRequest(c, "GET", dynamicArg.FetchURL, params, nil) if err != nil { - a.Log().Error("Can't fetch dynamic list arguments for", mlog.String("url", dynamicArg.FetchURL), mlog.Err(err)) + c.Logger().Error("Can't fetch dynamic list arguments for", mlog.String("url", dynamicArg.FetchURL), mlog.Err(err)) return false, parsed, toBeParsed, []model.AutocompleteSuggestion{} } diff --git a/server/channels/app/email_test.go b/server/channels/app/email_test.go index 7995b7e7acd..7b529cdd919 100644 --- a/server/channels/app/email_test.go +++ b/server/channels/app/email_test.go @@ -31,12 +31,12 @@ func TestSendInviteEmailRateLimits(t *testing.T) { for i := 0; i < 22; i++ { memberInvite.Emails[i] = "test-" + strconv.Itoa(i) + "@common.com" } - err = th.App.InviteNewUsersToTeam(memberInvite.Emails, th.BasicTeam.Id, th.BasicUser.Id) + err = th.App.InviteNewUsersToTeam(th.Context, memberInvite.Emails, th.BasicTeam.Id, th.BasicUser.Id) require.NotNil(t, err) assert.Equal(t, "app.email.rate_limit_exceeded.app_error", err.Id) assert.Equal(t, http.StatusRequestEntityTooLarge, err.StatusCode) - _, err = th.App.InviteNewUsersToTeamGracefully(memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") + _, err = th.App.InviteNewUsersToTeamGracefully(th.Context, memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") require.NotNil(t, err) assert.Equal(t, "app.email.rate_limit_exceeded.app_error", err.Id) assert.Equal(t, http.StatusRequestEntityTooLarge, err.StatusCode) diff --git a/server/channels/app/notification.go b/server/channels/app/notification.go index 5d8b989a5bb..9f1b7793dc8 100644 --- a/server/channels/app/notification.go +++ b/server/channels/app/notification.go @@ -412,7 +412,7 @@ func (a *App) SendNotifications(c request.CTX, post *model.Post, team *model.Tea if a.userAllowsEmail(c, profileMap[id], channelMemberNotifyPropsMap[id], post) { senderProfileImage, _, err := a.GetProfileImage(sender) if err != nil { - a.Log().Warn("Unable to get the sender user profile image.", mlog.String("user_id", sender.Id), mlog.Err(err)) + c.Logger().Warn("Unable to get the sender user profile image.", mlog.String("user_id", sender.Id), mlog.Err(err)) } if err := a.sendNotificationEmail(c, notification, profileMap[id], team, senderProfileImage); err != nil { a.CountNotificationReason(model.NotificationStatusError, model.NotificationTypeEmail, model.NotificationReasonEmailSendError) diff --git a/server/channels/app/notification_push.go b/server/channels/app/notification_push.go index 30cede7687c..da4220dcea9 100644 --- a/server/channels/app/notification_push.go +++ b/server/channels/app/notification_push.go @@ -77,16 +77,16 @@ func (a *App) sendPushNotificationSync(c request.CTX, post *model.Post, user *mo return appErr } - return a.sendPushNotificationToAllSessions(msg, user.Id, "") + return a.sendPushNotificationToAllSessions(c, msg, user.Id, "") } -func (a *App) sendPushNotificationToAllSessions(msg *model.PushNotification, userID string, skipSessionId string) *model.AppError { +func (a *App) sendPushNotificationToAllSessions(rctx request.CTX, msg *model.PushNotification, userID string, skipSessionId string) *model.AppError { rejectionReason := "" a.ch.RunMultiHook(func(hooks plugin.Hooks) bool { var replacementNotification *model.PushNotification replacementNotification, rejectionReason = hooks.NotificationWillBePushed(msg, userID) if rejectionReason != "" { - mlog.Info("Notification cancelled by plugin.", mlog.String("rejection reason", rejectionReason)) + rctx.Logger().Info("Notification cancelled by plugin.", mlog.String("rejection reason", rejectionReason)) return false } if replacementNotification != nil { @@ -311,7 +311,7 @@ func (a *App) clearPushNotificationSync(c request.CTX, currentSessionId, userID, IsCRTEnabled: isCRTEnabled, } - return a.sendPushNotificationToAllSessions(msg, userID, currentSessionId) + return a.sendPushNotificationToAllSessions(c, msg, userID, currentSessionId) } func (a *App) clearPushNotification(currentSessionId, userID, channelID, rootID string) { @@ -341,7 +341,7 @@ func (a *App) updateMobileAppBadgeSync(c request.CTX, userID string) *model.AppE ContentAvailable: 1, Badge: badgeCount, } - return a.sendPushNotificationToAllSessions(msg, userID, "") + return a.sendPushNotificationToAllSessions(c, msg, userID, "") } func (a *App) UpdateMobileAppBadge(userID string) { diff --git a/server/channels/app/notification_push_test.go b/server/channels/app/notification_push_test.go index bce213904a4..7213aa99a9d 100644 --- a/server/channels/app/notification_push_test.go +++ b/server/channels/app/notification_push_test.go @@ -1077,11 +1077,11 @@ func TestSendPushNotifications(t *testing.T) { require.Nil(t, err) t.Run("should return error if data is not valid or nil", func(t *testing.T) { - err := th.App.sendPushNotificationToAllSessions(nil, th.BasicUser.Id, "") + err := th.App.sendPushNotificationToAllSessions(th.Context, nil, th.BasicUser.Id, "") require.NotNil(t, err) assert.Equal(t, "api.push_notifications.message.parse.app_error", err.Id) // Errors derived of using an empty object are handled internally through the notifications log - err = th.App.sendPushNotificationToAllSessions(&model.PushNotification{}, th.BasicUser.Id, "") + err = th.App.sendPushNotificationToAllSessions(th.Context, &model.PushNotification{}, th.BasicUser.Id, "") require.Nil(t, err) }) } diff --git a/server/channels/app/notify_admin.go b/server/channels/app/notify_admin.go index 73d0242ef97..bdf632ea4a1 100644 --- a/server/channels/app/notify_admin.go +++ b/server/channels/app/notify_admin.go @@ -84,7 +84,7 @@ func filterNotificationData(data []*model.NotifyAdminData, test func(*model.Noti } func (a *App) SendNotifyAdminPosts(c request.CTX, workspaceName string, currentSKU string, trial bool) *model.AppError { - if !a.CanNotifyAdmin(trial) { + if !a.CanNotifyAdmin(c, trial) { return model.NewAppError("SendNotifyAdminPosts", "app.notify_admin.send_notification_post.app_error", nil, "Cannot notify yet", http.StatusForbidden) } @@ -113,7 +113,7 @@ func (a *App) SendNotifyAdminPosts(c request.CTX, workspaceName string, currentS data = filterNotificationData(data, func(nad *model.NotifyAdminData) bool { return nad.RequiredPlan != currentSKU }) if len(data) == 0 { - a.Log().Warn("No notification data available") + c.Logger().Warn("No notification data available") return nil } @@ -131,7 +131,7 @@ func (a *App) SendNotifyAdminPosts(c request.CTX, workspaceName string, currentS } } - a.FinishSendAdminNotifyPost(trial, now, pluginBasedData) + a.FinishSendAdminNotifyPost(c, trial, now, pluginBasedData) return nil } @@ -140,7 +140,7 @@ func (a *App) pluginInstallAdminNotifyPost(c request.CTX, userBasedData map[stri channel, appErr := a.GetOrCreateDirectChannel(c, systemBot.UserId, admin.Id) if appErr != nil { - a.Log().Warn("Error getting direct channel", mlog.Err(appErr)) + c.Logger().Warn("Error getting direct channel", mlog.Err(appErr)) return } @@ -156,7 +156,7 @@ func (a *App) pluginInstallAdminNotifyPost(c request.CTX, userBasedData map[stri _, appErr = a.CreatePost(c, post, channel, false, true) if appErr != nil { - a.Log().Warn("Error creating post", mlog.Err(appErr)) + c.Logger().Warn("Error creating post", mlog.Err(appErr)) } } @@ -177,7 +177,7 @@ func (a *App) upgradePlanAdminNotifyPost(c request.CTX, workspaceName string, us channel, appErr := a.GetOrCreateDirectChannel(c, systemBot.UserId, admin.Id) if appErr != nil { - a.Log().Warn("Error getting direct channel", mlog.Err(appErr)) + c.Logger().Warn("Error getting direct channel", mlog.Err(appErr)) return } @@ -196,7 +196,7 @@ func (a *App) upgradePlanAdminNotifyPost(c request.CTX, workspaceName string, us _, appErr = a.CreatePost(c, post, channel, false, true) if appErr != nil { - a.Log().Warn("Error creating post", mlog.Err(appErr)) + c.Logger().Warn("Error creating post", mlog.Err(appErr)) } } @@ -212,7 +212,7 @@ func (a *App) UserAlreadyNotifiedOnRequiredFeature(user string, feature model.Ma return false } -func (a *App) CanNotifyAdmin(trial bool) bool { +func (a *App) CanNotifyAdmin(rctx request.CTX, trial bool) bool { systemVarName := lastUpgradeNotificationTimeStamp if trial { systemVarName = lastTrialNotificationTimeStamp @@ -224,13 +224,13 @@ func (a *App) CanNotifyAdmin(trial bool) bool { if errors.As(sysValErr, &nfErr) { // if no timestamps have been recorded before, system is free to notify return true } - a.Log().Error("Cannot notify", mlog.Err(sysValErr)) + rctx.Logger().Error("Cannot notify", mlog.Err(sysValErr)) return false } lastNotificationTimestamp, err := strconv.ParseFloat(sysVal.Value, 64) if err != nil { - a.Log().Error("Cannot notify", mlog.Err(err)) + rctx.Logger().Error("Cannot notify", mlog.Err(err)) return false } @@ -244,7 +244,7 @@ func (a *App) CanNotifyAdmin(trial bool) bool { return timeDiff >= int64(daysToMillis) } -func (a *App) FinishSendAdminNotifyPost(trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) { +func (a *App) FinishSendAdminNotifyPost(rctx request.CTX, trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) { systemVarName := lastUpgradeNotificationTimeStamp if trial { systemVarName = lastTrialNotificationTimeStamp @@ -253,7 +253,7 @@ func (a *App) FinishSendAdminNotifyPost(trial bool, now int64, pluginBasedData m val := strconv.FormatInt(model.GetMillis(), 10) sysVar := &model.System{Name: systemVarName, Value: val} if err := a.Srv().Store().System().SaveOrUpdate(sysVar); err != nil { - a.Log().Error("Unable to finish send admin notify post job", mlog.Err(err)) + rctx.Logger().Error("Unable to finish send admin notify post job", mlog.Err(err)) } // All the requested features notifications are now sent in a post and can safely be removed except @@ -266,13 +266,13 @@ func (a *App) FinishSendAdminNotifyPost(trial bool, now int64, pluginBasedData m requiredPlan := notification.RequiredPlan userId := notification.UserId if err := a.Srv().Store().NotifyAdmin().Update(userId, requiredPlan, requiredFeature, now); err != nil { - a.Log().Error("Unable to update SentAt for work template feature", mlog.Err(err)) + rctx.Logger().Error("Unable to update SentAt for work template feature", mlog.Err(err)) } } } if err := a.Srv().Store().NotifyAdmin().DeleteBefore(trial, now); err != nil { - a.Log().Error("Unable to finish send admin notify post job", mlog.Err(err)) + rctx.Logger().Error("Unable to finish send admin notify post job", mlog.Err(err)) } } diff --git a/server/channels/app/oauth.go b/server/channels/app/oauth.go index 7b11d4b3848..dd9d6d075ac 100644 --- a/server/channels/app/oauth.go +++ b/server/channels/app/oauth.go @@ -104,7 +104,7 @@ func (a *App) UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthAp return oauthApp, nil } -func (a *App) DeleteOAuthApp(appID string) *model.AppError { +func (a *App) DeleteOAuthApp(rctx request.CTX, appID string) *model.AppError { if !*a.Config().ServiceSettings.EnableOAuthServiceProvider { return model.NewAppError("DeleteOAuthApp", "api.oauth.allow_oauth.turn_off.app_error", nil, "", http.StatusNotImplemented) } @@ -114,7 +114,7 @@ func (a *App) DeleteOAuthApp(appID string) *model.AppError { } if err := a.Srv().InvalidateAllCaches(); err != nil { - mlog.Warn("error in invalidating cache", mlog.Err(err)) + rctx.Logger().Warn("error in invalidating cache", mlog.Err(err)) } return nil diff --git a/server/channels/app/oauth_test.go b/server/channels/app/oauth_test.go index 0afc6eff572..588aac422d5 100644 --- a/server/channels/app/oauth_test.go +++ b/server/channels/app/oauth_test.go @@ -128,7 +128,7 @@ func TestOAuthDeleteApp(t *testing.T) { _, nErr := th.App.Srv().Store().OAuth().SaveAccessData(accessData) require.NoError(t, nErr) - err = th.App.DeleteOAuthApp(a1.Id) + err = th.App.DeleteOAuthApp(th.Context, a1.Id) require.Nil(t, err) _, err = th.App.GetSession(session.Token) diff --git a/server/channels/app/onboarding.go b/server/channels/app/onboarding.go index 26f7a9cef4a..408422cafb5 100644 --- a/server/channels/app/onboarding.go +++ b/server/channels/app/onboarding.go @@ -41,7 +41,7 @@ func (a *App) CompleteOnboarding(c request.CTX, request *model.CompleteOnboardin Value: request.Organization, }) if err != nil { - a.Log().Error("failed to save organization name", mlog.Err(err)) + c.Logger().Error("failed to save organization name", mlog.Err(err)) } } diff --git a/server/channels/app/opentracing/opentracing_layer.go b/server/channels/app/opentracing/opentracing_layer.go index 35ee258e90b..880ff19f4e8 100644 --- a/server/channels/app/opentracing/opentracing_layer.go +++ b/server/channels/app/opentracing/opentracing_layer.go @@ -1074,7 +1074,7 @@ func (a *OpenTracingAppLayer) BulkImportWithPath(c request.CTX, jsonlReader io.R return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) CanNotifyAdmin(trial bool) bool { +func (a *OpenTracingAppLayer) CanNotifyAdmin(rctx request.CTX, trial bool) bool { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CanNotifyAdmin") @@ -1086,7 +1086,7 @@ func (a *OpenTracingAppLayer) CanNotifyAdmin(trial bool) bool { }() defer span.Finish() - resultVar0 := a.app.CanNotifyAdmin(trial) + resultVar0 := a.app.CanNotifyAdmin(rctx, trial) return resultVar0 } @@ -1664,7 +1664,7 @@ func (a *OpenTracingAppLayer) CommandsForTeam(teamID string) []*model.Command { return resultVar0 } -func (a *OpenTracingAppLayer) CompareAndDeletePluginKey(pluginID string, key string, oldValue []byte) (bool, *model.AppError) { +func (a *OpenTracingAppLayer) CompareAndDeletePluginKey(rctx request.CTX, pluginID string, key string, oldValue []byte) (bool, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CompareAndDeletePluginKey") @@ -1676,7 +1676,7 @@ func (a *OpenTracingAppLayer) CompareAndDeletePluginKey(pluginID string, key str }() defer span.Finish() - resultVar0, resultVar1 := a.app.CompareAndDeletePluginKey(pluginID, key, oldValue) + resultVar0, resultVar1 := a.app.CompareAndDeletePluginKey(rctx, pluginID, key, oldValue) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -2456,7 +2456,7 @@ func (a *OpenTracingAppLayer) CreateOutgoingWebhook(hook *model.OutgoingWebhook) return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) CreatePasswordRecoveryToken(userID string, email string) (*model.Token, *model.AppError) { +func (a *OpenTracingAppLayer) CreatePasswordRecoveryToken(rctx request.CTX, userID string, email string) (*model.Token, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreatePasswordRecoveryToken") @@ -2468,7 +2468,7 @@ func (a *OpenTracingAppLayer) CreatePasswordRecoveryToken(userID string, email s }() defer span.Finish() - resultVar0, resultVar1 := a.app.CreatePasswordRecoveryToken(userID, email) + resultVar0, resultVar1 := a.app.CreatePasswordRecoveryToken(rctx, userID, email) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -2786,7 +2786,7 @@ func (a *OpenTracingAppLayer) CreateUser(c request.CTX, user *model.User) (*mode return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) { +func (a *OpenTracingAppLayer) CreateUserAccessToken(rctx request.CTX, token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateUserAccessToken") @@ -2798,7 +2798,7 @@ func (a *OpenTracingAppLayer) CreateUserAccessToken(token *model.UserAccessToken }() defer span.Finish() - resultVar0, resultVar1 := a.app.CreateUserAccessToken(token) + resultVar0, resultVar1 := a.app.CreateUserAccessToken(rctx, token) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -3287,7 +3287,7 @@ func (a *OpenTracingAppLayer) DeleteEmoji(c request.CTX, emoji *model.Emoji) *mo return resultVar0 } -func (a *OpenTracingAppLayer) DeleteEphemeralPost(userID string, postID string) { +func (a *OpenTracingAppLayer) DeleteEphemeralPost(rctx request.CTX, userID string, postID string) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DeleteEphemeralPost") @@ -3299,7 +3299,7 @@ func (a *OpenTracingAppLayer) DeleteEphemeralPost(userID string, postID string) }() defer span.Finish() - a.app.DeleteEphemeralPost(userID, postID) + a.app.DeleteEphemeralPost(rctx, userID, postID) } func (a *OpenTracingAppLayer) DeleteExport(name string) *model.AppError { @@ -3456,7 +3456,7 @@ func (a *OpenTracingAppLayer) DeleteIncomingWebhook(hookID string) *model.AppErr return resultVar0 } -func (a *OpenTracingAppLayer) DeleteOAuthApp(appID string) *model.AppError { +func (a *OpenTracingAppLayer) DeleteOAuthApp(rctx request.CTX, appID string) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DeleteOAuthApp") @@ -3468,7 +3468,7 @@ func (a *OpenTracingAppLayer) DeleteOAuthApp(appID string) *model.AppError { }() defer span.Finish() - resultVar0 := a.app.DeleteOAuthApp(appID) + resultVar0 := a.app.DeleteOAuthApp(rctx, appID) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) @@ -4718,7 +4718,7 @@ func (a *OpenTracingAppLayer) FindTeamByName(name string) bool { return resultVar0 } -func (a *OpenTracingAppLayer) FinishSendAdminNotifyPost(trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) { +func (a *OpenTracingAppLayer) FinishSendAdminNotifyPost(rctx request.CTX, trial bool, now int64, pluginBasedData map[string][]*model.NotifyAdminData) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.FinishSendAdminNotifyPost") @@ -4730,7 +4730,7 @@ func (a *OpenTracingAppLayer) FinishSendAdminNotifyPost(trial bool, now int64, p }() defer span.Finish() - a.app.FinishSendAdminNotifyPost(trial, now, pluginBasedData) + a.app.FinishSendAdminNotifyPost(rctx, trial, now, pluginBasedData) } func (a *OpenTracingAppLayer) GenerateAndSaveDesktopToken(createAt int64, user *model.User) (*string, *model.AppError) { @@ -7558,7 +7558,7 @@ func (a *OpenTracingAppLayer) GetLogsSkipSend(rctx request.CTX, page int, perPag return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { +func (a *OpenTracingAppLayer) GetMarketplacePlugins(rctx request.CTX, filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetMarketplacePlugins") @@ -7570,7 +7570,7 @@ func (a *OpenTracingAppLayer) GetMarketplacePlugins(filter *model.MarketplacePlu }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetMarketplacePlugins(filter) + resultVar0, resultVar1 := a.app.GetMarketplacePlugins(rctx, filter) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -8005,7 +8005,7 @@ func (a *OpenTracingAppLayer) GetOrCreateDirectChannel(c request.CTX, userID str return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetOrCreateTrueUpReviewStatus() (*model.TrueUpReviewStatus, *model.AppError) { +func (a *OpenTracingAppLayer) GetOrCreateTrueUpReviewStatus(rctx request.CTX) (*model.TrueUpReviewStatus, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetOrCreateTrueUpReviewStatus") @@ -8017,7 +8017,7 @@ func (a *OpenTracingAppLayer) GetOrCreateTrueUpReviewStatus() (*model.TrueUpRevi }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetOrCreateTrueUpReviewStatus() + resultVar0, resultVar1 := a.app.GetOrCreateTrueUpReviewStatus(rctx) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -10089,7 +10089,7 @@ func (a *OpenTracingAppLayer) GetTeamIcon(team *model.Team) ([]byte, *model.AppE return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) { +func (a *OpenTracingAppLayer) GetTeamIdFromQuery(rctx request.CTX, query url.Values) (string, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetTeamIdFromQuery") @@ -10101,7 +10101,7 @@ func (a *OpenTracingAppLayer) GetTeamIdFromQuery(query url.Values) (string, *mod }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetTeamIdFromQuery(query) + resultVar0, resultVar1 := a.app.GetTeamIdFromQuery(rctx, query) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -12094,7 +12094,7 @@ func (a *OpenTracingAppLayer) InvalidatePasswordRecoveryTokensForUser(userID str return resultVar0 } -func (a *OpenTracingAppLayer) InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError { +func (a *OpenTracingAppLayer) InviteGuestsToChannels(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.InviteGuestsToChannels") @@ -12106,7 +12106,7 @@ func (a *OpenTracingAppLayer) InviteGuestsToChannels(teamID string, guestsInvite }() defer span.Finish() - resultVar0 := a.app.InviteGuestsToChannels(teamID, guestsInvite, senderId) + resultVar0 := a.app.InviteGuestsToChannels(rctx, teamID, guestsInvite, senderId) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) @@ -12116,7 +12116,7 @@ func (a *OpenTracingAppLayer) InviteGuestsToChannels(teamID string, guestsInvite return resultVar0 } -func (a *OpenTracingAppLayer) InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) { +func (a *OpenTracingAppLayer) InviteGuestsToChannelsGracefully(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.InviteGuestsToChannelsGracefully") @@ -12128,7 +12128,7 @@ func (a *OpenTracingAppLayer) InviteGuestsToChannelsGracefully(teamID string, gu }() defer span.Finish() - resultVar0, resultVar1 := a.app.InviteGuestsToChannelsGracefully(teamID, guestsInvite, senderId) + resultVar0, resultVar1 := a.app.InviteGuestsToChannelsGracefully(rctx, teamID, guestsInvite, senderId) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -12138,7 +12138,7 @@ func (a *OpenTracingAppLayer) InviteGuestsToChannelsGracefully(teamID string, gu return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) InviteNewUsersToTeam(emailList []string, teamID string, senderId string) *model.AppError { +func (a *OpenTracingAppLayer) InviteNewUsersToTeam(rctx request.CTX, emailList []string, teamID string, senderId string) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.InviteNewUsersToTeam") @@ -12150,7 +12150,7 @@ func (a *OpenTracingAppLayer) InviteNewUsersToTeam(emailList []string, teamID st }() defer span.Finish() - resultVar0 := a.app.InviteNewUsersToTeam(emailList, teamID, senderId) + resultVar0 := a.app.InviteNewUsersToTeam(rctx, emailList, teamID, senderId) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) @@ -12160,7 +12160,7 @@ func (a *OpenTracingAppLayer) InviteNewUsersToTeam(emailList []string, teamID st return resultVar0 } -func (a *OpenTracingAppLayer) InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, teamID string, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) { +func (a *OpenTracingAppLayer) InviteNewUsersToTeamGracefully(rctx request.CTX, memberInvite *model.MemberInvite, teamID string, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.InviteNewUsersToTeamGracefully") @@ -12172,7 +12172,7 @@ func (a *OpenTracingAppLayer) InviteNewUsersToTeamGracefully(memberInvite *model }() defer span.Finish() - resultVar0, resultVar1 := a.app.InviteNewUsersToTeamGracefully(memberInvite, teamID, senderId, reminderInterval) + resultVar0, resultVar1 := a.app.InviteNewUsersToTeamGracefully(rctx, memberInvite, teamID, senderId, reminderInterval) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -14161,7 +14161,7 @@ func (a *OpenTracingAppLayer) RegisterPluginCommand(pluginID string, command *mo return resultVar0 } -func (a *OpenTracingAppLayer) RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (remoteID string, err error) { +func (a *OpenTracingAppLayer) RegisterPluginForSharedChannels(rctx request.CTX, opts model.RegisterPluginOpts) (remoteID string, err error) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.RegisterPluginForSharedChannels") @@ -14173,7 +14173,7 @@ func (a *OpenTracingAppLayer) RegisterPluginForSharedChannels(opts model.Registe }() defer span.Finish() - resultVar0, resultVar1 := a.app.RegisterPluginForSharedChannels(opts) + resultVar0, resultVar1 := a.app.RegisterPluginForSharedChannels(rctx, opts) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -16046,7 +16046,7 @@ func (a *OpenTracingAppLayer) SendNotifyAdminPosts(c request.CTX, workspaceName return resultVar0 } -func (a *OpenTracingAppLayer) SendPasswordReset(email string, siteURL string) (bool, *model.AppError) { +func (a *OpenTracingAppLayer) SendPasswordReset(rctx request.CTX, email string, siteURL string) (bool, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SendPasswordReset") @@ -16058,7 +16058,7 @@ func (a *OpenTracingAppLayer) SendPasswordReset(email string, siteURL string) (b }() defer span.Finish() - resultVar0, resultVar1 := a.app.SendPasswordReset(email, siteURL) + resultVar0, resultVar1 := a.app.SendPasswordReset(rctx, email, siteURL) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -16632,7 +16632,7 @@ func (a *OpenTracingAppLayer) SetPluginKeyWithOptions(pluginID string, key strin return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) SetPostReminder(postID string, userID string, targetTime int64) *model.AppError { +func (a *OpenTracingAppLayer) SetPostReminder(rctx request.CTX, postID string, userID string, targetTime int64) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SetPostReminder") @@ -16644,7 +16644,7 @@ func (a *OpenTracingAppLayer) SetPostReminder(postID string, userID string, targ }() defer span.Finish() - resultVar0 := a.app.SetPostReminder(postID, userID, targetTime) + resultVar0 := a.app.SetPostReminder(rctx, postID, userID, targetTime) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) @@ -19165,7 +19165,7 @@ func (a *OpenTracingAppLayer) UserCanSeeOtherUser(c request.CTX, userID string, return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) UserIsFirstAdmin(user *model.User) bool { +func (a *OpenTracingAppLayer) UserIsFirstAdmin(rctx request.CTX, user *model.User) bool { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UserIsFirstAdmin") @@ -19177,7 +19177,7 @@ func (a *OpenTracingAppLayer) UserIsFirstAdmin(user *model.User) bool { }() defer span.Finish() - resultVar0 := a.app.UserIsFirstAdmin(user) + resultVar0 := a.app.UserIsFirstAdmin(rctx, user) return resultVar0 } diff --git a/server/channels/app/platform/session.go b/server/channels/app/platform/session.go index d3e417867f8..c01e520813e 100644 --- a/server/channels/app/platform/session.go +++ b/server/channels/app/platform/session.go @@ -235,7 +235,7 @@ func (ps *PlatformService) UpdateSessionsIsGuest(c request.CTX, user *model.User session.AddProp(model.SessionPropIsGuest, strconv.FormatBool(isGuest)) err := ps.Store.Session().UpdateProps(session) if err != nil { - mlog.Warn("Unable to update isGuest session", mlog.Err(err)) + c.Logger().Warn("Unable to update isGuest session", mlog.Err(err)) continue } ps.AddSessionToCache(session) diff --git a/server/channels/app/plugin.go b/server/channels/app/plugin.go index cd0b764a70d..a2f826b4c1a 100644 --- a/server/channels/app/plugin.go +++ b/server/channels/app/plugin.go @@ -522,7 +522,7 @@ func (a *App) GetPlugins() (*model.PluginsResponse, *model.AppError) { // GetMarketplacePlugins returns a list of plugins from the marketplace-server, // and plugins that are installed locally. -func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { +func (a *App) GetMarketplacePlugins(rctx request.CTX, filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { plugins := map[string]*model.MarketplacePlugin{} if *a.Config().PluginSettings.EnableRemoteMarketplace && !filter.LocalOnly { @@ -539,7 +539,7 @@ func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*m return nil, appErr } - appErr = a.mergeLocalPlugins(plugins) + appErr = a.mergeLocalPlugins(rctx, plugins) if appErr != nil { return nil, appErr } @@ -692,7 +692,7 @@ func (a *App) mergePrepackagedPlugins(remoteMarketplacePlugins map[string]*model } // mergeLocalPlugins merges locally installed plugins to remote marketplace plugins list. -func (a *App) mergeLocalPlugins(remoteMarketplacePlugins map[string]*model.MarketplacePlugin) *model.AppError { +func (a *App) mergeLocalPlugins(rctx request.CTX, remoteMarketplacePlugins map[string]*model.MarketplacePlugin) *model.AppError { pluginsEnvironment := a.GetPluginsEnvironment() if pluginsEnvironment == nil { return model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError) @@ -718,7 +718,7 @@ func (a *App) mergeLocalPlugins(remoteMarketplacePlugins map[string]*model.Marke if plugin.Manifest.IconPath != "" { iconData, err = getIcon(filepath.Join(plugin.Path, plugin.Manifest.IconPath)) if err != nil { - a.Log().Warn("Error loading local plugin icon", mlog.String("plugin_id", plugin.Manifest.Id), mlog.String("icon_path", plugin.Manifest.IconPath), mlog.Err(err)) + rctx.Logger().Warn("Error loading local plugin icon", mlog.String("plugin_id", plugin.Manifest.Id), mlog.String("icon_path", plugin.Manifest.IconPath), mlog.Err(err)) } } diff --git a/server/channels/app/plugin_api.go b/server/channels/app/plugin_api.go index 4e294cb0825..457a6d4c3c8 100644 --- a/server/channels/app/plugin_api.go +++ b/server/channels/app/plugin_api.go @@ -318,7 +318,7 @@ func (api *PluginAPI) RevokeSession(sessionID string) *model.AppError { } func (api *PluginAPI) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) { - return api.app.CreateUserAccessToken(token) + return api.app.CreateUserAccessToken(api.ctx, token) } func (api *PluginAPI) RevokeUserAccessToken(tokenID string) *model.AppError { @@ -683,7 +683,7 @@ func (api *PluginAPI) UpdateEphemeralPost(userID string, post *model.Post) *mode } func (api *PluginAPI) DeleteEphemeralPost(userID, postID string) { - api.app.DeleteEphemeralPost(userID, postID) + api.app.DeleteEphemeralPost(api.ctx, userID, postID) } func (api *PluginAPI) DeletePost(postID string) *model.AppError { @@ -948,7 +948,7 @@ func (api *PluginAPI) KVCompareAndSet(key string, oldValue, newValue []byte) (bo } func (api *PluginAPI) KVCompareAndDelete(key string, oldValue []byte) (bool, *model.AppError) { - return api.app.CompareAndDeletePluginKey(api.id, key, oldValue) + return api.app.CompareAndDeletePluginKey(api.ctx, api.id, key, oldValue) } func (api *PluginAPI) KVSetWithExpiry(key string, value []byte, expireInSeconds int64) *model.AppError { @@ -1211,7 +1211,7 @@ func (api *PluginAPI) UpdateOAuthApp(app *model.OAuthApp) (*model.OAuthApp, *mod } func (api *PluginAPI) DeleteOAuthApp(appID string) *model.AppError { - return api.app.DeleteOAuthApp(appID) + return api.app.DeleteOAuthApp(api.ctx, appID) } // PublishPluginClusterEvent broadcasts a plugin event to all other running instances of @@ -1296,11 +1296,11 @@ func (api *PluginAPI) GetUploadSession(uploadID string) (*model.UploadSession, e func (api *PluginAPI) SendPushNotification(notification *model.PushNotification, userID string) *model.AppError { // Ignoring skipSessionId because it's only used internally to clear push notifications - return api.app.sendPushNotificationToAllSessions(notification, userID, "") + return api.app.sendPushNotificationToAllSessions(api.ctx, notification, userID, "") } func (api *PluginAPI) RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (remoteID string, err error) { - return api.app.RegisterPluginForSharedChannels(opts) + return api.app.RegisterPluginForSharedChannels(api.ctx, opts) } func (api *PluginAPI) UnregisterPluginForSharedChannels(pluginID string) error { diff --git a/server/channels/app/plugin_install.go b/server/channels/app/plugin_install.go index f27e109e1e2..30f4fe17b99 100644 --- a/server/channels/app/plugin_install.go +++ b/server/channels/app/plugin_install.go @@ -140,7 +140,7 @@ func (ch *Channels) installPluginFromClusterMessage(pluginID string) { defer signature.Close() if err := ch.verifyPlugin(bundle, signature); err != nil { - mlog.Error("Failed to validate plugin signature.", mlog.Err(appErr)) + logger.Error("Failed to validate plugin signature.", mlog.Err(appErr)) return } } diff --git a/server/channels/app/plugin_key_value_store.go b/server/channels/app/plugin_key_value_store.go index 25fcd13ef70..7676c89ea34 100644 --- a/server/channels/app/plugin_key_value_store.go +++ b/server/channels/app/plugin_key_value_store.go @@ -11,6 +11,7 @@ import ( "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" + "github.com/mattermost/mattermost/server/public/shared/request" "github.com/mattermost/mattermost/server/v8/channels/store" ) @@ -44,7 +45,7 @@ func (a *App) SetPluginKeyWithOptions(pluginID string, key string, value []byte, return a.Srv().Platform().SetPluginKeyWithOptions(pluginID, key, value, options) } -func (a *App) CompareAndDeletePluginKey(pluginID string, key string, oldValue []byte) (bool, *model.AppError) { +func (a *App) CompareAndDeletePluginKey(rctx request.CTX, pluginID string, key string, oldValue []byte) (bool, *model.AppError) { kv := &model.PluginKeyValue{ PluginId: pluginID, Key: key, @@ -52,7 +53,7 @@ func (a *App) CompareAndDeletePluginKey(pluginID string, key string, oldValue [] deleted, err := a.Srv().Store().Plugin().CompareAndDelete(kv, oldValue) if err != nil { - mlog.Error("Failed to compare and delete plugin key value", mlog.String("plugin_id", pluginID), mlog.String("key", key), mlog.Err(err)) + rctx.Logger().Error("Failed to compare and delete plugin key value", mlog.String("key", key), mlog.Err(err)) var appErr *model.AppError switch { case errors.As(err, &appErr): @@ -64,7 +65,7 @@ func (a *App) CompareAndDeletePluginKey(pluginID string, key string, oldValue [] // Clean up a previous entry using the hashed key, if it exists. if err := a.Srv().Store().Plugin().Delete(pluginID, getKeyHash(key)); err != nil { - mlog.Warn("Failed to clean up previously hashed plugin key value", mlog.String("plugin_id", pluginID), mlog.String("key", key), mlog.Err(err)) + rctx.Logger().Warn("Failed to clean up previously hashed plugin key value", mlog.String("key", key), mlog.Err(err)) } return deleted, nil diff --git a/server/channels/app/plugin_test.go b/server/channels/app/plugin_test.go index 27f4ea4bae1..8d39b106e93 100644 --- a/server/channels/app/plugin_test.go +++ b/server/channels/app/plugin_test.go @@ -404,7 +404,7 @@ func TestHandlePluginRequest(t *testing.T) { *cfg.ServiceSettings.EnableUserAccessTokens = true }) - token, err := th.App.CreateUserAccessToken(&model.UserAccessToken{ + token, err := th.App.CreateUserAccessToken(th.Context, &model.UserAccessToken{ UserId: th.BasicUser.Id, }) require.Nil(t, err) diff --git a/server/channels/app/post.go b/server/channels/app/post.go index a313d13b155..ed9faa24017 100644 --- a/server/channels/app/post.go +++ b/server/channels/app/post.go @@ -99,7 +99,7 @@ func (a *App) CreatePostMissingChannel(c request.CTX, post *model.Post, triggerW } // deduplicateCreatePost attempts to make posting idempotent within a caching window. -func (a *App) deduplicateCreatePost(post *model.Post) (foundPost *model.Post, err *model.AppError) { +func (a *App) deduplicateCreatePost(rctx request.CTX, post *model.Post) (foundPost *model.Post, err *model.AppError) { // We rely on the client sending the pending post id across "duplicate" requests. If there // isn't one, we can't deduplicate, so allow creation normally. if post.PendingPostId == "" { @@ -135,13 +135,13 @@ func (a *App) deduplicateCreatePost(post *model.Post) (foundPost *model.Post, er return nil, model.NewAppError("deduplicateCreatePost", "api.post.deduplicate_create_post.failed_to_get", nil, "", http.StatusInternalServerError).Wrap(err) } - mlog.Debug("Deduplicated create post", mlog.String("post_id", actualPost.Id), mlog.String("pending_post_id", post.PendingPostId)) + rctx.Logger().Debug("Deduplicated create post", mlog.String("post_id", actualPost.Id), mlog.String("pending_post_id", post.PendingPostId)) return actualPost, nil } func (a *App) CreatePost(c request.CTX, post *model.Post, channel *model.Channel, triggerWebhooks, setOnline bool) (savedPost *model.Post, err *model.AppError) { - foundPost, err := a.deduplicateCreatePost(post) + foundPost, err := a.deduplicateCreatePost(c, post) if err != nil { return nil, err } @@ -588,7 +588,7 @@ func (a *App) UpdateEphemeralPost(c request.CTX, userID string, post *model.Post sanitizedPost, appErr := a.SanitizePostMetadataForUser(c, post, userID) if appErr != nil { - mlog.Error("Failed to sanitize post metadata for user", mlog.String("user_id", userID), mlog.Err(appErr)) + c.Logger().Error("Failed to sanitize post metadata for user", mlog.String("user_id", userID), mlog.Err(appErr)) // If we failed to sanitize the post, we still want to remove the metadata. sanitizedPost = post.Clone() @@ -607,7 +607,7 @@ func (a *App) UpdateEphemeralPost(c request.CTX, userID string, post *model.Post return post } -func (a *App) DeleteEphemeralPost(userID, postID string) { +func (a *App) DeleteEphemeralPost(rctx request.CTX, userID, postID string) { post := &model.Post{ Id: postID, UserId: userID, @@ -619,7 +619,7 @@ func (a *App) DeleteEphemeralPost(userID, postID string) { message := model.NewWebSocketEvent(model.WebsocketEventPostDeleted, "", "", userID, nil, "") postJSON, jsonErr := post.ToJSON() if jsonErr != nil { - mlog.Warn("Failed to encode post to JSON", mlog.Err(jsonErr)) + rctx.Logger().Warn("Failed to encode post to JSON", mlog.Err(jsonErr)) } message.Add("post", postJSON) a.Publish(message) @@ -2137,7 +2137,7 @@ func (a *App) GetEditHistoryForPost(postID string) ([]*model.Post, *model.AppErr return posts, nil } -func (a *App) SetPostReminder(postID, userID string, targetTime int64) *model.AppError { +func (a *App) SetPostReminder(rctx request.CTX, postID, userID string, targetTime int64) *model.AppError { // Store the reminder in the DB reminder := &model.PostReminder{ PostId: postID, @@ -2185,12 +2185,12 @@ func (a *App) SetPostReminder(postID, userID string, targetTime int64) *model.Ap } message := model.NewWebSocketEvent(model.WebsocketEventEphemeralMessage, "", ephemeralPost.ChannelId, userID, nil, "") - ephemeralPost = a.PreparePostForClientWithEmbedsAndImages(request.EmptyContext(a.Log()), ephemeralPost, true, false, true) + ephemeralPost = a.PreparePostForClientWithEmbedsAndImages(rctx, ephemeralPost, true, false, true) ephemeralPost = model.AddPostActionCookies(ephemeralPost, a.PostActionCookieSecret()) postJSON, jsonErr := ephemeralPost.ToJSON() if jsonErr != nil { - mlog.Warn("Failed to encode post to JSON", mlog.Err(jsonErr)) + rctx.Logger().Warn("Failed to encode post to JSON", mlog.Err(jsonErr)) } message.Add("post", postJSON) a.Publish(message) diff --git a/server/channels/app/post_acknowledgements.go b/server/channels/app/post_acknowledgements.go index 92d74b88a2d..7dab475d648 100644 --- a/server/channels/app/post_acknowledgements.go +++ b/server/channels/app/post_acknowledgements.go @@ -56,7 +56,7 @@ func (a *App) SaveAcknowledgementForPost(c request.CTX, postID, userID string) ( // The post is always modified since the UpdateAt always changes a.Srv().Store().Post().InvalidateLastPostTimeCache(channel.Id) - a.sendAcknowledgementEvent(model.WebsocketEventAcknowledgementAdded, acknowledgement, post) + a.sendAcknowledgementEvent(c, model.WebsocketEventAcknowledgementAdded, acknowledgement, post) return acknowledgement, nil } @@ -100,7 +100,7 @@ func (a *App) DeleteAcknowledgementForPost(c request.CTX, postID, userID string) // The post is always modified since the UpdateAt always changes a.Srv().Store().Post().InvalidateLastPostTimeCache(channel.Id) - a.sendAcknowledgementEvent(model.WebsocketEventAcknowledgementRemoved, oldAck, post) + a.sendAcknowledgementEvent(c, model.WebsocketEventAcknowledgementRemoved, oldAck, post) return nil } @@ -130,13 +130,13 @@ func (a *App) GetAcknowledgementsForPostList(postList *model.PostList) (map[stri return acknowledgementsMap, nil } -func (a *App) sendAcknowledgementEvent(event model.WebsocketEventType, acknowledgement *model.PostAcknowledgement, post *model.Post) { +func (a *App) sendAcknowledgementEvent(rctx request.CTX, event model.WebsocketEventType, acknowledgement *model.PostAcknowledgement, post *model.Post) { // send out that a acknowledgement has been added/removed message := model.NewWebSocketEvent(event, "", post.ChannelId, "", nil, "") acknowledgementJSON, err := json.Marshal(acknowledgement) if err != nil { - a.Log().Warn("Failed to encode acknowledgement to JSON", mlog.Err(err)) + rctx.Logger().Warn("Failed to encode acknowledgement to JSON", mlog.Err(err)) } message.Add("acknowledgement", string(acknowledgementJSON)) a.Publish(message) diff --git a/server/channels/app/post_metadata.go b/server/channels/app/post_metadata.go index 4a257037bfa..e388d269717 100644 --- a/server/channels/app/post_metadata.go +++ b/server/channels/app/post_metadata.go @@ -176,7 +176,7 @@ func (a *App) getEmbedsAndImages(c request.CTX, post *model.Post, isNewPost bool } // Embeds and image dimensions - firstLink, images := a.getFirstLinkAndImages(post.Message) + firstLink, images := a.getFirstLinkAndImages(c, post.Message) if unsafeLinksProp := post.GetProp(UnsafeLinksPostProp); unsafeLinksProp != nil { if prop, ok := unsafeLinksProp.(string); ok && prop == "true" { @@ -361,7 +361,7 @@ func (a *App) getImagesForPost(c request.CTX, post *model.Post, imageURLs []stri imageURLs = append(imageURLs, embed.URL) case model.PostEmbedMessageAttachment: - imageURLs = append(imageURLs, a.getImagesInMessageAttachments(post)...) + imageURLs = append(imageURLs, a.getImagesInMessageAttachments(c, post)...) case model.PostEmbedOpengraph: openGraph, ok := embed.Data.(*opengraph.OpenGraph) @@ -483,12 +483,12 @@ func (a *App) getCustomEmojisForPost(c request.CTX, post *model.Post, reactions return a.GetMultipleEmojiByName(c, names) } -func (a *App) isLinkAllowedForPreview(link string) bool { +func (a *App) isLinkAllowedForPreview(rctx request.CTX, link string) bool { domains := normalizeDomains(*a.Config().ServiceSettings.RestrictLinkPreviews) for _, d := range domains { parsed, err := url.Parse(link) if err != nil { - a.Log().Warn("Unable to parse the link", mlog.String("link", link), mlog.Err(err)) + rctx.Logger().Warn("Unable to parse the link", mlog.String("link", link), mlog.Err(err)) // We disable link preview if link is badly formed // to remain on the safe side return false @@ -496,7 +496,7 @@ func (a *App) isLinkAllowedForPreview(link string) bool { // Conforming to IDNA2008 using the UTS-46 standard. cleaned, err := idna.Lookup.ToASCII(parsed.Hostname()) if err != nil { - a.Log().Warn("Unable to lookup hostname to ASCII", mlog.String("hostname", parsed.Hostname()), mlog.Err(err)) + rctx.Logger().Warn("Unable to lookup hostname to ASCII", mlog.String("hostname", parsed.Hostname()), mlog.Err(err)) // Same applies if compatibility processing fails. return false } @@ -525,22 +525,22 @@ func normalizeDomains(domains string) []string { // Given a string, returns the first autolinked URL in the string as well as an array of all Markdown // images of the form ![alt text](image url). Note that this does not return Markdown links of the // form [text](url). -func (a *App) getFirstLinkAndImages(str string) (string, []string) { +func (a *App) getFirstLinkAndImages(c request.CTX, str string) (string, []string) { firstLink := "" images := []string{} markdown.Inspect(str, func(blockOrInline any) bool { switch v := blockOrInline.(type) { case *markdown.Autolink: - if link := v.Destination(); firstLink == "" && a.isLinkAllowedForPreview(link) { + if link := v.Destination(); firstLink == "" && a.isLinkAllowedForPreview(c, link) { firstLink = link } case *markdown.InlineImage: - if link := v.Destination(); a.isLinkAllowedForPreview(link) { + if link := v.Destination(); a.isLinkAllowedForPreview(c, link) { images = append(images, link) } case *markdown.ReferenceImage: - if link := v.ReferenceDefinition.Destination(); a.isLinkAllowedForPreview(link) { + if link := v.ReferenceDefinition.Destination(); a.isLinkAllowedForPreview(c, link) { images = append(images, link) } } @@ -551,14 +551,14 @@ func (a *App) getFirstLinkAndImages(str string) (string, []string) { return firstLink, images } -func (a *App) getImagesInMessageAttachments(post *model.Post) []string { +func (a *App) getImagesInMessageAttachments(rctx request.CTX, post *model.Post) []string { var images []string for _, attachment := range post.Attachments() { - _, imagesInText := a.getFirstLinkAndImages(attachment.Text) + _, imagesInText := a.getFirstLinkAndImages(rctx, attachment.Text) images = append(images, imagesInText...) - _, imagesInPretext := a.getFirstLinkAndImages(attachment.Pretext) + _, imagesInPretext := a.getFirstLinkAndImages(rctx, attachment.Pretext) images = append(images, imagesInPretext...) for _, field := range attachment.Fields { @@ -566,7 +566,7 @@ func (a *App) getImagesInMessageAttachments(post *model.Post) []string { continue } if value, ok := field.Value.(string); ok { - _, imagesInFieldValue := a.getFirstLinkAndImages(value) + _, imagesInFieldValue := a.getFirstLinkAndImages(rctx, value) images = append(images, imagesInFieldValue...) } } @@ -604,8 +604,8 @@ func looksLikeAPermalink(url, siteURL string) bool { return matched } -func (a *App) containsPermalink(post *model.Post) bool { - link, _ := a.getFirstLinkAndImages(post.Message) +func (a *App) containsPermalink(rctx request.CTX, post *model.Post) bool { + link, _ := a.getFirstLinkAndImages(rctx, post.Message) if link == "" { return false } @@ -667,7 +667,7 @@ func (a *App) getLinkMetadata(c request.CTX, requestURL string, timestamp int64, } // Get metadata for embedded post - if a.containsPermalink(referencedPost) { + if a.containsPermalink(c, referencedPost) { // referencedPost contains a permalink: we don't get its metadata permalink = &model.Permalink{PreviewPost: model.NewPreviewPost(referencedPost, referencedTeam, referencedChannel)} } else { diff --git a/server/channels/app/post_metadata_test.go b/server/channels/app/post_metadata_test.go index 8fa409a018b..80fff213da8 100644 --- a/server/channels/app/post_metadata_test.go +++ b/server/channels/app/post_metadata_test.go @@ -1715,7 +1715,7 @@ func TestGetFirstLinkAndImages(t *testing.T) { }, } { t.Run(name, func(t *testing.T) { - firstLink, images := th.App.getFirstLinkAndImages(testCase.Input) + firstLink, images := th.App.getFirstLinkAndImages(th.Context, testCase.Input) assert.Equal(t, firstLink, testCase.ExpectedFirstLink) assert.Equal(t, images, testCase.ExpectedImages) @@ -1800,7 +1800,7 @@ func TestGetFirstLinkAndImages(t *testing.T) { }) t.Run(name, func(t *testing.T) { - firstLink, images := th.App.getFirstLinkAndImages(testCase.Input) + firstLink, images := th.App.getFirstLinkAndImages(th.Context, testCase.Input) assert.Equal(t, firstLink, testCase.ExpectedFirstLink) assert.Equal(t, images, testCase.ExpectedImages) @@ -2016,7 +2016,7 @@ func TestGetImagesInMessageAttachments(t *testing.T) { }, } { t.Run(test.Name, func(t *testing.T) { - images := th.App.getImagesInMessageAttachments(test.Post) + images := th.App.getImagesInMessageAttachments(th.Context, test.Post) assert.ElementsMatch(t, images, test.Expected) }) @@ -2831,7 +2831,7 @@ func TestContainsPermalink(t *testing.T) { for _, testCase := range testCases { testCase := testCase t.Run(testCase.Description, func(t *testing.T) { - actual := th.App.containsPermalink(testCase.Post) + actual := th.App.containsPermalink(th.Context, testCase.Post) assert.Equal(t, testCase.Expected, actual) }) } diff --git a/server/channels/app/reaction.go b/server/channels/app/reaction.go index 3a37e6ad957..1f453cc1c56 100644 --- a/server/channels/app/reaction.go +++ b/server/channels/app/reaction.go @@ -90,7 +90,7 @@ func (a *App) SaveReactionForPost(c request.CTX, reaction *model.Reaction) (*mod }, plugin.ReactionHasBeenAddedID) }) - a.sendReactionEvent(model.WebsocketEventReactionAdded, reaction, post) + a.sendReactionEvent(c, model.WebsocketEventReactionAdded, reaction, post) return reaction, nil } @@ -161,17 +161,17 @@ func (a *App) DeleteReactionForPost(c request.CTX, reaction *model.Reaction) *mo }, plugin.ReactionHasBeenRemovedID) }) - a.sendReactionEvent(model.WebsocketEventReactionRemoved, reaction, post) + a.sendReactionEvent(c, model.WebsocketEventReactionRemoved, reaction, post) return nil } -func (a *App) sendReactionEvent(event model.WebsocketEventType, reaction *model.Reaction, post *model.Post) { +func (a *App) sendReactionEvent(rctx request.CTX, event model.WebsocketEventType, reaction *model.Reaction, post *model.Post) { // send out that a reaction has been added/removed message := model.NewWebSocketEvent(event, "", post.ChannelId, "", nil, "") reactionJSON, err := json.Marshal(reaction) if err != nil { - a.Log().Warn("Failed to encode reaction to JSON", mlog.Err(err)) + rctx.Logger().Warn("Failed to encode reaction to JSON", mlog.Err(err)) } message.Add("reaction", string(reactionJSON)) a.Publish(message) diff --git a/server/channels/app/remote_cluster.go b/server/channels/app/remote_cluster.go index 5b04eca8fdf..dc63307359c 100644 --- a/server/channels/app/remote_cluster.go +++ b/server/channels/app/remote_cluster.go @@ -14,9 +14,10 @@ import ( "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" + "github.com/mattermost/mattermost/server/public/shared/request" ) -func (a *App) RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (remoteID string, err error) { +func (a *App) RegisterPluginForSharedChannels(rctx request.CTX, opts model.RegisterPluginOpts) (remoteID string, err error) { // check for pluginID already registered rc, err := a.Srv().Store().RemoteCluster().GetByPluginID(opts.PluginID) if err != nil { @@ -28,7 +29,7 @@ func (a *App) RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (re // if plugin is already registered then treat this as an update. if rc != nil { - a.Log().Debug("Plugin already registered for Shared Channels", + rctx.Logger().Debug("Plugin already registered for Shared Channels", mlog.String("plugin_id", opts.PluginID), mlog.String("remote_id", rc.RemoteId), ) @@ -57,7 +58,7 @@ func (a *App) RegisterPluginForSharedChannels(opts model.RegisterPluginOpts) (re return "", err } - a.Log().Debug("Registered new plugin for Shared Channels", + rctx.Logger().Debug("Registered new plugin for Shared Channels", mlog.String("plugin_id", opts.PluginID), mlog.String("remote_id", rcSaved.RemoteId), ) diff --git a/server/channels/app/report.go b/server/channels/app/report.go index 80278260535..ff838d88005 100644 --- a/server/channels/app/report.go +++ b/server/channels/app/report.go @@ -116,7 +116,7 @@ func (a *App) SendReportToUser(rctx request.CTX, job *model.Job, format string) return model.NewAppError("SendReportToUser", "app.report.send_report_to_user.failed_to_save", nil, "", http.StatusInternalServerError).Wrap(fileErr) } - channel, err := a.GetOrCreateDirectChannel(request.EmptyContext(a.Log()), requestingUserId, systemBot.UserId) + channel, err := a.GetOrCreateDirectChannel(rctx, requestingUserId, systemBot.UserId) if err != nil { return err } @@ -244,7 +244,7 @@ func (a *App) StartUsersBatchExport(rctx request.CTX, dateRange string, startAt return } - channel, err := a.GetOrCreateDirectChannel(request.EmptyContext(a.Log()), rctx.Session().UserId, systemBot.UserId) + channel, err := a.GetOrCreateDirectChannel(rctx, rctx.Session().UserId, systemBot.UserId) if err != nil { rctx.Logger().Error("Failed to get or create the DM", mlog.Err(err)) return diff --git a/server/channels/app/session.go b/server/channels/app/session.go index 0d5c5a83f3a..27068d3a7aa 100644 --- a/server/channels/app/session.go +++ b/server/channels/app/session.go @@ -357,7 +357,7 @@ func (a *App) SetSessionExpireInHours(session *model.Session, hours int) { a.ch.srv.platform.SetSessionExpireInHours(session, hours) } -func (a *App) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) { +func (a *App) CreateUserAccessToken(rctx request.CTX, token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) { user, nErr := a.ch.srv.userService.GetUser(token.UserId) if nErr != nil { var nfErr *store.ErrNotFound @@ -389,7 +389,7 @@ func (a *App) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAc // Don't send emails to bot users. if !user.IsBot { if err := a.Srv().EmailService.SendUserAccessTokenAddedEmail(user.Email, user.Locale, a.GetSiteURL()); err != nil { - a.Log().Error("Unable to send user access token added email", mlog.Err(err), mlog.String("user_id", user.Id)) + rctx.Logger().Error("Unable to send user access token added email", mlog.Err(err), mlog.String("user_id", user.Id)) } } diff --git a/server/channels/app/slashcommands/command_exportlink.go b/server/channels/app/slashcommands/command_exportlink.go index 0a8146a05e6..49fadac8d09 100644 --- a/server/channels/app/slashcommands/command_exportlink.go +++ b/server/channels/app/slashcommands/command_exportlink.go @@ -86,7 +86,7 @@ func (*ExportLinkProvider) DoCommand(a *app.App, c request.CTX, args *model.Comm } t, err := b.FileModTime(f) if err != nil { - a.Log().Warn("Failed to get file mod time", mlog.String("file", f), mlog.Err(err)) + c.Logger().Warn("Failed to get file mod time", mlog.String("file", f), mlog.Err(err)) continue } if t.After(latestFound) { diff --git a/server/channels/app/slashcommands/command_invite_people.go b/server/channels/app/slashcommands/command_invite_people.go index b0936e1a4b0..f5c789d9f45 100644 --- a/server/channels/app/slashcommands/command_invite_people.go +++ b/server/channels/app/slashcommands/command_invite_people.go @@ -75,7 +75,7 @@ func (*InvitePeopleProvider) DoCommand(a *app.App, c request.CTX, args *model.Co return &model.CommandResponse{ResponseType: model.CommandResponseTypeEphemeral, Text: args.T("api.command.invite_people.no_email")} } - if err := a.InviteNewUsersToTeam(emailList, args.TeamId, args.UserId); err != nil { + if err := a.InviteNewUsersToTeam(c, emailList, args.TeamId, args.UserId); err != nil { c.Logger().Error(err.Error()) return &model.CommandResponse{ResponseType: model.CommandResponseTypeEphemeral, Text: args.T("api.command.invite_people.fail")} } diff --git a/server/channels/app/team.go b/server/channels/app/team.go index 5718c191d7c..3fb15ccf8a3 100644 --- a/server/channels/app/team.go +++ b/server/channels/app/team.go @@ -1365,7 +1365,7 @@ func (a *App) prepareInviteNewUsersToTeam(teamID, senderId string, channelIds [] return user, team, channels, nil } -func (a *App) InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) { +func (a *App) InviteNewUsersToTeamGracefully(rctx request.CTX, memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) { if !*a.Config().ServiceSettings.EnableEmailInvitations { return nil, model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented) } @@ -1405,10 +1405,10 @@ func (a *App) InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, t nameFormat := *a.Config().TeamSettings.TeammateNameDisplay senderProfileImage, _, err := a.GetProfileImage(user) if err != nil { - a.Log().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) + rctx.Logger().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) } - userIsFirstAdmin := a.UserIsFirstAdmin(user) + userIsFirstAdmin := a.UserIsFirstAdmin(rctx, user) var eErr error var invitesWithErrors2 []*model.EmailInviteWithError if len(channels) > 0 { @@ -1504,7 +1504,7 @@ func (a *App) prepareInviteGuestsToChannels(teamID string, guestsInvite *model.G return user, team, channels, nil } -func (a *App) InviteGuestsToChannelsGracefully(teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) { +func (a *App) InviteGuestsToChannelsGracefully(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) ([]*model.EmailInviteWithError, *model.AppError) { if !*a.Config().ServiceSettings.EnableEmailInvitations { return nil, model.NewAppError("InviteGuestsToChannelsGracefully", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented) } @@ -1533,10 +1533,10 @@ func (a *App) InviteGuestsToChannelsGracefully(teamID string, guestsInvite *mode nameFormat := *a.Config().TeamSettings.TeammateNameDisplay senderProfileImage, _, err := a.GetProfileImage(user) if err != nil { - a.Log().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) + rctx.Logger().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) } - eErr := a.Srv().EmailService.SendGuestInviteEmails(team, channels, user.GetDisplayName(nameFormat), user.Id, senderProfileImage, goodEmails, a.GetSiteURL(), guestsInvite.Message, true, user.IsSystemAdmin(), a.UserIsFirstAdmin(user)) + eErr := a.Srv().EmailService.SendGuestInviteEmails(team, channels, user.GetDisplayName(nameFormat), user.Id, senderProfileImage, goodEmails, a.GetSiteURL(), guestsInvite.Message, true, user.IsSystemAdmin(), a.UserIsFirstAdmin(rctx, user)) if eErr != nil { switch { case errors.Is(eErr, email.SendMailError): @@ -1562,7 +1562,7 @@ func (a *App) InviteGuestsToChannelsGracefully(teamID string, guestsInvite *mode return inviteListWithErrors, nil } -func (a *App) InviteNewUsersToTeam(emailList []string, teamID, senderId string) *model.AppError { +func (a *App) InviteNewUsersToTeam(rctx request.CTX, emailList []string, teamID, senderId string) *model.AppError { if !*a.Config().ServiceSettings.EnableEmailInvitations { return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented) } @@ -1592,7 +1592,7 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamID, senderId string) } nameFormat := *a.Config().TeamSettings.TeammateNameDisplay - eErr := a.Srv().EmailService.SendInviteEmails(team, user.GetDisplayName(nameFormat), user.Id, emailList, a.GetSiteURL(), nil, false, user.IsSystemAdmin(), a.UserIsFirstAdmin(user)) + eErr := a.Srv().EmailService.SendInviteEmails(team, user.GetDisplayName(nameFormat), user.Id, emailList, a.GetSiteURL(), nil, false, user.IsSystemAdmin(), a.UserIsFirstAdmin(rctx, user)) if eErr != nil { switch { case errors.Is(eErr, email.NoRateLimiterError): @@ -1607,7 +1607,7 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamID, senderId string) return nil } -func (a *App) InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError { +func (a *App) InviteGuestsToChannels(rctx request.CTX, teamID string, guestsInvite *model.GuestsInvite, senderId string) *model.AppError { if !*a.Config().ServiceSettings.EnableEmailInvitations { return model.NewAppError("InviteNewUsersToTeam", "api.team.invite_members.disabled.app_error", nil, "", http.StatusNotImplemented) } @@ -1632,10 +1632,10 @@ func (a *App) InviteGuestsToChannels(teamID string, guestsInvite *model.GuestsIn nameFormat := *a.Config().TeamSettings.TeammateNameDisplay senderProfileImage, _, err := a.GetProfileImage(user) if err != nil { - a.Log().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) + rctx.Logger().Warn("Unable to get the sender user profile image.", mlog.String("user_id", user.Id), mlog.String("team_id", team.Id), mlog.Err(err)) } - eErr := a.Srv().EmailService.SendGuestInviteEmails(team, channels, user.GetDisplayName(nameFormat), user.Id, senderProfileImage, guestsInvite.Emails, a.GetSiteURL(), guestsInvite.Message, false, user.IsSystemAdmin(), a.UserIsFirstAdmin(user)) + eErr := a.Srv().EmailService.SendGuestInviteEmails(team, channels, user.GetDisplayName(nameFormat), user.Id, senderProfileImage, guestsInvite.Emails, a.GetSiteURL(), guestsInvite.Message, false, user.IsSystemAdmin(), a.UserIsFirstAdmin(rctx, user)) if eErr != nil { switch { case errors.Is(eErr, email.NoRateLimiterError): @@ -1866,7 +1866,7 @@ func (a *App) GetTeamStats(teamID string, restrictions *model.ViewUsersRestricti return stats, nil } -func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) { +func (a *App) GetTeamIdFromQuery(rctx request.CTX, query url.Values) (string, *model.AppError) { tokenID := query.Get("t") inviteId := query.Get("id") @@ -1895,7 +1895,7 @@ func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) { return team.Id, nil } // soft fail, so we still create user but don't auto-join team - mlog.Warn("Error getting team by inviteId.", mlog.String("invite_id", inviteId), mlog.Err(err)) + rctx.Logger().Warn("Error getting team by inviteId.", mlog.String("invite_id", inviteId), mlog.Err(err)) } return "", nil diff --git a/server/channels/app/team_test.go b/server/channels/app/team_test.go index 5b115dae4a3..7062db0553f 100644 --- a/server/channels/app/team_test.go +++ b/server/channels/app/team_test.go @@ -1471,7 +1471,7 @@ func TestInviteNewUsersToTeamGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteNewUsersToTeamGracefully(memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") + res, err := th.App.InviteNewUsersToTeamGracefully(th.Context, memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) require.Len(t, res, 1) require.Nil(t, res[0].Error) @@ -1496,7 +1496,7 @@ func TestInviteNewUsersToTeamGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteNewUsersToTeamGracefully(memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") + res, err := th.App.InviteNewUsersToTeamGracefully(th.Context, memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) require.Len(t, res, 1) require.NotNil(t, res[0].Error) @@ -1525,7 +1525,7 @@ func TestInviteNewUsersToTeamGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteNewUsersToTeamGracefully(memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") + res, err := th.App.InviteNewUsersToTeamGracefully(th.Context, memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) require.Len(t, res, 1) require.Nil(t, res[0].Error) @@ -1550,7 +1550,7 @@ func TestInviteNewUsersToTeamGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteNewUsersToTeamGracefully(memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") + res, err := th.App.InviteNewUsersToTeamGracefully(th.Context, memberInvite, th.BasicTeam.Id, th.BasicUser.Id, "") require.Nil(t, err) require.Len(t, res, 1) require.Nil(t, res[0].Error) @@ -1583,7 +1583,7 @@ func TestInviteGuestsToChannelsGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteGuestsToChannelsGracefully(th.BasicTeam.Id, &model.GuestsInvite{ + res, err := th.App.InviteGuestsToChannelsGracefully(th.Context, th.BasicTeam.Id, &model.GuestsInvite{ Emails: []string{"idontexist@mattermost.com"}, Channels: []string{th.BasicChannel.Id}, }, th.BasicUser.Id) @@ -1610,7 +1610,7 @@ func TestInviteGuestsToChannelsGracefully(t *testing.T) { emailServiceMock.On("Stop").Once().Return() th.App.Srv().EmailService = &emailServiceMock - res, err := th.App.InviteGuestsToChannelsGracefully(th.BasicTeam.Id, &model.GuestsInvite{ + res, err := th.App.InviteGuestsToChannelsGracefully(th.Context, th.BasicTeam.Id, &model.GuestsInvite{ Emails: []string{"idontexist@mattermost.com"}, Channels: []string{th.BasicChannel.Id}, }, th.BasicUser.Id) diff --git a/server/channels/app/true_up.go b/server/channels/app/true_up.go index 5639354d9ba..171bb2122bc 100644 --- a/server/channels/app/true_up.go +++ b/server/channels/app/true_up.go @@ -12,6 +12,7 @@ import ( "time" "github.com/mattermost/mattermost/server/public/model" + "github.com/mattermost/mattermost/server/public/shared/request" "github.com/mattermost/mattermost/server/v8/channels/store" "github.com/mattermost/mattermost/server/v8/channels/utils" "github.com/mattermost/mattermost/server/v8/platform/services/telemetry" @@ -160,14 +161,14 @@ func (a *App) GetTrueUpProfile() (map[string]any, error) { return telemetryProperties, nil } -func (a *App) GetOrCreateTrueUpReviewStatus() (*model.TrueUpReviewStatus, *model.AppError) { +func (a *App) GetOrCreateTrueUpReviewStatus(rctx request.CTX) (*model.TrueUpReviewStatus, *model.AppError) { nextDueDate := utils.GetNextTrueUpReviewDueDate(time.Now()) status, err := a.Srv().Store().TrueUpReview().GetTrueUpReviewStatus(nextDueDate.UnixMilli()) if err != nil { var nfErr *store.ErrNotFound switch { case errors.As(err, &nfErr): - a.Log().Warn("Could not find true up review status") + rctx.Logger().Warn("Could not find true up review status") default: return nil, model.NewAppError("requestTrueUpReview", "api.license.true_up_review.get_status_error", nil, "Could not get true up status records", http.StatusInternalServerError).Wrap(err) } diff --git a/server/channels/app/user.go b/server/channels/app/user.go index b3e82223c33..8ceb7395fd4 100644 --- a/server/channels/app/user.go +++ b/server/channels/app/user.go @@ -337,10 +337,10 @@ func (a *App) createUserOrGuest(c request.CTX, user *model.User, guest bool) (*m if limitErr != nil { // we don't want to break the create user flow just because of this. // So, we log the error, not return - mlog.Error("Error fetching user limits in createUserOrGuest", mlog.Err(limitErr)) + c.Logger().Error("Error fetching user limits in createUserOrGuest", mlog.Err(limitErr)) } else { if userLimits.ActiveUserCount > userLimits.MaxUsersLimit { - mlog.Warn("ERROR_SAFETY_LIMITS_EXCEEDED: Created user exceeds the total activated users limit.", mlog.Int("user_limit", userLimits.MaxUsersLimit)) + c.Logger().Warn("ERROR_SAFETY_LIMITS_EXCEEDED: Created user exceeds the total activated users limit.", mlog.Int("user_limit", userLimits.MaxUsersLimit)) } } @@ -1072,10 +1072,10 @@ func (a *App) UpdateActive(c request.CTX, user *model.User, active bool) (*model if active { userLimits, appErr := a.GetServerLimits() if appErr != nil { - mlog.Error("Error fetching user limits in UpdateActive", mlog.Err(appErr)) + c.Logger().Error("Error fetching user limits in UpdateActive", mlog.Err(appErr)) } else { if userLimits.ActiveUserCount > userLimits.MaxUsersLimit { - mlog.Warn("ERROR_SAFETY_LIMITS_EXCEEDED: Activated user exceeds the total active user limit.", mlog.Int("user_limit", userLimits.MaxUsersLimit)) + c.Logger().Warn("ERROR_SAFETY_LIMITS_EXCEEDED: Activated user exceeds the total active user limit.", mlog.Int("user_limit", userLimits.MaxUsersLimit)) } } } @@ -1533,7 +1533,7 @@ func (a *App) resetPasswordFromToken(c request.CTX, userSuppliedTokenString, new return nil } -func (a *App) SendPasswordReset(email string, siteURL string) (bool, *model.AppError) { +func (a *App) SendPasswordReset(rctx request.CTX, email string, siteURL string) (bool, *model.AppError) { user, err := a.GetUserByEmail(email) if err != nil { return false, nil @@ -1543,7 +1543,7 @@ func (a *App) SendPasswordReset(email string, siteURL string) (bool, *model.AppE return false, model.NewAppError("SendPasswordReset", "api.user.send_password_reset.sso.app_error", nil, "userId="+user.Id, http.StatusBadRequest) } - token, err := a.CreatePasswordRecoveryToken(user.Id, user.Email) + token, err := a.CreatePasswordRecoveryToken(rctx, user.Id, user.Email) if err != nil { return false, err } @@ -1556,7 +1556,7 @@ func (a *App) SendPasswordReset(email string, siteURL string) (bool, *model.AppE return result, nil } -func (a *App) CreatePasswordRecoveryToken(userID, email string) (*model.Token, *model.AppError) { +func (a *App) CreatePasswordRecoveryToken(rctx request.CTX, userID, email string) (*model.Token, *model.AppError) { tokenExtra := struct { UserId string Email string @@ -1572,7 +1572,7 @@ func (a *App) CreatePasswordRecoveryToken(userID, email string) (*model.Token, * // remove any previously created tokens for user appErr := a.InvalidatePasswordRecoveryTokensForUser(userID) if appErr != nil { - mlog.Warn("Error while deleting additional user tokens.", mlog.Err(err)) + rctx.Logger().Warn("Error while deleting additional user tokens.", mlog.Err(err)) } token := model.NewToken(TokenTypePasswordRecovery, string(jsonData)) @@ -2863,14 +2863,14 @@ func getProfileImageDirectory(userID string) string { return filepath.Join("users", userID) } -func (a *App) UserIsFirstAdmin(user *model.User) bool { +func (a *App) UserIsFirstAdmin(rctx request.CTX, user *model.User) bool { if !user.IsSystemAdmin() { return false } systemAdminUsers, errServer := a.Srv().Store().User().GetSystemAdminProfiles() if errServer != nil { - mlog.Warn("Failed to get system admins to check for first admin from Mattermost.") + rctx.Logger().Warn("Failed to get system admins to check for first admin from Mattermost.") return false } diff --git a/server/channels/app/user_test.go b/server/channels/app/user_test.go index c8972b6dcc0..a7b7936698e 100644 --- a/server/channels/app/user_test.go +++ b/server/channels/app/user_test.go @@ -1122,7 +1122,7 @@ func TestPasswordRecovery(t *testing.T) { defer th.TearDown() t.Run("password token with same email as during creation", func(t *testing.T) { - token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + token, err := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, err) tokenData := struct { @@ -1140,7 +1140,7 @@ func TestPasswordRecovery(t *testing.T) { }) t.Run("password token with modified email as during creation", func(t *testing.T) { - token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + token, err := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, err) th.App.UpdateConfig(func(c *model.Config) { @@ -1156,7 +1156,7 @@ func TestPasswordRecovery(t *testing.T) { }) t.Run("non-expired token", func(t *testing.T) { - token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + token, err := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, err) err = th.App.resetPasswordFromToken(th.Context, token.Token, "abcdefgh", model.GetMillis()) @@ -1164,7 +1164,7 @@ func TestPasswordRecovery(t *testing.T) { }) t.Run("expired token", func(t *testing.T) { - token, err := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + token, err := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, err) err = th.App.resetPasswordFromToken(th.Context, token.Token, "abcdefgh", model.GetMillisForTime(time.Now().Add(25*time.Hour))) @@ -1197,10 +1197,10 @@ func TestInvalidatePasswordRecoveryTokens(t *testing.T) { }) t.Run("add multiple tokens, should only be one valid", func(t *testing.T) { - _, appErr := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + _, appErr := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, appErr) - token, appErr := th.App.CreatePasswordRecoveryToken(th.BasicUser.Id, th.BasicUser.Email) + token, appErr := th.App.CreatePasswordRecoveryToken(th.Context, th.BasicUser.Id, th.BasicUser.Email) assert.Nil(t, appErr) tokens, err := th.App.Srv().Store().Token().GetAllTokensByType(TokenTypePasswordRecovery) diff --git a/server/channels/jobs/resend_invitation_email/worker.go b/server/channels/jobs/resend_invitation_email/worker.go index a2d4c930ce1..0de4c1afa4d 100644 --- a/server/channels/jobs/resend_invitation_email/worker.go +++ b/server/channels/jobs/resend_invitation_email/worker.go @@ -10,6 +10,7 @@ import ( "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" + "github.com/mattermost/mattermost/server/public/shared/request" "github.com/mattermost/mattermost/server/v8/channels/jobs" "github.com/mattermost/mattermost/server/v8/channels/store" "github.com/mattermost/mattermost/server/v8/platform/services/configservice" @@ -22,7 +23,7 @@ type AppIface interface { configservice.ConfigService GetUserByEmail(email string) (*model.User, *model.AppError) GetTeamMembersByIds(teamID string, userIDs []string, restrictions *model.ViewUsersRestrictions) ([]*model.TeamMember, *model.AppError) - InviteNewUsersToTeamGracefully(memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) + InviteNewUsersToTeamGracefully(rctx request.CTX, memberInvite *model.MemberInvite, teamID, senderId string, reminderInterval string) ([]*model.EmailInviteWithError, *model.AppError) } type ResendInvitationEmailWorker struct { @@ -175,6 +176,8 @@ func (rseworker *ResendInvitationEmailWorker) TearDown(logger mlog.LoggerIFace, } func (rseworker *ResendInvitationEmailWorker) ResendEmails(logger mlog.LoggerIFace, job *model.Job, interval string) { + rctx := request.EmptyContext(logger) + teamID := job.Data["teamID"] emailListData := job.Data["emailList"] channelListData := job.Data["channelList"] @@ -203,7 +206,7 @@ func (rseworker *ResendInvitationEmailWorker) ResendEmails(logger mlog.LoggerIFa memberInvite.ChannelIds = channelList } - _, appErr := rseworker.app.InviteNewUsersToTeamGracefully(&memberInvite, teamID, job.Data["senderID"], interval) + _, appErr := rseworker.app.InviteNewUsersToTeamGracefully(rctx, &memberInvite, teamID, job.Data["senderID"], interval) if appErr != nil { logger.Error("Worker: Failed to send emails", mlog.Err(appErr)) rseworker.setJobError(logger, job, appErr) diff --git a/server/channels/manualtesting/manual_testing.go b/server/channels/manualtesting/manual_testing.go index ee7107fe45c..952263e7cc4 100644 --- a/server/channels/manualtesting/manual_testing.go +++ b/server/channels/manualtesting/manual_testing.go @@ -41,7 +41,7 @@ func Init(api4 *api4.API) { func manualTest(c *web.Context, w http.ResponseWriter, r *http.Request) { // Let the world know - mlog.Info("Setting up for manual test...") + c.Logger.Info("Setting up for manual test...") // URL Parameters params, err := url.ParseQuery(r.URL.RawQuery) @@ -58,7 +58,7 @@ func manualTest(c *web.Context, w http.ResponseWriter, r *http.Request) { hash := hasher.Sum32() rand.Seed(int64(hash)) } else { - mlog.Debug("No uid in URL") + c.Logger.Debug("No uid in URL") } // Create a client for tests to use @@ -70,7 +70,7 @@ func manualTest(c *web.Context, w http.ResponseWriter, r *http.Request) { var teamID string var userID string if ok1 && ok2 { - mlog.Info("Creating user and team") + c.Logger.Info("Creating user and team") // Create team for testing team := &model.Team{ DisplayName: teamDisplayName[0], diff --git a/server/channels/web/oauth.go b/server/channels/web/oauth.go index e9e3be899a6..d19058d959f 100644 --- a/server/channels/web/oauth.go +++ b/server/channels/web/oauth.go @@ -324,7 +324,7 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) { session, err := c.App.DoLogin(c.AppContext, w, r, user, "", isMobile, false, false) if err != nil { err.Translate(c.AppContext.T) - mlog.Error(err.Error()) + c.Logger.Error(err.Error()) renderError(err) return } @@ -395,7 +395,7 @@ func loginWithOAuth(c *Context, w http.ResponseWriter, r *http.Request) { return } - teamId, err := c.App.GetTeamIdFromQuery(r.URL.Query()) + teamId, err := c.App.GetTeamIdFromQuery(c.AppContext, r.URL.Query()) if err != nil { c.Err = err return @@ -424,7 +424,7 @@ func mobileLoginWithOAuth(c *Context, w http.ResponseWriter, r *http.Request) { return } - teamId, err := c.App.GetTeamIdFromQuery(r.URL.Query()) + teamId, err := c.App.GetTeamIdFromQuery(c.AppContext, r.URL.Query()) if err != nil { c.Err = err return @@ -452,7 +452,7 @@ func signupWithOAuth(c *Context, w http.ResponseWriter, r *http.Request) { return } - teamId, err := c.App.GetTeamIdFromQuery(r.URL.Query()) + teamId, err := c.App.GetTeamIdFromQuery(c.AppContext, r.URL.Query()) if err != nil { c.Err = err return diff --git a/server/channels/web/saml.go b/server/channels/web/saml.go index 4ebe72b113c..fd3adc30937 100644 --- a/server/channels/web/saml.go +++ b/server/channels/web/saml.go @@ -32,7 +32,7 @@ func loginWithSaml(c *Context, w http.ResponseWriter, r *http.Request) { return } - teamId, err := c.App.GetTeamIdFromQuery(r.URL.Query()) + teamId, err := c.App.GetTeamIdFromQuery(c.AppContext, r.URL.Query()) if err != nil { c.Err = err return diff --git a/server/cmd/mattermost/commands/jobserver.go b/server/cmd/mattermost/commands/jobserver.go index 2b620ef8e8f..60b570bea6c 100644 --- a/server/cmd/mattermost/commands/jobserver.go +++ b/server/cmd/mattermost/commands/jobserver.go @@ -46,8 +46,8 @@ func jobserverCmdF(command *cobra.Command, args []string) error { rctx := request.EmptyContext(a.Log()) // Run jobs - a.Log().Info("Starting Mattermost job server") - defer a.Log().Info("Stopped Mattermost job server") + rctx.Logger().Info("Starting Mattermost job server") + defer rctx.Logger().Info("Stopped Mattermost job server") if !noJobs { a.Srv().Jobs.StartWorkers() @@ -68,7 +68,7 @@ func jobserverCmdF(command *cobra.Command, args []string) error { <-signalChan // Cleanup anything that isn't handled by a defer statement - a.Log().Info("Stopping Mattermost job server") + rctx.Logger().Info("Stopping Mattermost job server") return nil } diff --git a/server/cmd/mmctl/commands/plugin_marketplace_e2e_test.go b/server/cmd/mmctl/commands/plugin_marketplace_e2e_test.go index db9bb2999cb..b9a6c479698 100644 --- a/server/cmd/mmctl/commands/plugin_marketplace_e2e_test.go +++ b/server/cmd/mmctl/commands/plugin_marketplace_e2e_test.go @@ -17,7 +17,7 @@ func (s *MmctlE2ETestSuite) TestPluginMarketplaceInstallCmd() { s.RunForSystemAdminAndLocal("install a plugin", func(c client.Client) { printer.Clean() - marketPlacePlugins, appErr := s.th.App.GetMarketplacePlugins(&model.MarketplacePluginFilter{ + marketPlacePlugins, appErr := s.th.App.GetMarketplacePlugins(s.th.Context, &model.MarketplacePluginFilter{ Page: 0, PerPage: 100, Filter: "jira",