[MM-48060] Added context for emoji (#21561)

Co-authored-by: Tim Scheuermann <tim.scheuermann@mattermost.com>
Этот коммит содержится в:
Tim Scheuermann
2022-11-03 08:54:59 +01:00
коммит произвёл GitHub
родитель a4103f8c77
Коммит 8844ed1c1c
11 изменённых файлов: 95 добавлений и 94 удалений

Просмотреть файл

@@ -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

Просмотреть файл

@@ -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)
}

Просмотреть файл

@@ -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)

Просмотреть файл

@@ -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 {

Просмотреть файл

@@ -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

Просмотреть файл

@@ -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")
}

Просмотреть файл

@@ -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))

Просмотреть файл

@@ -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) {

Просмотреть файл

@@ -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 != "" {

Просмотреть файл

@@ -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 {

Просмотреть файл

@@ -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")
})