summaryrefslogtreecommitdiff
path: root/internal/visibility
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2021-10-24 11:57:39 +0200
committerLibravatar GitHub <noreply@github.com>2021-10-24 11:57:39 +0200
commit4b1d9d3780134098ff06877abc20c970c32d4aac (patch)
treea46deccd4cdf2ddf9d0ea92f32bd8669657a4687 /internal/visibility
parentpregenerate RSA keys for testrig accounts. If a user is added without a key,... (diff)
downloadgotosocial-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.go4
-rw-r--r--internal/visibility/statusvisible.go14
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
+}