From 45f4afe60e29e147e3adfaa4d7b66ca58e22b1de Mon Sep 17 00:00:00 2001 From: Vyr Cossont Date: Mon, 6 May 2024 04:49:08 -0700 Subject: feature: filters v2 server-side warning/hiding (#2793) * Remove dead code * Filter statuses when converting to frontend representation * status.filtered is an array * Make matching case-insensitive * Remove TODOs that don't need to be done now * Add missing filter check for notification * lint: rename ErrHideStatus * APIFilterActionToFilterAction not used yet * swaggerino docseroni * Address review comments * Add apimodel.FilterActionNone --------- Co-authored-by: tobi <31960611+tsmethurst@users.noreply.github.com> Co-authored-by: tobi --- internal/processing/timeline/public.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'internal/processing/timeline/public.go') diff --git a/internal/processing/timeline/public.go b/internal/processing/timeline/public.go index 87de04f4a..a0e594629 100644 --- a/internal/processing/timeline/public.go +++ b/internal/processing/timeline/public.go @@ -24,6 +24,7 @@ import ( apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" "github.com/superseriousbusiness/gotosocial/internal/db" + statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/log" @@ -46,6 +47,16 @@ func (p *Processor) PublicTimelineGet( items = make([]any, 0, limit) ) + var filters []*gtsmodel.Filter + if requester != nil { + var err error + filters, err = p.state.DB.GetFiltersForAccountID(ctx, requester.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requester.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } + } + // Try a few times to select appropriate public // statuses from the db, paging up or down to // reattempt if nothing suitable is found. @@ -87,7 +98,10 @@ outer: continue inner } - apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requester) + apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requester, statusfilter.FilterContextPublic, filters) + if errors.Is(err, statusfilter.ErrHideStatus) { + continue + } if err != nil { log.Errorf(ctx, "error converting to api status: %v", err) continue inner -- cgit v1.2.3