diff --git a/app/channel_test.go b/app/channel_test.go index be7c0e93d2..2fd3506996 100644 --- a/app/channel_test.go +++ b/app/channel_test.go @@ -644,7 +644,7 @@ func TestAddChannelMemberNoUserRequestor(t *testing.T) { } assert.Equal(t, groupUserIds, channelMemberHistoryUserIds) - postList, nErr := th.App.Srv().Store.Post().GetPosts(model.GetPostsOptions{ChannelId: channel.Id, Page: 0, PerPage: 1}, false) + postList, nErr := th.App.Srv().Store.Post().GetPosts(model.GetPostsOptions{ChannelId: channel.Id, Page: 0, PerPage: 1}, false, map[string]bool{}) require.NoError(t, nErr) if assert.Len(t, postList.Order, 1) { diff --git a/app/file.go b/app/file.go index 635ecd391d..817fd663ae 100644 --- a/app/file.go +++ b/app/file.go @@ -367,7 +367,7 @@ func (a *App) MigrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo { fileMigrationLock.Lock() defer fileMigrationLock.Unlock() - result, nErr := a.Srv().Store.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + result, nErr := a.Srv().Store.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", a.Config().GetSanitizeOptions()) if nErr != nil { mlog.Error("Unable to get post when migrating post to use FileInfos", mlog.Err(nErr), mlog.String("post_id", post.Id)) return []*model.FileInfo{} diff --git a/app/post.go b/app/post.go index 51dc176349..83ddf25bd7 100644 --- a/app/post.go +++ b/app/post.go @@ -176,7 +176,7 @@ func (a *App) CreatePost(c *request.Context, post *model.Post, channel *model.Ch if post.RootId != "" { pchan = make(chan store.StoreResult, 1) go func() { - r, pErr := a.Srv().Store.Post().Get(sqlstore.WithMaster(context.Background()), post.RootId, model.GetPostsOptions{}, "") + r, pErr := a.Srv().Store.Post().Get(sqlstore.WithMaster(context.Background()), post.RootId, model.GetPostsOptions{}, "", a.Config().GetSanitizeOptions()) pchan <- store.StoreResult{Data: r, NErr: pErr} close(pchan) }() @@ -567,7 +567,7 @@ func (a *App) DeleteEphemeralPost(userID, postID string) { func (a *App) UpdatePost(c *request.Context, post *model.Post, safeUpdate bool) (*model.Post, *model.AppError) { post.SanitizeProps() - postLists, nErr := a.Srv().Store.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + postLists, nErr := a.Srv().Store.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", a.Config().GetSanitizeOptions()) if nErr != nil { var nfErr *store.ErrNotFound var invErr *store.ErrInvalidInput @@ -798,7 +798,7 @@ func (a *App) PatchPost(c *request.Context, postID string, patch *model.PostPatc } func (a *App) GetPostsPage(options model.GetPostsOptions) (*model.PostList, *model.AppError) { - postList, err := a.Srv().Store.Post().GetPosts(options, false) + postList, err := a.Srv().Store.Post().GetPosts(options, false, a.Config().GetSanitizeOptions()) if err != nil { var invErr *store.ErrInvalidInput switch { @@ -813,7 +813,7 @@ func (a *App) GetPostsPage(options model.GetPostsOptions) (*model.PostList, *mod } func (a *App) GetPosts(channelID string, offset int, limit int) (*model.PostList, *model.AppError) { - postList, err := a.Srv().Store.Post().GetPosts(model.GetPostsOptions{ChannelId: channelID, Page: offset, PerPage: limit}, true) + postList, err := a.Srv().Store.Post().GetPosts(model.GetPostsOptions{ChannelId: channelID, Page: offset, PerPage: limit}, true, a.Config().GetSanitizeOptions()) if err != nil { var invErr *store.ErrInvalidInput switch { @@ -832,7 +832,7 @@ func (a *App) GetPostsEtag(channelID string, collapsedThreads bool) string { } func (a *App) GetPostsSince(options model.GetPostsSinceOptions) (*model.PostList, *model.AppError) { - postList, err := a.Srv().Store.Post().GetPostsSince(options, true) + postList, err := a.Srv().Store.Post().GetPostsSince(options, true, a.Config().GetSanitizeOptions()) if err != nil { return nil, model.NewAppError("GetPostsSince", "app.post.get_posts_since.app_error", nil, err.Error(), http.StatusInternalServerError) } @@ -856,7 +856,7 @@ func (a *App) GetSinglePost(postID string, includeDeleted bool) (*model.Post, *m } func (a *App) GetPostThread(postID string, opts model.GetPostsOptions, userID string) (*model.PostList, *model.AppError) { - posts, err := a.Srv().Store.Post().Get(context.Background(), postID, opts, userID) + posts, err := a.Srv().Store.Post().Get(context.Background(), postID, opts, userID, a.Config().GetSanitizeOptions()) if err != nil { var nfErr *store.ErrNotFound var invErr *store.ErrInvalidInput @@ -901,7 +901,7 @@ func (a *App) GetFlaggedPostsForChannel(userID, channelID string, offset int, li } func (a *App) GetPermalinkPost(c *request.Context, postID string, userID string) (*model.PostList, *model.AppError) { - list, nErr := a.Srv().Store.Post().Get(context.Background(), postID, model.GetPostsOptions{}, userID) + list, nErr := a.Srv().Store.Post().Get(context.Background(), postID, model.GetPostsOptions{}, userID, a.Config().GetSanitizeOptions()) if nErr != nil { var nfErr *store.ErrNotFound var invErr *store.ErrInvalidInput @@ -933,7 +933,7 @@ func (a *App) GetPermalinkPost(c *request.Context, postID string, userID string) } func (a *App) GetPostsBeforePost(options model.GetPostsOptions) (*model.PostList, *model.AppError) { - postList, err := a.Srv().Store.Post().GetPostsBefore(options) + postList, err := a.Srv().Store.Post().GetPostsBefore(options, a.Config().GetSanitizeOptions()) if err != nil { var invErr *store.ErrInvalidInput switch { @@ -948,7 +948,7 @@ func (a *App) GetPostsBeforePost(options model.GetPostsOptions) (*model.PostList } func (a *App) GetPostsAfterPost(options model.GetPostsOptions) (*model.PostList, *model.AppError) { - postList, err := a.Srv().Store.Post().GetPostsAfter(options) + postList, err := a.Srv().Store.Post().GetPostsAfter(options, a.Config().GetSanitizeOptions()) if err != nil { var invErr *store.ErrInvalidInput switch { @@ -965,10 +965,11 @@ func (a *App) GetPostsAfterPost(options model.GetPostsOptions) (*model.PostList, func (a *App) GetPostsAroundPost(before bool, options model.GetPostsOptions) (*model.PostList, *model.AppError) { var postList *model.PostList var err error + sanitize := a.Config().GetSanitizeOptions() if before { - postList, err = a.Srv().Store.Post().GetPostsBefore(options) + postList, err = a.Srv().Store.Post().GetPostsBefore(options, sanitize) } else { - postList, err = a.Srv().Store.Post().GetPostsAfter(options) + postList, err = a.Srv().Store.Post().GetPostsAfter(options, sanitize) } if err != nil { diff --git a/services/sharedchannel/permalink.go b/services/sharedchannel/permalink.go index e526146a51..8a81c87a82 100644 --- a/services/sharedchannel/permalink.go +++ b/services/sharedchannel/permalink.go @@ -34,7 +34,7 @@ func (scs *Service) processPermalinkToRemote(p *model.Post) string { opts := model.GetPostsOptions{ SkipFetchThreads: true, } - postList, err := scs.server.GetStore().Post().Get(context.Background(), postID, opts, "") + postList, err := scs.server.GetStore().Post().Get(context.Background(), postID, opts, "", map[string]bool{}) if err != nil { scs.server.GetLogger().Log(mlog.LvlSharedChannelServiceWarn, "Unable to get post during replacing permalinks", mlog.Err(err)) return msg diff --git a/services/sharedchannel/permalink_test.go b/services/sharedchannel/permalink_test.go index 117f23b3e6..27d858abae 100644 --- a/services/sharedchannel/permalink_test.go +++ b/services/sharedchannel/permalink_test.go @@ -27,7 +27,7 @@ func TestProcessPermalinkToRemote(t *testing.T) { utils.TranslationsPreInit() pl := &model.PostList{} - mockPostStore.On("Get", context.Background(), "postID", model.GetPostsOptions{SkipFetchThreads: true}, "").Return(pl, nil) + mockPostStore.On("Get", context.Background(), "postID", model.GetPostsOptions{SkipFetchThreads: true}, "", map[string]bool{}).Return(pl, nil) mockStore.On("Post").Return(&mockPostStore) diff --git a/store/localcachelayer/main_test.go b/store/localcachelayer/main_test.go index ed82cb3d44..fd8ec7b451 100644 --- a/store/localcachelayer/main_test.go +++ b/store/localcachelayer/main_test.go @@ -104,8 +104,8 @@ func getMockStore() *mocks.Store { fakePosts := &model.PostList{} fakeOptions := model.GetPostsOptions{ChannelId: "123", PerPage: 30} mockPostStore := mocks.PostStore{} - mockPostStore.On("GetPosts", fakeOptions, true).Return(fakePosts, nil) - mockPostStore.On("GetPosts", fakeOptions, false).Return(fakePosts, nil) + mockPostStore.On("GetPosts", fakeOptions, true, map[string]bool{}).Return(fakePosts, nil) + mockPostStore.On("GetPosts", fakeOptions, false, map[string]bool{}).Return(fakePosts, nil) mockPostStore.On("InvalidateLastPostTimeCache", "12360") mockPostStoreOptions := model.GetPostsSinceOptions{ @@ -119,8 +119,8 @@ func getMockStore() *mocks.Store { mockPostStore.On("InvalidateLastPostTimeCache", "channelId") mockPostStore.On("GetEtag", "channelId", true, false).Return(mockPostStoreEtagResult) mockPostStore.On("GetEtag", "channelId", false, false).Return(mockPostStoreEtagResult) - mockPostStore.On("GetPostsSince", mockPostStoreOptions, true).Return(model.NewPostList(), nil) - mockPostStore.On("GetPostsSince", mockPostStoreOptions, false).Return(model.NewPostList(), nil) + mockPostStore.On("GetPostsSince", mockPostStoreOptions, true, map[string]bool{}).Return(model.NewPostList(), nil) + mockPostStore.On("GetPostsSince", mockPostStoreOptions, false, map[string]bool{}).Return(model.NewPostList(), nil) mockStore.On("Post").Return(&mockPostStore) fakeTermsOfService := model.TermsOfService{Id: "123", CreateAt: 11111, UserId: "321", Text: "Terms of service test"} diff --git a/store/localcachelayer/post_layer.go b/store/localcachelayer/post_layer.go index 331367cd0e..da5c091eca 100644 --- a/store/localcachelayer/post_layer.go +++ b/store/localcachelayer/post_layer.go @@ -89,7 +89,7 @@ func (s LocalCachePostStore) GetEtag(channelId string, allowFromCache, collapsed return result } -func (s LocalCachePostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { +func (s LocalCachePostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { if allowFromCache { // If the last post in the channel's time is less than or equal to the time we are getting posts since, // we can safely return no posts. @@ -100,7 +100,7 @@ func (s LocalCachePostStore) GetPostsSince(options model.GetPostsSinceOptions, a } } - list, err := s.PostStore.GetPostsSince(options, allowFromCache) + list, err := s.PostStore.GetPostsSince(options, allowFromCache, sanitizeOptions) latestUpdate := options.Time if err == nil { @@ -115,9 +115,9 @@ func (s LocalCachePostStore) GetPostsSince(options model.GetPostsSinceOptions, a return list, err } -func (s LocalCachePostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) { +func (s LocalCachePostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { if !allowFromCache { - return s.PostStore.GetPosts(options, allowFromCache) + return s.PostStore.GetPosts(options, allowFromCache, sanitizeOptions) } offset := options.PerPage * options.Page @@ -129,7 +129,7 @@ func (s LocalCachePostStore) GetPosts(options model.GetPostsOptions, allowFromCa } } - list, err := s.PostStore.GetPosts(options, false) + list, err := s.PostStore.GetPosts(options, false, sanitizeOptions) if err != nil { return nil, err } diff --git a/store/localcachelayer/post_layer_test.go b/store/localcachelayer/post_layer_test.go index bef4991949..17a8a2081d 100644 --- a/store/localcachelayer/post_layer_test.go +++ b/store/localcachelayer/post_layer_test.go @@ -91,12 +91,12 @@ func TestPostStoreLastPostTimeCache(t *testing.T) { expectedResult := model.NewPostList() - list, err := cachedStore.Post().GetPostsSince(fakeOptions, true) + list, err := cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, list, expectedResult) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 1) - list, err = cachedStore.Post().GetPostsSince(fakeOptions, true) + list, err = cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, list, expectedResult) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 1) @@ -108,9 +108,9 @@ func TestPostStoreLastPostTimeCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Post().GetPostsSince(fakeOptions, true) + cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 1) - cachedStore.Post().GetPostsSince(fakeOptions, false) + cachedStore.Post().GetPostsSince(fakeOptions, false, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 2) }) @@ -120,10 +120,10 @@ func TestPostStoreLastPostTimeCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Post().GetPostsSince(fakeOptions, true) + cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 1) cachedStore.Post().InvalidateLastPostTimeCache(channelId) - cachedStore.Post().GetPostsSince(fakeOptions, true) + cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 2) }) @@ -133,10 +133,10 @@ func TestPostStoreLastPostTimeCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - cachedStore.Post().GetPostsSince(fakeOptions, true) + cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 1) cachedStore.Post().ClearCaches() - cachedStore.Post().GetPostsSince(fakeOptions, true) + cachedStore.Post().GetPostsSince(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPostsSince", 2) }) } @@ -151,12 +151,12 @@ func TestPostStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true) + gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, fakePosts, gotPosts) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 1) - _, _ = cachedStore.Post().GetPosts(fakeOptions, true) + _, _ = cachedStore.Post().GetPosts(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 1) }) @@ -166,12 +166,12 @@ func TestPostStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true) + gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, fakePosts, gotPosts) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 1) - _, _ = cachedStore.Post().GetPosts(fakeOptions, false) + _, _ = cachedStore.Post().GetPosts(fakeOptions, false, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 2) }) @@ -181,14 +181,14 @@ func TestPostStoreCache(t *testing.T) { cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) require.NoError(t, err) - gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true) + gotPosts, err := cachedStore.Post().GetPosts(fakeOptions, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, fakePosts, gotPosts) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 1) cachedStore.Post().InvalidateLastPostTimeCache("12360") - _, _ = cachedStore.Post().GetPosts(fakeOptions, true) + _, _ = cachedStore.Post().GetPosts(fakeOptions, true, map[string]bool{}) mockStore.Post().(*mocks.PostStore).AssertNumberOfCalls(t, "GetPosts", 1) }) diff --git a/store/opentracinglayer/opentracinglayer.go b/store/opentracinglayer/opentracinglayer.go index 32361f664f..65dd8757e1 100644 --- a/store/opentracinglayer/opentracinglayer.go +++ b/store/opentracinglayer/opentracinglayer.go @@ -5486,7 +5486,7 @@ func (s *OpenTracingLayerPostStore) DeleteOrphanedRows(limit int) (int64, error) return result, err } -func (s *OpenTracingLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) { +func (s *OpenTracingLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.Get") s.Root.Store.SetContext(newCtx) @@ -5495,7 +5495,7 @@ func (s *OpenTracingLayerPostStore) Get(ctx context.Context, id string, opts mod }() defer span.Finish() - result, err := s.PostStore.Get(ctx, id, opts, userID) + result, err := s.PostStore.Get(ctx, id, opts, userID, sanitizeOptions) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) @@ -5736,7 +5736,7 @@ func (s *OpenTracingLayerPostStore) GetPostIdBeforeTime(channelID string, time i return result, err } -func (s *OpenTracingLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) { +func (s *OpenTracingLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPosts") s.Root.Store.SetContext(newCtx) @@ -5745,7 +5745,7 @@ func (s *OpenTracingLayerPostStore) GetPosts(options model.GetPostsOptions, allo }() defer span.Finish() - result, err := s.PostStore.GetPosts(options, allowFromCache) + result, err := s.PostStore.GetPosts(options, allowFromCache, sanitizeOptions) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) @@ -5754,7 +5754,7 @@ func (s *OpenTracingLayerPostStore) GetPosts(options model.GetPostsOptions, allo return result, err } -func (s *OpenTracingLayerPostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) { +func (s *OpenTracingLayerPostStore) GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostsAfter") s.Root.Store.SetContext(newCtx) @@ -5763,7 +5763,7 @@ func (s *OpenTracingLayerPostStore) GetPostsAfter(options model.GetPostsOptions) }() defer span.Finish() - result, err := s.PostStore.GetPostsAfter(options) + result, err := s.PostStore.GetPostsAfter(options, sanitizeOptions) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) @@ -5790,7 +5790,7 @@ func (s *OpenTracingLayerPostStore) GetPostsBatchForIndexing(startTime int64, st return result, err } -func (s *OpenTracingLayerPostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) { +func (s *OpenTracingLayerPostStore) GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostsBefore") s.Root.Store.SetContext(newCtx) @@ -5799,7 +5799,7 @@ func (s *OpenTracingLayerPostStore) GetPostsBefore(options model.GetPostsOptions }() defer span.Finish() - result, err := s.PostStore.GetPostsBefore(options) + result, err := s.PostStore.GetPostsBefore(options, sanitizeOptions) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) @@ -5844,7 +5844,7 @@ func (s *OpenTracingLayerPostStore) GetPostsCreatedAt(channelID string, time int return result, err } -func (s *OpenTracingLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { +func (s *OpenTracingLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { origCtx := s.Root.Store.Context() span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetPostsSince") s.Root.Store.SetContext(newCtx) @@ -5853,7 +5853,7 @@ func (s *OpenTracingLayerPostStore) GetPostsSince(options model.GetPostsSinceOpt }() defer span.Finish() - result, err := s.PostStore.GetPostsSince(options, allowFromCache) + result, err := s.PostStore.GetPostsSince(options, allowFromCache, sanitizeOptions) if err != nil { span.LogFields(spanlog.Error(err)) ext.Error.Set(span, true) diff --git a/store/retrylayer/retrylayer.go b/store/retrylayer/retrylayer.go index 6f816283e5..1965dac03e 100644 --- a/store/retrylayer/retrylayer.go +++ b/store/retrylayer/retrylayer.go @@ -6226,11 +6226,11 @@ func (s *RetryLayerPostStore) DeleteOrphanedRows(limit int) (int64, error) { } -func (s *RetryLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) { +func (s *RetryLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) { tries := 0 for { - result, err := s.PostStore.Get(ctx, id, opts, userID) + result, err := s.PostStore.Get(ctx, id, opts, userID, sanitizeOptions) if err == nil { return result, nil } @@ -6490,11 +6490,11 @@ func (s *RetryLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, } -func (s *RetryLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) { +func (s *RetryLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { tries := 0 for { - result, err := s.PostStore.GetPosts(options, allowFromCache) + result, err := s.PostStore.GetPosts(options, allowFromCache, sanitizeOptions) if err == nil { return result, nil } @@ -6511,11 +6511,11 @@ func (s *RetryLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromC } -func (s *RetryLayerPostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) { +func (s *RetryLayerPostStore) GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { tries := 0 for { - result, err := s.PostStore.GetPostsAfter(options) + result, err := s.PostStore.GetPostsAfter(options, sanitizeOptions) if err == nil { return result, nil } @@ -6553,11 +6553,11 @@ func (s *RetryLayerPostStore) GetPostsBatchForIndexing(startTime int64, startPos } -func (s *RetryLayerPostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) { +func (s *RetryLayerPostStore) GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { tries := 0 for { - result, err := s.PostStore.GetPostsBefore(options) + result, err := s.PostStore.GetPostsBefore(options, sanitizeOptions) if err == nil { return result, nil } @@ -6616,11 +6616,11 @@ func (s *RetryLayerPostStore) GetPostsCreatedAt(channelID string, time int64) ([ } -func (s *RetryLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { +func (s *RetryLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { tries := 0 for { - result, err := s.PostStore.GetPostsSince(options, allowFromCache) + result, err := s.PostStore.GetPostsSince(options, allowFromCache, sanitizeOptions) if err == nil { return result, nil } diff --git a/store/searchlayer/post_layer.go b/store/searchlayer/post_layer.go index 9590fe3cfb..d06cf99e45 100644 --- a/store/searchlayer/post_layer.go +++ b/store/searchlayer/post_layer.go @@ -111,7 +111,7 @@ func (s SearchPostStore) Delete(postId string, date int64, deletedByID string) e opts := model.GetPostsOptions{ SkipFetchThreads: true, } - postList, err2 := s.PostStore.Get(context.Background(), postId, opts, "") + postList, err2 := s.PostStore.Get(context.Background(), postId, opts, "", map[string]bool{}) if postList != nil && len(postList.Order) > 0 { if err2 != nil { s.deletePostIndex(postList.Posts[postList.Order[0]]) diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index 6a4dbf8ef7..cf1bee5176 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -549,7 +549,7 @@ func (s *SqlPostStore) buildFlaggedPostChannelFilterClause(channelId string, que return "AND ChannelId = ?", append(queryParams, channelId) } -func (s *SqlPostStore) getPostWithCollapsedThreads(id, userID string, opts model.GetPostsOptions) (*model.PostList, error) { +func (s *SqlPostStore) getPostWithCollapsedThreads(id, userID string, opts model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { if id == "" { return nil, store.NewErrInvalidInput("Post", "id", id) } @@ -659,7 +659,7 @@ func (s *SqlPostStore) getPostWithCollapsedThreads(id, userID string, opts model posts = posts[:len(posts)-1] } - list, err := s.prepareThreadedResponse([]*postWithExtra{&post}, opts.CollapsedThreadsExtended, false) + list, err := s.prepareThreadedResponse([]*postWithExtra{&post}, opts.CollapsedThreadsExtended, false, sanitizeOptions) if err != nil { return nil, err } @@ -672,9 +672,9 @@ func (s *SqlPostStore) getPostWithCollapsedThreads(id, userID string, opts model return list, nil } -func (s *SqlPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) { +func (s *SqlPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) { if opts.CollapsedThreads { - return s.getPostWithCollapsedThreads(id, userID, opts) + return s.getPostWithCollapsedThreads(id, userID, opts, sanitizeOptions) } pl := model.NewPostList() @@ -1051,7 +1051,7 @@ func (s *SqlPostStore) PermanentDeleteByChannel(channelId string) error { return nil } -func (s *SqlPostStore) prepareThreadedResponse(posts []*postWithExtra, extended, reversed bool) (*model.PostList, error) { +func (s *SqlPostStore) prepareThreadedResponse(posts []*postWithExtra, extended, reversed bool, sanitizeOptions map[string]bool) (*model.PostList, error) { list := model.NewPostList() var userIds []string userIdMap := map[string]bool{} @@ -1071,7 +1071,7 @@ func (s *SqlPostStore) prepareThreadedResponse(posts []*postWithExtra, extended, return nil, err } for _, user := range users { - user.SanitizeProfile(map[string]bool{}) + user.SanitizeProfile(sanitizeOptions) usersMap[user.Id] = user } } else { @@ -1114,7 +1114,7 @@ func (s *SqlPostStore) prepareThreadedResponse(posts []*postWithExtra, extended, return list, nil } -func (s *SqlPostStore) getPostsCollapsedThreads(options model.GetPostsOptions) (*model.PostList, error) { +func (s *SqlPostStore) getPostsCollapsedThreads(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { var columns []string for _, c := range postSliceColumns() { columns = append(columns, "Posts."+c) @@ -1145,15 +1145,15 @@ func (s *SqlPostStore) getPostsCollapsedThreads(options model.GetPostsOptions) ( return nil, errors.Wrapf(err, "failed to find Posts with channelId=%s", options.ChannelId) } - return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false) + return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false, sanitizeOptions) } -func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, _ bool) (*model.PostList, error) { +func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, _ bool, sanitizeOptions map[string]bool) (*model.PostList, error) { if options.PerPage > 1000 { return nil, store.NewErrInvalidInput("Post", "", options.PerPage) } if options.CollapsedThreads { - return s.getPostsCollapsedThreads(options) + return s.getPostsCollapsedThreads(options, sanitizeOptions) } offset := options.PerPage * options.Page @@ -1199,7 +1199,7 @@ func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, _ bool) (*model.P return list, nil } -func (s *SqlPostStore) getPostsSinceCollapsedThreads(options model.GetPostsSinceOptions) (*model.PostList, error) { +func (s *SqlPostStore) getPostsSinceCollapsedThreads(options model.GetPostsSinceOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { var columns []string for _, c := range postSliceColumns() { columns = append(columns, "Posts."+c) @@ -1227,13 +1227,13 @@ func (s *SqlPostStore) getPostsSinceCollapsedThreads(options model.GetPostsSince if err != nil { return nil, errors.Wrapf(err, "failed to find Posts with channelId=%s", options.ChannelId) } - return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false) + return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false, sanitizeOptions) } //nolint:unparam -func (s *SqlPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { +func (s *SqlPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { if options.CollapsedThreads { - return s.getPostsSinceCollapsedThreads(options) + return s.getPostsSinceCollapsedThreads(options, sanitizeOptions) } posts := []*model.Post{} @@ -1378,15 +1378,15 @@ func (s *SqlPostStore) GetPostsSinceForSync(options model.GetPostsSinceForSyncOp return posts, cursor, nil } -func (s *SqlPostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) { - return s.getPostsAround(true, options) +func (s *SqlPostStore) GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { + return s.getPostsAround(true, options, sanitizeOptions) } -func (s *SqlPostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) { - return s.getPostsAround(false, options) +func (s *SqlPostStore) GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { + return s.getPostsAround(false, options, sanitizeOptions) } -func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions) (*model.PostList, error) { +func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { if options.Page < 0 { return nil, store.NewErrInvalidInput("Post", "", options.Page) } @@ -1492,7 +1492,7 @@ func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions } } - list, err := s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, !before) + list, err := s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, !before, sanitizeOptions) if err != nil { return nil, err } diff --git a/store/store.go b/store/store.go index e858153d62..1539c2ac39 100644 --- a/store/store.go +++ b/store/store.go @@ -336,19 +336,19 @@ type PostStore interface { SaveMultiple(posts []*model.Post) ([]*model.Post, int, error) Save(post *model.Post) (*model.Post, error) Update(newPost *model.Post, oldPost *model.Post) (*model.Post, error) - Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) + Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) GetSingle(id string, inclDeleted bool) (*model.Post, error) Delete(postID string, time int64, deleteByID string) error PermanentDeleteByUser(userID string) error PermanentDeleteByChannel(channelID string) error - GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) + GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) GetFlaggedPosts(userID string, offset int, limit int) (*model.PostList, error) // @openTracingParams userID, teamID, offset, limit GetFlaggedPostsForTeam(userID, teamID string, offset int, limit int) (*model.PostList, error) GetFlaggedPostsForChannel(userID, channelID string, offset int, limit int) (*model.PostList, error) - GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) - GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) - GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) + GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) + GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) + GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) GetPostAfterTime(channelID string, time int64, collapsedThreads bool) (*model.Post, error) GetPostIdAfterTime(channelID string, time int64, collapsedThreads bool) (string, error) GetPostIdBeforeTime(channelID string, time int64, collapsedThreads bool) (string, error) diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index 0f67d1a338..819c723ece 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -123,13 +123,13 @@ func (_m *PostStore) DeleteOrphanedRows(limit int) (int64, error) { return r0, r1 } -// Get provides a mock function with given fields: ctx, id, opts, userID -func (_m *PostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) { - ret := _m.Called(ctx, id, opts, userID) +// Get provides a mock function with given fields: ctx, id, opts, userID, sanitizeOptions +func (_m *PostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) { + ret := _m.Called(ctx, id, opts, userID, sanitizeOptions) var r0 *model.PostList - if rf, ok := ret.Get(0).(func(context.Context, string, model.GetPostsOptions, string) *model.PostList); ok { - r0 = rf(ctx, id, opts, userID) + if rf, ok := ret.Get(0).(func(context.Context, string, model.GetPostsOptions, string, map[string]bool) *model.PostList); ok { + r0 = rf(ctx, id, opts, userID, sanitizeOptions) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.PostList) @@ -137,8 +137,8 @@ func (_m *PostStore) Get(ctx context.Context, id string, opts model.GetPostsOpti } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, model.GetPostsOptions, string) error); ok { - r1 = rf(ctx, id, opts, userID) + if rf, ok := ret.Get(1).(func(context.Context, string, model.GetPostsOptions, string, map[string]bool) error); ok { + r1 = rf(ctx, id, opts, userID, sanitizeOptions) } else { r1 = ret.Error(1) } @@ -419,13 +419,13 @@ func (_m *PostStore) GetPostIdBeforeTime(channelID string, time int64, collapsed return r0, r1 } -// GetPosts provides a mock function with given fields: options, allowFromCache -func (_m *PostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) { - ret := _m.Called(options, allowFromCache) +// GetPosts provides a mock function with given fields: options, allowFromCache, sanitizeOptions +func (_m *PostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { + ret := _m.Called(options, allowFromCache, sanitizeOptions) var r0 *model.PostList - if rf, ok := ret.Get(0).(func(model.GetPostsOptions, bool) *model.PostList); ok { - r0 = rf(options, allowFromCache) + if rf, ok := ret.Get(0).(func(model.GetPostsOptions, bool, map[string]bool) *model.PostList); ok { + r0 = rf(options, allowFromCache, sanitizeOptions) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.PostList) @@ -433,8 +433,8 @@ func (_m *PostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool } var r1 error - if rf, ok := ret.Get(1).(func(model.GetPostsOptions, bool) error); ok { - r1 = rf(options, allowFromCache) + if rf, ok := ret.Get(1).(func(model.GetPostsOptions, bool, map[string]bool) error); ok { + r1 = rf(options, allowFromCache, sanitizeOptions) } else { r1 = ret.Error(1) } @@ -442,13 +442,13 @@ func (_m *PostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool return r0, r1 } -// GetPostsAfter provides a mock function with given fields: options -func (_m *PostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) { - ret := _m.Called(options) +// GetPostsAfter provides a mock function with given fields: options, sanitizeOptions +func (_m *PostStore) GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { + ret := _m.Called(options, sanitizeOptions) var r0 *model.PostList - if rf, ok := ret.Get(0).(func(model.GetPostsOptions) *model.PostList); ok { - r0 = rf(options) + if rf, ok := ret.Get(0).(func(model.GetPostsOptions, map[string]bool) *model.PostList); ok { + r0 = rf(options, sanitizeOptions) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.PostList) @@ -456,8 +456,8 @@ func (_m *PostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostLi } var r1 error - if rf, ok := ret.Get(1).(func(model.GetPostsOptions) error); ok { - r1 = rf(options) + if rf, ok := ret.Get(1).(func(model.GetPostsOptions, map[string]bool) error); ok { + r1 = rf(options, sanitizeOptions) } else { r1 = ret.Error(1) } @@ -488,13 +488,13 @@ func (_m *PostStore) GetPostsBatchForIndexing(startTime int64, startPostID strin return r0, r1 } -// GetPostsBefore provides a mock function with given fields: options -func (_m *PostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) { - ret := _m.Called(options) +// GetPostsBefore provides a mock function with given fields: options, sanitizeOptions +func (_m *PostStore) GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { + ret := _m.Called(options, sanitizeOptions) var r0 *model.PostList - if rf, ok := ret.Get(0).(func(model.GetPostsOptions) *model.PostList); ok { - r0 = rf(options) + if rf, ok := ret.Get(0).(func(model.GetPostsOptions, map[string]bool) *model.PostList); ok { + r0 = rf(options, sanitizeOptions) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.PostList) @@ -502,8 +502,8 @@ func (_m *PostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostL } var r1 error - if rf, ok := ret.Get(1).(func(model.GetPostsOptions) error); ok { - r1 = rf(options) + if rf, ok := ret.Get(1).(func(model.GetPostsOptions, map[string]bool) error); ok { + r1 = rf(options, sanitizeOptions) } else { r1 = ret.Error(1) } @@ -557,13 +557,13 @@ func (_m *PostStore) GetPostsCreatedAt(channelID string, time int64) ([]*model.P return r0, r1 } -// GetPostsSince provides a mock function with given fields: options, allowFromCache -func (_m *PostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { - ret := _m.Called(options, allowFromCache) +// GetPostsSince provides a mock function with given fields: options, allowFromCache, sanitizeOptions +func (_m *PostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { + ret := _m.Called(options, allowFromCache, sanitizeOptions) var r0 *model.PostList - if rf, ok := ret.Get(0).(func(model.GetPostsSinceOptions, bool) *model.PostList); ok { - r0 = rf(options, allowFromCache) + if rf, ok := ret.Get(0).(func(model.GetPostsSinceOptions, bool, map[string]bool) *model.PostList); ok { + r0 = rf(options, allowFromCache, sanitizeOptions) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.PostList) @@ -571,8 +571,8 @@ func (_m *PostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFrom } var r1 error - if rf, ok := ret.Get(1).(func(model.GetPostsSinceOptions, bool) error); ok { - r1 = rf(options, allowFromCache) + if rf, ok := ret.Get(1).(func(model.GetPostsSinceOptions, bool, map[string]bool) error); ok { + r1 = rf(options, allowFromCache, sanitizeOptions) } else { r1 = ret.Error(1) } diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index ad639909a8..69973c6675 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -492,14 +492,14 @@ func testPostStoreGet(t *testing.T, ss store.Store) { etag2 := ss.Post().GetEtag(o1.ChannelId, false, false) require.Equal(t, 0, strings.Index(etag2, fmt.Sprintf("%v.%v", model.CurrentVersion, o1.UpdateAt)), "Invalid Etag") - r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post") - _, err = ss.Post().Get(context.Background(), "123", model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), "123", model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Missing id should have failed") - _, err = ss.Post().Get(context.Background(), "", model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), "", model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "should fail for blank post ids") } @@ -519,7 +519,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { opts := model.GetPostsOptions{ CollapsedThreads: true, } - r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post") require.True(t, *r1.Posts[o1.Id].IsFollowing) @@ -540,7 +540,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { opts := model.GetPostsOptions{ CollapsedThreads: true, } - r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post") require.False(t, *r1.Posts[o1.Id].IsFollowing) @@ -556,7 +556,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { opts := model.GetPostsOptions{ CollapsedThreads: true, } - r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post") require.Nil(t, r1.Posts[o1.Id].IsFollowing) @@ -579,7 +579,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { PerPage: 2, Direction: "down", } - r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err := ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 3) // including the root post assert.True(t, r1.HasNext) @@ -594,7 +594,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromPost: lastPostID, FromCreateAt: lastPostCreateAt, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 3) // including the root post assert.GreaterOrEqual(t, r1.Posts[r1.Order[len(r1.Order)-1]].CreateAt, lastPostCreateAt) @@ -609,7 +609,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromPost: r1.Order[1], FromCreateAt: firstPostCreateAt, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 3) // including the root post assert.LessOrEqual(t, r1.Posts[r1.Order[1]].CreateAt, firstPostCreateAt) @@ -623,7 +623,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromCreateAt: m1.CreateAt, SkipFetchThreads: false, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 2) // including the root post assert.LessOrEqual(t, r1.Posts[r1.Order[1]].CreateAt, m1.CreateAt) @@ -636,7 +636,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { Direction: "down", SkipFetchThreads: false, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 3) // including the root post assert.True(t, r1.HasNext) @@ -652,7 +652,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromCreateAt: lastPostCreateAt, SkipFetchThreads: false, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 4) // including the root post assert.GreaterOrEqual(t, r1.Posts[r1.Order[len(r1.Order)-1]].CreateAt, lastPostCreateAt) @@ -668,7 +668,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromCreateAt: firstPostCreateAt, SkipFetchThreads: false, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 3) // including the root post assert.LessOrEqual(t, r1.Posts[r1.Order[1]].CreateAt, firstPostCreateAt) @@ -682,7 +682,7 @@ func testPostStoreGetForThread(t *testing.T, ss store.Store) { FromCreateAt: m1.CreateAt, SkipFetchThreads: false, } - r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId) + r1, err = ss.Post().Get(context.Background(), o1.Id, opts, o1.UserId, map[string]bool{}) require.NoError(t, err) assert.Len(t, r1.Order, 2) // including the root post assert.GreaterOrEqual(t, r1.Posts[r1.Order[1]].CreateAt, m1.CreateAt) @@ -772,15 +772,15 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { o3, err = ss.Post().Save(o3) require.NoError(t, err) - r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1 := r1.Posts[o1.Id] - r2, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r2, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2 := r2.Posts[o2.Id] - r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3 := r3.Posts[o3.Id] @@ -791,7 +791,7 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { _, err = ss.Post().Update(o1a, ro1) require.NoError(t, err) - r1, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1a := r1.Posts[o1.Id] @@ -802,7 +802,7 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { _, err = ss.Post().Update(o2a, ro2) require.NoError(t, err) - r2, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r2, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2a := r2.Posts[o2.Id] @@ -813,7 +813,7 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { _, err = ss.Post().Update(o3a, ro3) require.NoError(t, err) - r3, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3a := r3.Posts[o3.Id] @@ -829,7 +829,7 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { }) require.NoError(t, err) - r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro4 := r4.Posts[o4.Id] @@ -839,7 +839,7 @@ func testPostStoreUpdate(t *testing.T, ss store.Store) { _, err = ss.Post().Update(o4a, ro4) require.NoError(t, err) - r4, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro4a := r4.Posts[o4.Id] @@ -862,7 +862,7 @@ func testPostStoreDelete(t *testing.T, ss store.Store) { require.Equal(t, 0, strings.Index(etag1, model.CurrentVersion+"."), "Invalid Etag") // Verify the created post. - r1, err := ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) require.NotNil(t, r1.Posts[rootPost.Id]) require.Equal(t, rootPost, r1.Posts[rootPost.Id]) @@ -879,7 +879,7 @@ func testPostStoreDelete(t *testing.T, ss store.Store) { assert.Equal(t, deleteByID, posts[0].GetProp(model.PostPropsDeleteBy), "unexpected Props[model.PostPropsDeleteBy]") // Verify that the post is no longer fetched by default. - _, err = ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "fetching deleted post should have failed") require.IsType(t, &store.ErrNotFound{}, err) @@ -911,12 +911,12 @@ func testPostStoreDelete(t *testing.T, ss store.Store) { require.NoError(t, err) // Verify the root post deleted - _, err = ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), rootPost.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") require.IsType(t, &store.ErrNotFound{}, err) // Verify the reply post deleted - _, err = ss.Post().Get(context.Background(), replyPost.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), replyPost.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") require.IsType(t, &store.ErrNotFound{}, err) }) @@ -961,17 +961,17 @@ func testPostStoreDelete(t *testing.T, ss store.Store) { require.NoError(t, err) // Verify the root post and replies deleted - _, err = ss.Post().Get(context.Background(), rootPost1.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), rootPost1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), replyPost1.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), replyPost1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), replyPost2.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), replyPost2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") // Verify other root posts remain undeleted. - _, err = ss.Post().Get(context.Background(), rootPost2.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), rootPost2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) }) } @@ -1038,10 +1038,10 @@ func testPostStorePermDelete1Level(t *testing.T, ss store.Store) { require.EqualValues(t, 0, thread.ReplyCount) require.EqualValues(t, model.StringArray{}, thread.Participants) - _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err, "Deleted id shouldn't have failed") - _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") thread, err = ss.Thread().Get(o5.Id) @@ -1055,16 +1055,16 @@ func testPostStorePermDelete1Level(t *testing.T, ss store.Store) { require.NoError(t, err) require.Nil(t, thread) - _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), o6.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o6.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") } @@ -1094,13 +1094,13 @@ func testPostStorePermDelete1Level2(t *testing.T, ss store.Store) { err2 := ss.Post().PermanentDeleteByUser(o1.UserId) require.NoError(t, err2) - _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Deleted id should have failed") - _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err, "Deleted id should have failed") } @@ -1128,7 +1128,7 @@ func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { o3, err = ss.Post().Save(o3) require.NoError(t, err) - pl, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + pl, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) require.Len(t, pl.Posts, 3, "invalid returned post") @@ -1136,7 +1136,7 @@ func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { dErr := ss.Post().Delete(o3.Id, model.GetMillis(), "") require.NoError(t, dErr) - pl, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + pl, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) require.Len(t, pl.Posts, 2, "invalid returned post") @@ -1144,7 +1144,7 @@ func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { dErr = ss.Post().Delete(o2.Id, model.GetMillis(), "") require.NoError(t, dErr) - pl, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + pl, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) require.Len(t, pl.Posts, 1, "invalid returned post") @@ -1202,7 +1202,7 @@ func testPostStoreGetPostsWithDetails(t *testing.T, ss store.Store) { o5, err = ss.Post().Save(o5) require.NoError(t, err) - r1, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 4}, false) + r1, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 4}, false, map[string]bool{}) require.NoError(t, err) require.Equal(t, r1.Order[0], o5.Id, "invalid order") @@ -1215,7 +1215,7 @@ func testPostStoreGetPostsWithDetails(t *testing.T, ss store.Store) { require.Equal(t, r1.Posts[o1.Id].Message, o1.Message, "Missing parent") - r2, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 4}, false) + r2, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 4}, false, map[string]bool{}) require.NoError(t, err) require.Equal(t, r2.Order[0], o5.Id, "invalid order") @@ -1229,7 +1229,7 @@ func testPostStoreGetPostsWithDetails(t *testing.T, ss store.Store) { require.Equal(t, r2.Posts[o1.Id].Message, o1.Message, "Missing parent") // Run once to fill cache - _, err = ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 30}, false) + _, err = ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 30}, false, map[string]bool{}) require.NoError(t, err) o6 := &model.Post{} @@ -1239,7 +1239,7 @@ func testPostStoreGetPostsWithDetails(t *testing.T, ss store.Store) { _, err = ss.Post().Save(o6) require.NoError(t, err) - r3, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 30}, false) + r3, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: o1.ChannelId, Page: 0, PerPage: 30}, false, map[string]bool{}) require.NoError(t, err) assert.Equal(t, 7, len(r3.Order)) } @@ -1264,19 +1264,19 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { } t.Run("should return error if negative Page/PerPage options are passed", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: 0, PerPage: -1}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: 0, PerPage: -1}, map[string]bool{}) assert.Nil(t, postList) assert.Error(t, err) assert.IsType(t, &store.ErrInvalidInput{}, err) - postList, err = ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: -1, PerPage: 10}) + postList, err = ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: -1, PerPage: 10}, map[string]bool{}) assert.Nil(t, postList) assert.Error(t, err) assert.IsType(t, &store.ErrInvalidInput{}, err) }) t.Run("should not return anything before the first post", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: 0, PerPage: 10}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[0].Id, Page: 0, PerPage: 10}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{}, postList.Order) @@ -1284,7 +1284,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should return posts before a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, Page: 0, PerPage: 10}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, Page: 0, PerPage: 10}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{posts[4].Id, posts[3].Id, posts[2].Id, posts[1].Id, posts[0].Id}, postList.Order) @@ -1298,7 +1298,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should limit posts before", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 2}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 2}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{posts[4].Id, posts[3].Id}, postList.Order) @@ -1309,7 +1309,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should not return anything after the last post", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[len(posts)-1].Id, PerPage: 10}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[len(posts)-1].Id, PerPage: 10}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{}, postList.Order) @@ -1317,7 +1317,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should return posts after a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 10}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 10}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{posts[9].Id, posts[8].Id, posts[7].Id, posts[6].Id}, postList.Order) @@ -1330,7 +1330,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should limit posts after", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 2}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: posts[5].Id, PerPage: 2}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{posts[7].Id, posts[6].Id}, postList.Order) @@ -1412,7 +1412,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { post2.UpdateAt = post6.UpdateAt t.Run("should return each post and thread before a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post3.Id, post2.Id}, postList.Order) @@ -1426,7 +1426,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should return each post and the root of each thread after a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post6.Id, post5.Id}, postList.Order) @@ -1510,7 +1510,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { post2.UpdateAt = post6.UpdateAt t.Run("should return each post and thread before a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, SkipFetchThreads: true}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, SkipFetchThreads: true}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post3.Id, post2.Id}, postList.Order) @@ -1522,7 +1522,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should return each post and thread before a post with limit", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 1, SkipFetchThreads: true}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 1, SkipFetchThreads: true}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post3.Id}, postList.Order) @@ -1533,7 +1533,7 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { }) t.Run("should return each post and the root of each thread after a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, SkipFetchThreads: true}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, SkipFetchThreads: true}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post6.Id, post5.Id}, postList.Order) @@ -1616,21 +1616,21 @@ func testPostStoreGetPostsBeforeAfter(t *testing.T, ss store.Store) { post2.UpdateAt = post6.UpdateAt t.Run("should return each root post before a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, CollapsedThreads: true}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, CollapsedThreads: true}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post2.Id, post1.Id}, postList.Order) }) t.Run("should return each root post before a post with limit", func(t *testing.T) { - postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 1, CollapsedThreads: true}) + postList, err := ss.Post().GetPostsBefore(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 1, CollapsedThreads: true}, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{post2.Id}, postList.Order) }) t.Run("should return each root after a post", func(t *testing.T) { - postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, CollapsedThreads: true}) + postList, err := ss.Post().GetPostsAfter(model.GetPostsOptions{ChannelId: channelId, PostId: post4.Id, PerPage: 2, CollapsedThreads: true}, map[string]bool{}) require.NoError(t, err) assert.Equal(t, []string{post5.Id}, postList.Order) @@ -1693,7 +1693,7 @@ func testPostStoreGetPostsSince(t *testing.T, ss store.Store) { require.NoError(t, err) time.Sleep(time.Millisecond) - postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post3.CreateAt}, false) + postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post3.CreateAt}, false, map[string]bool{}) require.NoError(t, err) assert.Equal(t, []string{ @@ -1724,7 +1724,7 @@ func testPostStoreGetPostsSince(t *testing.T, ss store.Store) { require.NoError(t, err) time.Sleep(time.Millisecond) - postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt}, false) + postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt}, false, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{}, postList.Order) @@ -1746,12 +1746,12 @@ func testPostStoreGetPostsSince(t *testing.T, ss store.Store) { time.Sleep(time.Millisecond) // Make a request that returns no results - postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt}, true) + postList, err := ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt}, true, map[string]bool{}) require.NoError(t, err) require.Equal(t, model.NewPostList(), postList) // And then ensure that it doesn't cause future requests to also return no results - postList, err = ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt - 1}, true) + postList, err = ss.Post().GetPostsSince(model.GetPostsSinceOptions{ChannelId: channelId, Time: post1.CreateAt - 1}, true, map[string]bool{}) require.NoError(t, err) assert.Equal(t, []string{post1.Id}, postList.Order) @@ -1815,7 +1815,7 @@ func testPostStoreGetPosts(t *testing.T, ss store.Store) { require.NoError(t, err) t.Run("should return the last posts created in a channel", func(t *testing.T) { - postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 30, SkipFetchThreads: false}, false) + postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 30, SkipFetchThreads: false}, false, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{ @@ -1837,7 +1837,7 @@ func testPostStoreGetPosts(t *testing.T, ss store.Store) { }) t.Run("should return the last posts created in a channel and the threads and the reply count must be 0", func(t *testing.T) { - postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 2, SkipFetchThreads: false}, false) + postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 2, SkipFetchThreads: false}, false, map[string]bool{}) assert.NoError(t, err) assert.Equal(t, []string{ @@ -1857,7 +1857,7 @@ func testPostStoreGetPosts(t *testing.T, ss store.Store) { }) t.Run("should return the last posts created in a channel without the threads and the reply count must be correct", func(t *testing.T) { - postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 2, SkipFetchThreads: true}, false) + postList, err := ss.Post().GetPosts(model.GetPostsOptions{ChannelId: channelId, Page: 0, PerPage: 2, SkipFetchThreads: true}, false, map[string]bool{}) require.NoError(t, err) assert.Equal(t, []string{ @@ -2753,23 +2753,23 @@ func testPostStoreOverwriteMultiple(t *testing.T, ss store.Store) { }) require.NoError(t, err) - r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1 := r1.Posts[o1.Id] - r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2 := r2.Posts[o2.Id] - r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3 := r3.Posts[o3.Id] - r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro4 := r4.Posts[o4.Id] - r5, err := ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "") + r5, err := ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro5 := r5.Posts[o5.Id] @@ -2795,15 +2795,15 @@ func testPostStoreOverwriteMultiple(t *testing.T, ss store.Store) { require.NoError(t, err) require.Equal(t, -1, errIdx) - r1, nErr := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, nErr := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, nErr) ro1a := r1.Posts[o1.Id] - r2, nErr = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r2, nErr = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, nErr) ro2a := r2.Posts[o2.Id] - r3, nErr = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, nErr = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, nErr) ro3a := r3.Posts[o3.Id] @@ -2825,11 +2825,11 @@ func testPostStoreOverwriteMultiple(t *testing.T, ss store.Store) { require.NoError(t, err) require.Equal(t, -1, errIdx) - r4, nErr := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, nErr := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, nErr) ro4a := r4.Posts[o4.Id] - r5, nErr = ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "") + r5, nErr = ss.Post().Get(context.Background(), o5.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, nErr) ro5a := r5.Posts[o5.Id] @@ -2871,19 +2871,19 @@ func testPostStoreOverwrite(t *testing.T, ss store.Store) { }) require.NoError(t, err) - r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1 := r1.Posts[o1.Id] - r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2 := r2.Posts[o2.Id] - r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3 := r3.Posts[o3.Id] - r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, err := ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro4 := r4.Posts[o4.Id] @@ -2908,15 +2908,15 @@ func testPostStoreOverwrite(t *testing.T, ss store.Store) { _, err = ss.Post().Overwrite(o3a) require.NoError(t, err) - r1, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1a := r1.Posts[o1.Id] - r2, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r2, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2a := r2.Posts[o2.Id] - r3, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3a := r3.Posts[o3.Id] @@ -2932,7 +2932,7 @@ func testPostStoreOverwrite(t *testing.T, ss store.Store) { _, err = ss.Post().Overwrite(o4a) require.NoError(t, err) - r4, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "") + r4, err = ss.Post().Get(context.Background(), o4.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro4a := r4.Posts[o4.Id] @@ -2963,15 +2963,15 @@ func testPostStoreGetPostsByIds(t *testing.T, ss store.Store) { o3, err = ss.Post().Save(o3) require.NoError(t, err) - r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + r1, err := ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro1 := r1.Posts[o1.Id] - r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + r2, err := ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro2 := r2.Posts[o2.Id] - r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + r3, err := ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) ro3 := r3.Posts[o3.Id] @@ -3096,13 +3096,13 @@ func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { _, _, err = ss.Post().PermanentDeleteBatchForRetentionPolicies(0, 2000, 1000, model.RetentionPolicyCursor{}) require.NoError(t, err) - _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o1.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Should have not found post 1 after purge") - _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err, "Should have not found post 2 after purge") - _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "") + _, err = ss.Post().Get(context.Background(), o3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err, "Should have found post 3 after purge") t.Run("with pagination", func(t *testing.T) { @@ -3146,13 +3146,13 @@ func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { _, _, err2 = ss.Post().PermanentDeleteBatchForRetentionPolicies(0, 2000, 1000, model.RetentionPolicyCursor{}) require.NoError(t, err2) - _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err2, "global policy should have been ignored due to granular policy") nowMillis := post.CreateAt + *channelPolicy.PostDurationDays*model.DayInMilliseconds + 1 _, _, err2 = ss.Post().PermanentDeleteBatchForRetentionPolicies(nowMillis, 0, 1000, model.RetentionPolicyCursor{}) require.NoError(t, err2) - _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err2, "post should have been deleted by channel policy") // Create a team policy which is stricter than the channel policy @@ -3171,7 +3171,7 @@ func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { nowMillis = post.CreateAt + *teamPolicy.PostDurationDays*model.DayInMilliseconds + 1 _, _, err2 = ss.Post().PermanentDeleteBatchForRetentionPolicies(nowMillis, 0, 1000, model.RetentionPolicyCursor{}) require.NoError(t, err2) - _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err2, "channel policy should have overridden team policy") // Delete channel policy and re-run team policy @@ -3183,7 +3183,7 @@ func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { _, _, err2 = ss.Post().PermanentDeleteBatchForRetentionPolicies(nowMillis, 0, 1000, model.RetentionPolicyCursor{}) require.NoError(t, err2) - _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + _, err2 = ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.Error(t, err2, "post should have been deleted by team policy") err2 = ss.RetentionPolicy().RemoveTeams(teamPolicy.ID, []string{team.Id}) diff --git a/store/storetest/reaction_store.go b/store/storetest/reaction_store.go index e18ad85eb7..759826c89c 100644 --- a/store/storetest/reaction_store.go +++ b/store/storetest/reaction_store.go @@ -55,7 +55,7 @@ func testReactionSave(t *testing.T, ss store.Store) { assert.Zero(t, saved.DeleteAt, "should've saved reaction delete_at with zero value and returned it") var secondUpdateAt int64 - postList, err := ss.Post().Get(context.Background(), reaction1.PostId, model.GetPostsOptions{}, "") + postList, err := ss.Post().Get(context.Background(), reaction1.PostId, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.True(t, postList.Posts[post.Id].HasReactions, "should've set HasReactions = true on post") @@ -79,7 +79,7 @@ func testReactionSave(t *testing.T, ss store.Store) { _, nErr = ss.Reaction().Save(reaction2) require.NoError(t, nErr) - postList, err = ss.Post().Get(context.Background(), reaction2.PostId, model.GetPostsOptions{}, "") + postList, err = ss.Post().Get(context.Background(), reaction2.PostId, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.NotEqual(t, postList.Posts[post.Id].UpdateAt, secondUpdateAt, "should've marked post as updated even if HasReactions doesn't change") @@ -129,7 +129,7 @@ func testReactionDelete(t *testing.T, ss store.Store) { _, nErr := ss.Reaction().Save(reaction) require.NoError(t, nErr) - result, err := ss.Post().Get(context.Background(), reaction.PostId, model.GetPostsOptions{}, "") + result, err := ss.Post().Get(context.Background(), reaction.PostId, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) firstUpdateAt := result.Posts[post.Id].UpdateAt @@ -142,7 +142,7 @@ func testReactionDelete(t *testing.T, ss store.Store) { assert.Empty(t, reactions, "should've deleted reaction") - postList, err := ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + postList, err := ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.False(t, postList.Posts[post.Id].HasReactions, "should've set HasReactions = false on post") @@ -507,15 +507,15 @@ func testReactionDeleteAllWithEmojiName(t *testing.T, ss store.Store, s SqlStore assert.Empty(t, returned, "should've only removed reactions with emoji name") // check that the posts are updated - postList, err := ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "") + postList, err := ss.Post().Get(context.Background(), post.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.True(t, postList.Posts[post.Id].HasReactions, "post should still have reactions") - postList, err = ss.Post().Get(context.Background(), post2.Id, model.GetPostsOptions{}, "") + postList, err = ss.Post().Get(context.Background(), post2.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.True(t, postList.Posts[post2.Id].HasReactions, "post should still have reactions") - postList, err = ss.Post().Get(context.Background(), post3.Id, model.GetPostsOptions{}, "") + postList, err = ss.Post().Get(context.Background(), post3.Id, model.GetPostsOptions{}, "", map[string]bool{}) require.NoError(t, err) assert.False(t, postList.Posts[post3.Id].HasReactions, "post shouldn't have reactions any more") diff --git a/store/storetest/thread_store.go b/store/storetest/thread_store.go index ce4a76bd8d..66fc9de00f 100644 --- a/store/storetest/thread_store.go +++ b/store/storetest/thread_store.go @@ -83,7 +83,7 @@ func testThreadStorePopulation(t *testing.T, ss store.Store) { opts := model.GetPostsOptions{ SkipFetchThreads: true, } - olist, _ := ss.Post().Get(context.Background(), otmp.Id, opts, "") + olist, _ := ss.Post().Get(context.Background(), otmp.Id, opts, "", map[string]bool{}) o1 := olist.Posts[olist.Order[0]] newPosts = append([]*model.Post{o1}, newPosts...) diff --git a/store/timerlayer/timerlayer.go b/store/timerlayer/timerlayer.go index 937aba6bb5..6d57bed37c 100644 --- a/store/timerlayer/timerlayer.go +++ b/store/timerlayer/timerlayer.go @@ -4970,10 +4970,10 @@ func (s *TimerLayerPostStore) DeleteOrphanedRows(limit int) (int64, error) { return result, err } -func (s *TimerLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string) (*model.PostList, error) { +func (s *TimerLayerPostStore) Get(ctx context.Context, id string, opts model.GetPostsOptions, userID string, sanitizeOptions map[string]bool) (*model.PostList, error) { start := timemodule.Now() - result, err := s.PostStore.Get(ctx, id, opts, userID) + result, err := s.PostStore.Get(ctx, id, opts, userID, sanitizeOptions) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil { @@ -5194,10 +5194,10 @@ func (s *TimerLayerPostStore) GetPostIdBeforeTime(channelID string, time int64, return result, err } -func (s *TimerLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, error) { +func (s *TimerLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { start := timemodule.Now() - result, err := s.PostStore.GetPosts(options, allowFromCache) + result, err := s.PostStore.GetPosts(options, allowFromCache, sanitizeOptions) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil { @@ -5210,10 +5210,10 @@ func (s *TimerLayerPostStore) GetPosts(options model.GetPostsOptions, allowFromC return result, err } -func (s *TimerLayerPostStore) GetPostsAfter(options model.GetPostsOptions) (*model.PostList, error) { +func (s *TimerLayerPostStore) GetPostsAfter(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { start := timemodule.Now() - result, err := s.PostStore.GetPostsAfter(options) + result, err := s.PostStore.GetPostsAfter(options, sanitizeOptions) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil { @@ -5242,10 +5242,10 @@ func (s *TimerLayerPostStore) GetPostsBatchForIndexing(startTime int64, startPos return result, err } -func (s *TimerLayerPostStore) GetPostsBefore(options model.GetPostsOptions) (*model.PostList, error) { +func (s *TimerLayerPostStore) GetPostsBefore(options model.GetPostsOptions, sanitizeOptions map[string]bool) (*model.PostList, error) { start := timemodule.Now() - result, err := s.PostStore.GetPostsBefore(options) + result, err := s.PostStore.GetPostsBefore(options, sanitizeOptions) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil { @@ -5290,10 +5290,10 @@ func (s *TimerLayerPostStore) GetPostsCreatedAt(channelID string, time int64) ([ return result, err } -func (s *TimerLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { +func (s *TimerLayerPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool, sanitizeOptions map[string]bool) (*model.PostList, error) { start := timemodule.Now() - result, err := s.PostStore.GetPostsSince(options, allowFromCache) + result, err := s.PostStore.GetPostsSince(options, allowFromCache, sanitizeOptions) elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second) if s.Root.Metrics != nil {