diff options
Diffstat (limited to 'internal/processing/timeline')
-rw-r--r-- | internal/processing/timeline/faved.go | 3 | ||||
-rw-r--r-- | internal/processing/timeline/home.go | 9 | ||||
-rw-r--r-- | internal/processing/timeline/list.go | 9 | ||||
-rw-r--r-- | internal/processing/timeline/notification.go | 16 | ||||
-rw-r--r-- | internal/processing/timeline/public.go | 16 | ||||
-rw-r--r-- | internal/processing/timeline/tag.go | 12 |
6 files changed, 58 insertions, 7 deletions
diff --git a/internal/processing/timeline/faved.go b/internal/processing/timeline/faved.go index 205b15069..c3b0e1837 100644 --- a/internal/processing/timeline/faved.go +++ b/internal/processing/timeline/faved.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/log" "github.com/superseriousbusiness/gotosocial/internal/oauth" @@ -54,7 +55,7 @@ func (p *Processor) FavedTimelineGet(ctx context.Context, authed *oauth.Auth, ma continue } - apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, authed.Account) + apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, authed.Account, statusfilter.FilterContextNone, nil) if err != nil { log.Errorf(ctx, "error convering to api status: %v", err) continue diff --git a/internal/processing/timeline/home.go b/internal/processing/timeline/home.go index d12dd98c4..e174b3428 100644 --- a/internal/processing/timeline/home.go +++ b/internal/processing/timeline/home.go @@ -23,6 +23,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/filter/visibility" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" @@ -98,7 +99,13 @@ func HomeTimelineStatusPrepare(state *state.State, converter *typeutils.Converte return nil, err } - return converter.StatusToAPIStatus(ctx, status, requestingAccount) + filters, err := state.DB.GetFiltersForAccountID(ctx, requestingAccount.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAccount.ID, err) + return nil, err + } + + return converter.StatusToAPIStatus(ctx, status, requestingAccount, statusfilter.FilterContextHome, filters) } } diff --git a/internal/processing/timeline/list.go b/internal/processing/timeline/list.go index 7356d1978..60cdbac7a 100644 --- a/internal/processing/timeline/list.go +++ b/internal/processing/timeline/list.go @@ -23,6 +23,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/filter/visibility" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" @@ -110,7 +111,13 @@ func ListTimelineStatusPrepare(state *state.State, converter *typeutils.Converte return nil, err } - return converter.StatusToAPIStatus(ctx, status, requestingAccount) + filters, err := state.DB.GetFiltersForAccountID(ctx, requestingAccount.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAccount.ID, err) + return nil, err + } + + return converter.StatusToAPIStatus(ctx, status, requestingAccount, statusfilter.FilterContextHome, filters) } } diff --git a/internal/processing/timeline/notification.go b/internal/processing/timeline/notification.go index 42f708999..f99664d62 100644 --- a/internal/processing/timeline/notification.go +++ b/internal/processing/timeline/notification.go @@ -43,6 +43,12 @@ func (p *Processor) NotificationsGet(ctx context.Context, authed *oauth.Auth, ma return util.EmptyPageableResponse(), nil } + filters, err := p.state.DB.GetFiltersForAccountID(ctx, authed.Account.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", authed.Account.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } + var ( items = make([]interface{}, 0, count) nextMaxIDValue string @@ -70,7 +76,7 @@ func (p *Processor) NotificationsGet(ctx context.Context, authed *oauth.Auth, ma continue } - item, err := p.converter.NotificationToAPINotification(ctx, n) + item, err := p.converter.NotificationToAPINotification(ctx, n, filters) if err != nil { log.Debugf(ctx, "skipping notification %s because it couldn't be converted to its api representation: %s", n.ID, err) continue @@ -104,7 +110,13 @@ func (p *Processor) NotificationGet(ctx context.Context, account *gtsmodel.Accou return nil, gtserror.NewErrorNotFound(err) } - apiNotif, err := p.converter.NotificationToAPINotification(ctx, notif) + filters, err := p.state.DB.GetFiltersForAccountID(ctx, account.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", account.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } + + apiNotif, err := p.converter.NotificationToAPINotification(ctx, notif, filters) if err != nil { if errors.Is(err, db.ErrNoEntries) { return nil, gtserror.NewErrorNotFound(err) 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 diff --git a/internal/processing/timeline/tag.go b/internal/processing/timeline/tag.go index 45632ce06..5308cac59 100644 --- a/internal/processing/timeline/tag.go +++ b/internal/processing/timeline/tag.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" @@ -111,6 +112,12 @@ func (p *Processor) packageTagResponse( prevMinIDValue = statuses[0].ID ) + filters, err := p.state.DB.GetFiltersForAccountID(ctx, requestingAcct.ID) + if err != nil { + err = gtserror.Newf("couldn't retrieve filters for account %s: %w", requestingAcct.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } + for _, s := range statuses { timelineable, err := p.filter.StatusTagTimelineable(ctx, requestingAcct, s) if err != nil { @@ -122,7 +129,10 @@ func (p *Processor) packageTagResponse( continue } - apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requestingAcct) + apiStatus, err := p.converter.StatusToAPIStatus(ctx, s, requestingAcct, statusfilter.FilterContextPublic, filters) + if errors.Is(err, statusfilter.ErrHideStatus) { + continue + } if err != nil { log.Errorf(ctx, "error converting to api status: %v", err) continue |