summaryrefslogtreecommitdiff
path: root/internal/federation
diff options
context:
space:
mode:
Diffstat (limited to 'internal/federation')
-rw-r--r--internal/federation/dereferencing/account_test.go6
-rw-r--r--internal/federation/dereferencing/thread.go4
-rw-r--r--internal/federation/federatingactor.go19
-rw-r--r--internal/federation/federatingdb/util.go2
4 files changed, 18 insertions, 13 deletions
diff --git a/internal/federation/dereferencing/account_test.go b/internal/federation/dereferencing/account_test.go
index 3b6994f08..ef1eddb91 100644
--- a/internal/federation/dereferencing/account_test.go
+++ b/internal/federation/dereferencing/account_test.go
@@ -175,7 +175,7 @@ func (suite *AccountTestSuite) TestDereferenceLocalAccountWithUnknownUsername()
"thisaccountdoesnotexist",
config.GetHost(),
)
- suite.True(gtserror.Unretrievable(err))
+ suite.True(gtserror.IsUnretrievable(err))
suite.EqualError(err, db.ErrNoEntries.Error())
suite.Nil(fetchedAccount)
}
@@ -189,7 +189,7 @@ func (suite *AccountTestSuite) TestDereferenceLocalAccountWithUnknownUsernameDom
"thisaccountdoesnotexist",
"localhost:8080",
)
- suite.True(gtserror.Unretrievable(err))
+ suite.True(gtserror.IsUnretrievable(err))
suite.EqualError(err, db.ErrNoEntries.Error())
suite.Nil(fetchedAccount)
}
@@ -202,7 +202,7 @@ func (suite *AccountTestSuite) TestDereferenceLocalAccountWithUnknownUserURI() {
fetchingAccount.Username,
testrig.URLMustParse("http://localhost:8080/users/thisaccountdoesnotexist"),
)
- suite.True(gtserror.Unretrievable(err))
+ suite.True(gtserror.IsUnretrievable(err))
suite.EqualError(err, db.ErrNoEntries.Error())
suite.Nil(fetchedAccount)
}
diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go
index 0ad8f09e4..243479db7 100644
--- a/internal/federation/dereferencing/thread.go
+++ b/internal/federation/dereferencing/thread.go
@@ -229,7 +229,7 @@ func (d *Dereferencer) DereferenceStatusAncestors(ctx context.Context, username
l.Warnf("orphaned status: http error dereferencing parent: %v)", err)
return nil
- case gtserror.Unretrievable(err):
+ case gtserror.IsUnretrievable(err):
// Not retrievable for some other reason, so just
// bail for now; we can try again later if necessary.
l.Warnf("orphaned status: parent unretrievable: %v)", err)
@@ -354,7 +354,7 @@ stackLoop:
// - any http type error for a new status returns unretrievable
_, statusable, _, err := d.getStatusByURI(ctx, username, itemIRI)
if err != nil {
- if !gtserror.Unretrievable(err) {
+ if !gtserror.IsUnretrievable(err) {
l.Errorf("error dereferencing remote status %s: %v", itemIRI, err)
}
continue itemLoop
diff --git a/internal/federation/federatingactor.go b/internal/federation/federatingactor.go
index 774fa30af..81f3c3281 100644
--- a/internal/federation/federatingactor.go
+++ b/internal/federation/federatingactor.go
@@ -200,13 +200,18 @@ func (f *federatingActor) PostInboxScheme(ctx context.Context, w http.ResponseWr
//
// Post the activity to the Actor's inbox and trigger side effects .
if err := f.sideEffectActor.PostInbox(ctx, inboxID, activity); err != nil {
- // Special case: We know it is a bad request if the object or
- // target properties needed to be populated, but weren't.
+ // Special case: We know it is a bad request if the object or target
+ // props needed to be populated, or we failed parsing activity details.
// Send the rejection to the peer.
- if errors.Is(err, pub.ErrObjectRequired) || errors.Is(err, pub.ErrTargetRequired) {
- // Log the original error but return something a bit more generic.
- log.Warnf(ctx, "malformed incoming activity: %v", err)
- const text = "malformed activity: missing Object and / or Target"
+ if errors.Is(err, pub.ErrObjectRequired) ||
+ errors.Is(err, pub.ErrTargetRequired) ||
+ gtserror.IsMalformed(err) {
+
+ // Log malformed activities to help debug.
+ l = l.WithField("activity", activity)
+ l.Warnf("malformed incoming activity: %v", err)
+
+ const text = "malformed incoming activity"
return false, gtserror.NewErrorBadRequest(errors.New(text), text)
}
@@ -234,7 +239,7 @@ func (f *federatingActor) PostInboxScheme(ctx context.Context, w http.ResponseWr
// This check may be removed when the `Exists()` func
// is updated, and/or federating callbacks are handled
// properly.
- if !errorsv2.Comparable(
+ if !errorsv2.IsV2(
err,
db.ErrAlreadyExists,
db.ErrNoEntries,
diff --git a/internal/federation/federatingdb/util.go b/internal/federation/federatingdb/util.go
index dd7a2240e..f1c565aeb 100644
--- a/internal/federation/federatingdb/util.go
+++ b/internal/federation/federatingdb/util.go
@@ -113,7 +113,7 @@ func (f *federatingDB) NewID(ctx context.Context, t vocab.Type) (idURL *url.URL,
// If an actor URI has been set, create a new ID
// based on actor (i.e. followER not the followEE).
- if uri := ap.GetActor(follow); len(uri) == 1 {
+ if uri := ap.GetActorIRIs(follow); len(uri) == 1 {
if actorAccount, err := f.state.DB.GetAccountByURI(ctx, uri[0].String()); err == nil {
newID, err := id.NewRandomULID()
if err != nil {