diff --git a/api4/emoji.go b/api4/emoji.go index 52b1b017ce..9c245d4a8d 100644 --- a/api4/emoji.go +++ b/api4/emoji.go @@ -90,7 +90,7 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { auditRec.AddEventResultState(&emoji) auditRec.AddEventObjectType("emoji") - newEmoji, err := c.App.CreateEmoji(c.AppContext.Session().UserId, &emoji, m) + newEmoji, err := c.App.CreateEmoji(c.AppContext, c.AppContext.Session().UserId, &emoji, m) if err != nil { c.Err = err return @@ -114,7 +114,7 @@ func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) { return } - listEmoji, err := c.App.GetEmojiList(c.Params.Page, c.Params.PerPage, sort) + listEmoji, err := c.App.GetEmojiList(c.AppContext, c.Params.Page, c.Params.PerPage, sort) if err != nil { c.Err = err return @@ -134,7 +134,7 @@ func deleteEmoji(c *Context, w http.ResponseWriter, r *http.Request) { auditRec := c.MakeAuditRecord("deleteEmoji", audit.Fail) defer c.LogAuditRec(auditRec) - emoji, err := c.App.GetEmoji(c.Params.EmojiId) + emoji, err := c.App.GetEmoji(c.AppContext, c.Params.EmojiId) if err != nil { auditRec.AddEventParameter("emoji_id", c.Params.EmojiId) c.Err = err @@ -182,7 +182,7 @@ func deleteEmoji(c *Context, w http.ResponseWriter, r *http.Request) { } } - err = c.App.DeleteEmoji(emoji) + err = c.App.DeleteEmoji(c.AppContext, emoji) if err != nil { c.Err = err return @@ -204,7 +204,7 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) { return } - emoji, err := c.App.GetEmoji(c.Params.EmojiId) + emoji, err := c.App.GetEmoji(c.AppContext, c.Params.EmojiId) if err != nil { c.Err = err return @@ -221,7 +221,7 @@ func getEmojiByName(c *Context, w http.ResponseWriter, r *http.Request) { return } - emoji, err := c.App.GetEmojiByName(c.Params.EmojiName) + emoji, err := c.App.GetEmojiByName(c.AppContext, c.Params.EmojiName) if err != nil { c.Err = err return @@ -243,7 +243,7 @@ func getEmojiImage(c *Context, w http.ResponseWriter, r *http.Request) { return } - image, imageType, err := c.App.GetEmojiImage(c.Params.EmojiId) + image, imageType, err := c.App.GetEmojiImage(c.AppContext, c.Params.EmojiId) if err != nil { c.Err = err return @@ -266,7 +266,7 @@ func searchEmojis(c *Context, w http.ResponseWriter, r *http.Request) { return } - emojis, err := c.App.SearchEmoji(emojiSearch.Term, emojiSearch.PrefixOnly, web.PerPageMaximum) + emojis, err := c.App.SearchEmoji(c.AppContext, emojiSearch.Term, emojiSearch.PrefixOnly, web.PerPageMaximum) if err != nil { c.Err = err return @@ -285,7 +285,7 @@ func autocompleteEmojis(c *Context, w http.ResponseWriter, r *http.Request) { return } - emojis, err := c.App.SearchEmoji(name, true, EmojiMaxAutocompleteItems) + emojis, err := c.App.SearchEmoji(c.AppContext, name, true, EmojiMaxAutocompleteItems) if err != nil { c.Err = err return diff --git a/api4/post.go b/api4/post.go index 8892bee66d..05ca87b6c8 100644 --- a/api4/post.go +++ b/api4/post.go @@ -479,7 +479,7 @@ func getPostsByIds(c *Context, w http.ResponseWriter, r *http.Request) { } } - post = c.App.PreparePostForClient(post, false, false) + post = c.App.PreparePostForClient(c.AppContext, post, false, false) post.StripActionIntegrations() posts = append(posts, post) } diff --git a/app/app_iface.go b/app/app_iface.go index a113169c5c..e1f1ef3795 100644 --- a/app/app_iface.go +++ b/app/app_iface.go @@ -174,7 +174,7 @@ type AppIface interface { GetConfigFile(name string) ([]byte, error) // GetEmojiStaticURL returns a relative static URL for system default emojis, // and the API route for custom ones. Errors if not found or if custom and deleted. - GetEmojiStaticURL(emojiName string) (string, *model.AppError) + GetEmojiStaticURL(c request.CTX, emojiName string) (string, *model.AppError) // GetEnvironmentConfig returns a map of configuration keys whose values have been overridden by an environment variable. // If filter is not nil and returns false for a struct field, that field will be omitted. GetEnvironmentConfig(filter func(reflect.StructField) bool) map[string]any @@ -268,7 +268,7 @@ type AppIface interface { NotifySessionsExpired() error // OverrideIconURLIfEmoji changes the post icon override URL prop, if it has an emoji icon, // so that it points to the URL (relative) of the emoji - static if emoji is default, /api if custom. - OverrideIconURLIfEmoji(post *model.Post) + OverrideIconURLIfEmoji(c request.CTX, post *model.Post) // PatchBot applies the given patch to the bot and corresponding user. PatchBot(botUserId string, botPatch *model.BotPatch) (*model.Bot, *model.AppError) // PatchChannelModerationsForChannel Updates a channels scheme roles based on a given ChannelModerationPatch, if the permissions match the higher scoped role the scheme is deleted. @@ -478,7 +478,7 @@ type AppIface interface { CreateChannelWithUser(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError) CreateCommand(cmd *model.Command) (*model.Command, *model.AppError) CreateCommandWebhook(commandID string, args *model.CommandArgs) (*model.CommandWebhook, *model.AppError) - CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) + CreateEmoji(c request.CTX, sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) CreateGroup(group *model.Group) (*model.Group, *model.AppError) CreateGroupChannel(c request.CTX, userIDs []string, creatorId string) (*model.Channel, *model.AppError) CreateGroupWithUserIds(group *model.GroupWithUserIds) (*model.Group, *model.AppError) @@ -518,7 +518,7 @@ type AppIface interface { DeleteBrandImage() *model.AppError DeleteChannel(c request.CTX, channel *model.Channel, userID string) *model.AppError DeleteCommand(commandID string) *model.AppError - DeleteEmoji(emoji *model.Emoji) *model.AppError + DeleteEmoji(c request.CTX, emoji *model.Emoji) *model.AppError DeleteEphemeralPost(userID, postID string) DeleteExport(name string) *model.AppError DeleteGroup(groupID string) (*model.Group, *model.AppError) @@ -627,10 +627,10 @@ type AppIface interface { GetCustomStatus(userID string) (*model.CustomStatus, *model.AppError) GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError) GetDeletedChannels(c request.CTX, teamID string, offset int, limit int, userID string) (model.ChannelList, *model.AppError) - GetEmoji(emojiId string) (*model.Emoji, *model.AppError) - GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError) - GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) - GetEmojiList(page, perPage int, sort string) ([]*model.Emoji, *model.AppError) + GetEmoji(c request.CTX, emojiId string) (*model.Emoji, *model.AppError) + GetEmojiByName(c request.CTX, emojiName string) (*model.Emoji, *model.AppError) + GetEmojiImage(c request.CTX, emojiId string) ([]byte, string, *model.AppError) + GetEmojiList(c request.CTX, page, perPage int, sort string) ([]*model.Emoji, *model.AppError) GetFile(fileID string) ([]byte, *model.AppError) GetFileInfo(fileID string) (*model.FileInfo, *model.AppError) GetFileInfos(page, perPage int, opt *model.GetFileInfosOptions) ([]*model.FileInfo, *model.AppError) @@ -673,7 +673,7 @@ type AppIface interface { GetLogsSkipSend(page, perPage int) ([]string, *model.AppError) GetMemberCountsByGroup(ctx context.Context, channelID string, includeTimezones bool) ([]*model.ChannelMemberCountByGroup, *model.AppError) GetMessageForNotification(post *model.Post, translateFunc i18n.TranslateFunc) string - GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError) + GetMultipleEmojiByName(c request.CTX, names []string) ([]*model.Emoji, *model.AppError) GetNewTeamMembersSince(c request.CTX, teamID string, opts *model.InsightsOpts) (*model.NewTeamMembersList, int64, *model.AppError) GetNewUsersForTeamPage(teamID string, page, perPage int, asAdmin bool, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, *model.AppError) GetNextPostIdFromPostList(postList *model.PostList, collapsedThreads bool) string @@ -931,7 +931,7 @@ type AppIface interface { PostUpdateChannelPurposeMessage(c request.CTX, userID string, channel *model.Channel, oldChannelPurpose string, newChannelPurpose string) *model.AppError PostWithProxyAddedToImageURLs(post *model.Post) *model.Post PostWithProxyRemovedFromImageURLs(post *model.Post) *model.Post - PreparePostForClient(originalPost *model.Post, isNewPost, isEditPost bool) *model.Post + PreparePostForClient(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post PreparePostForClientWithEmbedsAndImages(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post PreparePostListForClient(c request.CTX, originalList *model.PostList) *model.PostList ProcessSlackText(text string) string @@ -998,7 +998,7 @@ type AppIface interface { SearchChannels(c request.CTX, teamID string, term string) (model.ChannelList, *model.AppError) SearchChannelsForUser(c request.CTX, userID, teamID, term string) (model.ChannelList, *model.AppError) SearchChannelsUserNotIn(c request.CTX, teamID string, userID string, term string) (model.ChannelList, *model.AppError) - SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) + SearchEmoji(c request.CTX, name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) SearchEngine() *searchengine.Broker SearchFilesInTeamForUser(c *request.Context, terms string, userId string, teamId string, isOrSearch bool, includeDeletedChannels bool, timeZoneOffset int, page, perPage int, modifier string) (*model.FileInfoList, *model.AppError) SearchGroupChannels(c request.CTX, userID, term string) (model.ChannelList, *model.AppError) @@ -1137,7 +1137,7 @@ type AppIface interface { UpdateUserRoles(c request.CTX, userID string, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) UpdateUserRolesWithUser(c request.CTX, user *model.User, newRoles string, sendWebSocketEvent bool) (*model.User, *model.AppError) UploadData(c *request.Context, us *model.UploadSession, rd io.Reader) (*model.FileInfo, *model.AppError) - UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError + UploadEmojiImage(c request.CTX, id string, imageData *multipart.FileHeader) *model.AppError UpsertGroupMember(groupID string, userID string) (*model.GroupMember, *model.AppError) UpsertGroupMembers(groupID string, userIDs []string) ([]*model.GroupMember, *model.AppError) UpsertGroupSyncable(groupSyncable *model.GroupSyncable) (*model.GroupSyncable, *model.AppError) diff --git a/app/emoji.go b/app/emoji.go index 75376794be..48e7773b5a 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -23,6 +23,7 @@ import ( "github.com/disintegration/imaging" _ "golang.org/x/image/webp" + "github.com/mattermost/mattermost-server/v6/app/request" "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/store" @@ -37,7 +38,7 @@ const ( MaxEmojiOriginalHeight = 1028 ) -func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) { +func (a *App) CreateEmoji(c request.CTX, sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { return nil, model.NewAppError("UploadEmojiImage", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -69,7 +70,7 @@ func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartIma return nil, model.NewAppError("Context", "api.context.invalid_body_param.app_error", map[string]any{"Name": "createEmoji"}, "", http.StatusBadRequest) } - if appErr := a.UploadEmojiImage(emoji.Id, imageData[0]); appErr != nil { + if appErr := a.UploadEmojiImage(c, emoji.Id, imageData[0]); appErr != nil { return nil, appErr } @@ -88,7 +89,7 @@ func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartIma return emoji, nil } -func (a *App) GetEmojiList(page, perPage int, sort string) ([]*model.Emoji, *model.AppError) { +func (a *App) GetEmojiList(c request.CTX, page, perPage int, sort string) ([]*model.Emoji, *model.AppError) { list, err := a.Srv().Store().Emoji().GetList(page*perPage, perPage, sort) if err != nil { return nil, model.NewAppError("GetEmojiList", "app.emoji.get_list.internal_error", nil, "", http.StatusInternalServerError).Wrap(err) @@ -97,7 +98,7 @@ func (a *App) GetEmojiList(page, perPage int, sort string) ([]*model.Emoji, *mod return list, nil } -func (a *App) UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError { +func (a *App) UploadEmojiImage(c request.CTX, id string, imageData *multipart.FileHeader) *model.AppError { if !*a.Config().ServiceSettings.EnableCustomEmoji { return model.NewAppError("UploadEmojiImage", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -166,7 +167,7 @@ func (a *App) UploadEmojiImage(id string, imageData *multipart.FileHeader) *mode return appErr } -func (a *App) DeleteEmoji(emoji *model.Emoji) *model.AppError { +func (a *App) DeleteEmoji(c request.CTX, emoji *model.Emoji) *model.AppError { if err := a.Srv().Store().Emoji().Delete(emoji, model.GetMillis()); err != nil { var nfErr *store.ErrNotFound switch { @@ -182,7 +183,7 @@ func (a *App) DeleteEmoji(emoji *model.Emoji) *model.AppError { return nil } -func (a *App) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) { +func (a *App) GetEmoji(c request.CTX, emojiId string) (*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { return nil, model.NewAppError("GetEmoji", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -205,7 +206,7 @@ func (a *App) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) { return emoji, nil } -func (a *App) GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError) { +func (a *App) GetEmojiByName(c request.CTX, emojiName string) (*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { return nil, model.NewAppError("GetEmojiByName", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -228,7 +229,7 @@ func (a *App) GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError) { return emoji, nil } -func (a *App) GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError) { +func (a *App) GetMultipleEmojiByName(c request.CTX, names []string) ([]*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { return nil, model.NewAppError("GetMultipleEmojiByName", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -241,7 +242,7 @@ func (a *App) GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.App return emoji, nil } -func (a *App) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) { +func (a *App) GetEmojiImage(c request.CTX, emojiId string) ([]byte, string, *model.AppError) { _, storeErr := a.Srv().Store().Emoji().Get(context.Background(), emojiId, true) if storeErr != nil { var nfErr *store.ErrNotFound @@ -266,7 +267,7 @@ func (a *App) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) { return img, imageType, nil } -func (a *App) SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) { +func (a *App) SearchEmoji(c request.CTX, name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { return nil, model.NewAppError("SearchEmoji", "api.emoji.disabled.app_error", nil, "", http.StatusForbidden) } @@ -281,7 +282,7 @@ func (a *App) SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emo // GetEmojiStaticURL returns a relative static URL for system default emojis, // and the API route for custom ones. Errors if not found or if custom and deleted. -func (a *App) GetEmojiStaticURL(emojiName string) (string, *model.AppError) { +func (a *App) GetEmojiStaticURL(c request.CTX, emojiName string) (string, *model.AppError) { subPath, _ := utils.GetSubpathFromConfig(a.Config()) if id, found := model.GetSystemEmojiId(emojiName); found { diff --git a/app/export.go b/app/export.go index f90945885d..cca7dd8066 100644 --- a/app/export.go +++ b/app/export.go @@ -104,7 +104,7 @@ func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, opts } ctx.Logger().Info("Bulk export: exporting emoji") - emojiPaths, err := a.exportCustomEmoji(writer, outPath, "exported_emoji", !opts.CreateArchive) + emojiPaths, err := a.exportCustomEmoji(ctx, writer, outPath, "exported_emoji", !opts.CreateArchive) if err != nil { return err } @@ -520,11 +520,11 @@ func (a *App) buildPostAttachments(postID string) ([]imports.AttachmentImportDat return attachments, nil } -func (a *App) exportCustomEmoji(writer io.Writer, outPath, exportDir string, exportFiles bool) ([]string, *model.AppError) { +func (a *App) exportCustomEmoji(c request.CTX, writer io.Writer, outPath, exportDir string, exportFiles bool) ([]string, *model.AppError) { var emojiPaths []string pageNumber := 0 for { - customEmojiList, err := a.GetEmojiList(pageNumber, 100, model.EmojiSortByName) + customEmojiList, err := a.GetEmojiList(c, pageNumber, 100, model.EmojiSortByName) if err != nil { return nil, err diff --git a/app/export_test.go b/app/export_test.go index 8cc4567f2d..00c92e39da 100644 --- a/app/export_test.go +++ b/app/export_test.go @@ -164,7 +164,7 @@ func TestExportCustomEmoji(t *testing.T) { outPath, err := filepath.Abs(filePath) require.NoError(t, err) - _, appErr := th.App.exportCustomEmoji(fileWriter, outPath, dirNameToExportEmoji, false) + _, appErr := th.App.exportCustomEmoji(th.Context, fileWriter, outPath, dirNameToExportEmoji, false) require.Nil(t, appErr, "should not have failed") } diff --git a/app/opentracing/opentracing_layer.go b/app/opentracing/opentracing_layer.go index 3c5b181160..7dd996acad 100644 --- a/app/opentracing/opentracing_layer.go +++ b/app/opentracing/opentracing_layer.go @@ -2029,7 +2029,7 @@ func (a *OpenTracingAppLayer) CreateDefaultMemberships(c *request.Context, since return resultVar0 } -func (a *OpenTracingAppLayer) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) CreateEmoji(c request.CTX, sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CreateEmoji") @@ -2041,7 +2041,7 @@ func (a *OpenTracingAppLayer) CreateEmoji(sessionUserId string, emoji *model.Emo }() defer span.Finish() - resultVar0, resultVar1 := a.app.CreateEmoji(sessionUserId, emoji, multiPartImageData) + resultVar0, resultVar1 := a.app.CreateEmoji(c, sessionUserId, emoji, multiPartImageData) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -2992,7 +2992,7 @@ func (a *OpenTracingAppLayer) DeleteCommand(commandID string) *model.AppError { return resultVar0 } -func (a *OpenTracingAppLayer) DeleteEmoji(emoji *model.Emoji) *model.AppError { +func (a *OpenTracingAppLayer) DeleteEmoji(c request.CTX, emoji *model.Emoji) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DeleteEmoji") @@ -3004,7 +3004,7 @@ func (a *OpenTracingAppLayer) DeleteEmoji(emoji *model.Emoji) *model.AppError { }() defer span.Finish() - resultVar0 := a.app.DeleteEmoji(emoji) + resultVar0 := a.app.DeleteEmoji(c, emoji) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) @@ -5804,7 +5804,7 @@ func (a *OpenTracingAppLayer) GetDeletedChannels(c request.CTX, teamID string, o return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) GetEmoji(c request.CTX, emojiId string) (*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetEmoji") @@ -5816,7 +5816,7 @@ func (a *OpenTracingAppLayer) GetEmoji(emojiId string) (*model.Emoji, *model.App }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetEmoji(emojiId) + resultVar0, resultVar1 := a.app.GetEmoji(c, emojiId) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -5826,7 +5826,7 @@ func (a *OpenTracingAppLayer) GetEmoji(emojiId string) (*model.Emoji, *model.App return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) GetEmojiByName(c request.CTX, emojiName string) (*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetEmojiByName") @@ -5838,7 +5838,7 @@ func (a *OpenTracingAppLayer) GetEmojiByName(emojiName string) (*model.Emoji, *m }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetEmojiByName(emojiName) + resultVar0, resultVar1 := a.app.GetEmojiByName(c, emojiName) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -5848,7 +5848,7 @@ func (a *OpenTracingAppLayer) GetEmojiByName(emojiName string) (*model.Emoji, *m return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) { +func (a *OpenTracingAppLayer) GetEmojiImage(c request.CTX, emojiId string) ([]byte, string, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetEmojiImage") @@ -5860,7 +5860,7 @@ func (a *OpenTracingAppLayer) GetEmojiImage(emojiId string) ([]byte, string, *mo }() defer span.Finish() - resultVar0, resultVar1, resultVar2 := a.app.GetEmojiImage(emojiId) + resultVar0, resultVar1, resultVar2 := a.app.GetEmojiImage(c, emojiId) if resultVar2 != nil { span.LogFields(spanlog.Error(resultVar2)) @@ -5870,7 +5870,7 @@ func (a *OpenTracingAppLayer) GetEmojiImage(emojiId string) ([]byte, string, *mo return resultVar0, resultVar1, resultVar2 } -func (a *OpenTracingAppLayer) GetEmojiList(page int, perPage int, sort string) ([]*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) GetEmojiList(c request.CTX, page int, perPage int, sort string) ([]*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetEmojiList") @@ -5882,7 +5882,7 @@ func (a *OpenTracingAppLayer) GetEmojiList(page int, perPage int, sort string) ( }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetEmojiList(page, perPage, sort) + resultVar0, resultVar1 := a.app.GetEmojiList(c, page, perPage, sort) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -5892,7 +5892,7 @@ func (a *OpenTracingAppLayer) GetEmojiList(page int, perPage int, sort string) ( return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) GetEmojiStaticURL(emojiName string) (string, *model.AppError) { +func (a *OpenTracingAppLayer) GetEmojiStaticURL(c request.CTX, emojiName string) (string, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetEmojiStaticURL") @@ -5904,7 +5904,7 @@ func (a *OpenTracingAppLayer) GetEmojiStaticURL(emojiName string) (string, *mode }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetEmojiStaticURL(emojiName) + resultVar0, resultVar1 := a.app.GetEmojiStaticURL(c, emojiName) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -7043,7 +7043,7 @@ func (a *OpenTracingAppLayer) GetMessageForNotification(post *model.Post, transl return resultVar0 } -func (a *OpenTracingAppLayer) GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) GetMultipleEmojiByName(c request.CTX, names []string) ([]*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.GetMultipleEmojiByName") @@ -7055,7 +7055,7 @@ func (a *OpenTracingAppLayer) GetMultipleEmojiByName(names []string) ([]*model.E }() defer span.Finish() - resultVar0, resultVar1 := a.app.GetMultipleEmojiByName(names) + resultVar0, resultVar1 := a.app.GetMultipleEmojiByName(c, names) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -12505,7 +12505,7 @@ func (a *OpenTracingAppLayer) OriginChecker() func(*http.Request) bool { return resultVar0 } -func (a *OpenTracingAppLayer) OverrideIconURLIfEmoji(post *model.Post) { +func (a *OpenTracingAppLayer) OverrideIconURLIfEmoji(c request.CTX, post *model.Post) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.OverrideIconURLIfEmoji") @@ -12517,7 +12517,7 @@ func (a *OpenTracingAppLayer) OverrideIconURLIfEmoji(post *model.Post) { }() defer span.Finish() - a.app.OverrideIconURLIfEmoji(post) + a.app.OverrideIconURLIfEmoji(c, post) } func (a *OpenTracingAppLayer) PatchBot(botUserId string, botPatch *model.BotPatch) (*model.Bot, *model.AppError) { @@ -13067,7 +13067,7 @@ func (a *OpenTracingAppLayer) PostWithProxyRemovedFromImageURLs(post *model.Post return resultVar0 } -func (a *OpenTracingAppLayer) PreparePostForClient(originalPost *model.Post, isNewPost bool, isEditPost bool) *model.Post { +func (a *OpenTracingAppLayer) PreparePostForClient(c request.CTX, originalPost *model.Post, isNewPost bool, isEditPost bool) *model.Post { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.PreparePostForClient") @@ -13079,7 +13079,7 @@ func (a *OpenTracingAppLayer) PreparePostForClient(originalPost *model.Post, isN }() defer span.Finish() - resultVar0 := a.app.PreparePostForClient(originalPost, isNewPost, isEditPost) + resultVar0 := a.app.PreparePostForClient(c, originalPost, isNewPost, isEditPost) return resultVar0 } @@ -14637,7 +14637,7 @@ func (a *OpenTracingAppLayer) SearchChannelsUserNotIn(c request.CTX, teamID stri return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) SearchEmoji(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) { +func (a *OpenTracingAppLayer) SearchEmoji(c request.CTX, name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SearchEmoji") @@ -14649,7 +14649,7 @@ func (a *OpenTracingAppLayer) SearchEmoji(name string, prefixOnly bool, limit in }() defer span.Finish() - resultVar0, resultVar1 := a.app.SearchEmoji(name, prefixOnly, limit) + resultVar0, resultVar1 := a.app.SearchEmoji(c, name, prefixOnly, limit) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) @@ -17881,7 +17881,7 @@ func (a *OpenTracingAppLayer) UploadData(c *request.Context, us *model.UploadSes return resultVar0, resultVar1 } -func (a *OpenTracingAppLayer) UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError { +func (a *OpenTracingAppLayer) UploadEmojiImage(c request.CTX, id string, imageData *multipart.FileHeader) *model.AppError { origCtx := a.ctx span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UploadEmojiImage") @@ -17893,7 +17893,7 @@ func (a *OpenTracingAppLayer) UploadEmojiImage(id string, imageData *multipart.F }() defer span.Finish() - resultVar0 := a.app.UploadEmojiImage(id, imageData) + resultVar0 := a.app.UploadEmojiImage(c, id, imageData) if resultVar0 != nil { span.LogFields(spanlog.Error(resultVar0)) diff --git a/app/plugin_api.go b/app/plugin_api.go index 35f05b043f..21a33d2585 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -743,15 +743,15 @@ func (api *PluginAPI) SetProfileImage(userID string, data []byte) *model.AppErro } func (api *PluginAPI) GetEmojiList(sortBy string, page, perPage int) ([]*model.Emoji, *model.AppError) { - return api.app.GetEmojiList(page, perPage, sortBy) + return api.app.GetEmojiList(api.ctx, page, perPage, sortBy) } func (api *PluginAPI) GetEmojiByName(name string) (*model.Emoji, *model.AppError) { - return api.app.GetEmojiByName(name) + return api.app.GetEmojiByName(api.ctx, name) } func (api *PluginAPI) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) { - return api.app.GetEmoji(emojiId) + return api.app.GetEmoji(api.ctx, emojiId) } func (api *PluginAPI) CopyFileInfos(userID string, fileIDs []string) ([]string, *model.AppError) { @@ -796,7 +796,7 @@ func (api *PluginAPI) UploadFile(data []byte, channelID string, filename string) } func (api *PluginAPI) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) { - return api.app.GetEmojiImage(emojiId) + return api.app.GetEmojiImage(api.ctx, emojiId) } func (api *PluginAPI) GetTeamIcon(teamID string) ([]byte, *model.AppError) { diff --git a/app/post.go b/app/post.go index 7564396a8c..ff6cab3397 100644 --- a/app/post.go +++ b/app/post.go @@ -343,7 +343,7 @@ func (a *App) CreatePost(c request.CTX, post *model.Post, channel *model.Channel // Normally, we would let the API layer call PreparePostForClient, but we do it here since it also needs // to be done when we send the post over the websocket in handlePostEvents - rpost = a.PreparePostForClient(rpost, true, false) + rpost = a.PreparePostForClient(c, rpost, true, false) // Make sure poster is following the thread if *a.Config().ServiceSettings.ThreadAutoFollow && rpost.RootId != "" { diff --git a/app/post_metadata.go b/app/post_metadata.go index 676faca564..9d57bf83aa 100644 --- a/app/post_metadata.go +++ b/app/post_metadata.go @@ -66,7 +66,7 @@ func (a *App) PreparePostListForClient(c request.CTX, originalList *model.PostLi // OverrideIconURLIfEmoji changes the post icon override URL prop, if it has an emoji icon, // so that it points to the URL (relative) of the emoji - static if emoji is default, /api if custom. -func (a *App) OverrideIconURLIfEmoji(post *model.Post) { +func (a *App) OverrideIconURLIfEmoji(c request.CTX, post *model.Post) { prop, ok := post.GetProps()[model.PostPropsOverrideIconEmoji] if !ok || prop == nil { return @@ -83,20 +83,20 @@ func (a *App) OverrideIconURLIfEmoji(post *model.Post) { emojiName = strings.ReplaceAll(emojiName, ":", "") - if emojiURL, err := a.GetEmojiStaticURL(emojiName); err == nil { + if emojiURL, err := a.GetEmojiStaticURL(c, emojiName); err == nil { post.AddProp(model.PostPropsOverrideIconURL, emojiURL) } else { mlog.Warn("Failed to retrieve URL for overridden profile icon (emoji)", mlog.String("emojiName", emojiName), mlog.Err(err)) } } -func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost, isEditPost bool) *model.Post { +func (a *App) PreparePostForClient(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post { post := originalPost.Clone() // Proxy image links before constructing metadata so that requests go through the proxy post = a.PostWithProxyAddedToImageURLs(post) - a.OverrideIconURLIfEmoji(post) + a.OverrideIconURLIfEmoji(c, post) if post.Metadata == nil { post.Metadata = &model.PostMetadata{} } @@ -109,7 +109,7 @@ func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost, isEditPo } // Emojis and reaction counts - if emojis, reactions, err := a.getEmojisAndReactionsForPost(post); err != nil { + if emojis, reactions, err := a.getEmojisAndReactionsForPost(c, post); err != nil { mlog.Warn("Failed to get emojis and reactions for a post", mlog.String("post_id", post.Id), mlog.Err(err)) } else { post.Metadata.Emojis = emojis @@ -127,7 +127,7 @@ func (a *App) PreparePostForClient(originalPost *model.Post, isNewPost, isEditPo } func (a *App) PreparePostForClientWithEmbedsAndImages(c request.CTX, originalPost *model.Post, isNewPost, isEditPost bool) *model.Post { - post := a.PreparePostForClient(originalPost, isNewPost, isEditPost) + post := a.PreparePostForClient(c, originalPost, isNewPost, isEditPost) post = a.getEmbedsAndImages(c, post, isNewPost) return post } @@ -212,7 +212,7 @@ func (a *App) getFileMetadataForPost(post *model.Post, fromMaster bool) ([]*mode return a.GetFileInfosForPost(post.Id, fromMaster, false) } -func (a *App) getEmojisAndReactionsForPost(post *model.Post) ([]*model.Emoji, []*model.Reaction, *model.AppError) { +func (a *App) getEmojisAndReactionsForPost(c request.CTX, post *model.Post) ([]*model.Emoji, []*model.Reaction, *model.AppError) { var reactions []*model.Reaction if post.HasReactions { var err *model.AppError @@ -222,7 +222,7 @@ func (a *App) getEmojisAndReactionsForPost(post *model.Post) ([]*model.Emoji, [] } } - emojis, err := a.getCustomEmojisForPost(post, reactions) + emojis, err := a.getCustomEmojisForPost(c, post, reactions) if err != nil { return nil, nil, err } @@ -395,7 +395,7 @@ func getEmojiNamesForPost(post *model.Post, reactions []*model.Reaction) []strin return names } -func (a *App) getCustomEmojisForPost(post *model.Post, reactions []*model.Reaction) ([]*model.Emoji, *model.AppError) { +func (a *App) getCustomEmojisForPost(c request.CTX, post *model.Post, reactions []*model.Reaction) ([]*model.Emoji, *model.AppError) { if !*a.Config().ServiceSettings.EnableCustomEmoji { // Only custom emoji are returned return []*model.Emoji{}, nil @@ -407,7 +407,7 @@ func (a *App) getCustomEmojisForPost(post *model.Post, reactions []*model.Reacti return []*model.Emoji{}, nil } - return a.GetMultipleEmojiByName(names) + return a.GetMultipleEmojiByName(c, names) } func (a *App) isLinkAllowedForPreview(link string) bool { diff --git a/app/post_metadata_test.go b/app/post_metadata_test.go index b1bf0b24f7..29e9ad8c4d 100644 --- a/app/post_metadata_test.go +++ b/app/post_metadata_test.go @@ -125,7 +125,7 @@ func TestPreparePostForClient(t *testing.T) { Message: message, } - clientPost := th.App.PreparePostForClient(post, false, true) + clientPost := th.App.PreparePostForClient(th.Context, post, false, true) t.Run("doesn't mutate provided post", func(t *testing.T) { assert.NotEqual(t, clientPost, post, "should've returned a new post") @@ -151,7 +151,7 @@ func TestPreparePostForClient(t *testing.T) { post := th.CreatePost(th.BasicChannel) - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) assert.False(t, clientPost == post, "should've returned a new post") assert.Equal(t, clientPost, post, "shouldn't have changed any metadata") @@ -167,7 +167,7 @@ func TestPreparePostForClient(t *testing.T) { reaction3 := th.AddReactionToPost(post, th.BasicUser2, "ice_cream") post.HasReactions = true - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) assert.Len(t, clientPost.Metadata.Reactions, 3, "should've populated Reactions") assert.Equal(t, reaction1, clientPost.Metadata.Reactions[0], "first reaction is incorrect") @@ -194,7 +194,7 @@ func TestPreparePostForClient(t *testing.T) { var clientPost *model.Post assert.Eventually(t, func() bool { - clientPost = th.App.PreparePostForClient(post, false, false) + clientPost = th.App.PreparePostForClient(th.Context, post, false, false) return assert.ObjectsAreEqual([]*model.FileInfo{fileInfo}, clientPost.Metadata.Files) }, time.Second, 10*time.Millisecond) @@ -230,7 +230,7 @@ func TestPreparePostForClient(t *testing.T) { th.AddReactionToPost(post, th.BasicUser2, "angry") post.HasReactions = true - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) t.Run("populates emojis", func(t *testing.T) { assert.ElementsMatch(t, []*model.Emoji{}, clientPost.Metadata.Emojis, "should've populated empty Emojis") @@ -275,7 +275,7 @@ func TestPreparePostForClient(t *testing.T) { th.AddReactionToPost(post, th.BasicUser2, "angry") post.HasReactions = true - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) t.Run("populates emojis", func(t *testing.T) { assert.ElementsMatch(t, []*model.Emoji{emoji1, emoji2, emoji3, emoji4}, clientPost.Metadata.Emojis, "should've populated post.Emojis") @@ -307,7 +307,7 @@ func TestPreparePostForClient(t *testing.T) { post.AddProp(model.PostPropsOverrideIconURL, url) post.AddProp(model.PostPropsOverrideIconEmoji, emoji) - return th.App.PreparePostForClient(post, false, false) + return th.App.PreparePostForClient(th.Context, post, false, false) } emoji := "basketball" @@ -361,7 +361,7 @@ func TestPreparePostForClient(t *testing.T) { }, th.BasicChannel, false, true) require.Nil(t, err) - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) t.Run("populates image dimensions", func(t *testing.T) { imageDimensions := clientPost.Metadata.Images @@ -394,7 +394,7 @@ func TestPreparePostForClient(t *testing.T) { post.AddProp(model.PostPropsOverrideIconEmoji, true) require.NotPanics(t, func() { - _ = th.App.PreparePostForClient(post, false, false) + _ = th.App.PreparePostForClient(th.Context, post, false, false) }) }) @@ -459,7 +459,7 @@ func TestPreparePostForClient(t *testing.T) { }, th.BasicChannel, false, true) require.Nil(t, err) - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) firstEmbed := clientPost.Metadata.Embeds[0] ogData := firstEmbed.Data.(*opengraph.OpenGraph) @@ -547,7 +547,7 @@ func TestPreparePostForClient(t *testing.T) { // DeleteAt isn't set on the post returned by App.DeletePost post.DeleteAt = model.GetMillis() - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) assert.NotEqual(t, nil, clientPost.Metadata, "should've populated Metadata“") assert.Equal(t, "", clientPost.Message, "should've cleaned post content") @@ -761,7 +761,7 @@ func TestPreparePostForClient(t *testing.T) { }, th.BasicChannel, false, true) require.Nil(t, err) - clientPost := th.App.PreparePostForClient(previewPost, false, false) + clientPost := th.App.PreparePostForClient(th.Context, previewPost, false, false) firstEmbed := clientPost.Metadata.Embeds[0] preview := firstEmbed.Data.(*model.PreviewPost) require.Equal(t, referencedPost.Id, preview.PostID) @@ -770,13 +770,13 @@ func TestPreparePostForClient(t *testing.T) { *cfg.ServiceSettings.EnablePermalinkPreviews = false }) - th.App.PreparePostForClient(previewPost, false, false) + th.App.PreparePostForClient(th.Context, previewPost, false, false) th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnablePermalinkPreviews = true }) - clientPost2 := th.App.PreparePostForClient(previewPost, false, false) + clientPost2 := th.App.PreparePostForClient(th.Context, previewPost, false, false) firstEmbed2 := clientPost2.Metadata.Embeds[0] preview2 := firstEmbed2.Data.(*model.PreviewPost) require.Equal(t, referencedPost.Id, preview2.PostID) @@ -828,7 +828,7 @@ func testProxyLinkedImage(t *testing.T, th *TestHelper, shouldProxy bool) { Message: fmt.Sprintf(postTemplate, imageURL), } - clientPost := th.App.PreparePostForClient(post, false, false) + clientPost := th.App.PreparePostForClient(th.Context, post, false, false) if shouldProxy { assert.Equal(t, fmt.Sprintf(postTemplate, imageURL), post.Message, "should not have mutated original post") @@ -1506,7 +1506,7 @@ func TestGetCustomEmojisForPost(t *testing.T) { }, } - emojisForPost, err := th.App.getCustomEmojisForPost(post, reactions) + emojisForPost, err := th.App.getCustomEmojisForPost(th.Context, post, reactions) assert.Nil(t, err, "failed to get emojis for post") assert.ElementsMatch(t, emojisForPost, emojis, "received incorrect emojis") }) @@ -1523,7 +1523,7 @@ func TestGetCustomEmojisForPost(t *testing.T) { }, } - emojisForPost, err := th.App.getCustomEmojisForPost(post, nil) + emojisForPost, err := th.App.getCustomEmojisForPost(th.Context, post, nil) assert.Nil(t, err, "failed to get emojis for post") assert.ElementsMatch(t, emojisForPost, []*model.Emoji{emojis[0]}, "received incorrect emojis") }) @@ -1534,7 +1534,7 @@ func TestGetCustomEmojisForPost(t *testing.T) { Props: map[string]any{}, } - emojisForPost, err := th.App.getCustomEmojisForPost(post, nil) + emojisForPost, err := th.App.getCustomEmojisForPost(th.Context, post, nil) assert.Nil(t, err, "failed to get emojis for post") assert.ElementsMatch(t, emojisForPost, []*model.Emoji{}, "should have received no emojis") })