mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-04-26 11:04:43 +00:00
keep a cache of activity IDs we have handled creates for
This commit is contained in:
parent
2f447702d2
commit
2aee3a2605
5 changed files with 15 additions and 9 deletions
internal/federation
|
@ -63,6 +63,10 @@ func (f *federatingDB) Create(ctx context.Context, asType vocab.Type) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Cache entry for this create activity ID for later
|
||||
// checks in the Exist() function if we see it again.
|
||||
f.createdIDs.Set(ap.GetJSONLDId(asType).String(), struct{}{})
|
||||
|
||||
switch name := asType.GetTypeName(); name {
|
||||
case ap.ActivityBlock:
|
||||
// BLOCK SOMETHING
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"context"
|
||||
"net/url"
|
||||
|
||||
"codeberg.org/gruf/go-cache/v3/simple"
|
||||
"github.com/superseriousbusiness/activity/pub"
|
||||
"github.com/superseriousbusiness/activity/streams/vocab"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/filter/interaction"
|
||||
|
@ -61,6 +62,10 @@ type federatingDB struct {
|
|||
visFilter *visibility.Filter
|
||||
intFilter *interaction.Filter
|
||||
spamFilter *spam.Filter
|
||||
|
||||
// tracks Activity IDs we have handled creates for,
|
||||
// for use in the Exists() function during forwarding.
|
||||
createdIDs simple.Cache[string, struct{}]
|
||||
}
|
||||
|
||||
// New returns a DB that satisfies the pub.Database
|
||||
|
@ -79,5 +84,6 @@ func New(
|
|||
intFilter: intFilter,
|
||||
spamFilter: spamFilter,
|
||||
}
|
||||
fdb.createdIDs.Init(0, 1000)
|
||||
return &fdb
|
||||
}
|
||||
|
|
|
@ -22,12 +22,8 @@ import (
|
|||
"net/url"
|
||||
)
|
||||
|
||||
// Exists returns true if the database has an entry for the specified
|
||||
// id. It may not be owned by this application instance.
|
||||
//
|
||||
// The library makes this call only after acquiring a lock first.
|
||||
//
|
||||
// Implementation note: this just straight up isn't implemented, and doesn't *really* need to be either.
|
||||
// Exists is an implementation of pub.Database{}.Exists(), optimized specifically for
|
||||
// the only usecase in which go-fed/activity/pub actually calls it. Do not use otherwise!
|
||||
func (f *federatingDB) Exists(ctx context.Context, id *url.URL) (exists bool, err error) {
|
||||
return false, nil
|
||||
return f.createdIDs.Has(id.String()), nil
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ import (
|
|||
var _ interface {
|
||||
pub.CommonBehavior
|
||||
pub.FederatingProtocol
|
||||
} = &Federator{}
|
||||
} = (*Federator)(nil)
|
||||
|
||||
type Federator struct {
|
||||
db db.DB
|
||||
|
|
|
@ -49,7 +49,7 @@ import (
|
|||
// Note that the library will not maintain a long-lived pointer to the
|
||||
// returned Transport so that any private credentials are able to be
|
||||
// garbage collected.
|
||||
func (f *Federator) NewTransport(ctx context.Context, actorBoxIRI *url.URL, gofedAgent string) (pub.Transport, error) {
|
||||
func (f *Federator) NewTransport(ctx context.Context, actorBoxIRI *url.URL, _ string) (pub.Transport, error) {
|
||||
var username string
|
||||
var err error
|
||||
|
||||
|
|
Loading…
Reference in a new issue