diff options
author | 2021-10-24 11:57:39 +0200 | |
---|---|---|
committer | 2021-10-24 11:57:39 +0200 | |
commit | 4b1d9d3780134098ff06877abc20c970c32d4aac (patch) | |
tree | a46deccd4cdf2ddf9d0ea92f32bd8669657a4687 /internal/visibility | |
parent | pregenerate RSA keys for testrig accounts. If a user is added without a key,... (diff) | |
download | gotosocial-4b1d9d3780134098ff06877abc20c970c32d4aac.tar.xz |
Serve `outbox` for Actor (#289)
* add statusesvisible convenience function
* add minID + onlyPublic to account statuses get
* move swagger collection stuff to common
* start working on Outbox GETting
* move functions into federationProcessor
* outboxToASCollection
* add statusesvisible convenience function
* add minID + onlyPublic to account statuses get
* move swagger collection stuff to common
* start working on Outbox GETting
* move functions into federationProcessor
* outboxToASCollection
* bit more work on outbox paging
* wrapNoteInCreate function
* test + hook up the processor functions
* don't do prev + next links on empty reply
* test get outbox through api
* don't fail on no status entries
* add outbox implementation doc
* typo
Diffstat (limited to 'internal/visibility')
-rw-r--r-- | internal/visibility/filter.go | 4 | ||||
-rw-r--r-- | internal/visibility/statusvisible.go | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/internal/visibility/filter.go b/internal/visibility/filter.go index e3435842e..9f4bb4aad 100644 --- a/internal/visibility/filter.go +++ b/internal/visibility/filter.go @@ -32,6 +32,10 @@ type Filter interface { // or account domains, and other relevant accounts mentioned in or replied to by the status. StatusVisible(ctx context.Context, targetStatus *gtsmodel.Status, requestingAccount *gtsmodel.Account) (bool, error) + // StatusesVisible calls StatusVisible for each status in the statuses slice, and returns a slice of only + // statuses which are visible to the requestingAccount. + StatusesVisible(ctx context.Context, statuses []*gtsmodel.Status, requestingAccount *gtsmodel.Account) ([]*gtsmodel.Status, error) + // StatusHometimelineable returns true if targetStatus should be in the home timeline of the requesting account. // // This function will call StatusVisible internally, so it's not necessary to call it beforehand. diff --git a/internal/visibility/statusvisible.go b/internal/visibility/statusvisible.go index 1e48abcda..a99494836 100644 --- a/internal/visibility/statusvisible.go +++ b/internal/visibility/statusvisible.go @@ -239,3 +239,17 @@ func (f *filter) StatusVisible(ctx context.Context, targetStatus *gtsmodel.Statu // If we reached here, all is okay return true, nil } + +func (f *filter) StatusesVisible(ctx context.Context, statuses []*gtsmodel.Status, requestingAccount *gtsmodel.Account) ([]*gtsmodel.Status, error) { + filtered := []*gtsmodel.Status{} + for _, s := range statuses { + visible, err := f.StatusVisible(ctx, s, requestingAccount) + if err != nil { + return nil, err + } + if visible { + filtered = append(filtered, s) + } + } + return filtered, nil +} |