summaryrefslogtreecommitdiff
path: root/internal/federation
diff options
context:
space:
mode:
Diffstat (limited to 'internal/federation')
-rw-r--r--internal/federation/federatingactor.go6
-rw-r--r--internal/federation/federatingdb/reject.go20
-rw-r--r--internal/federation/federatingdb/undo.go2
3 files changed, 10 insertions, 18 deletions
diff --git a/internal/federation/federatingactor.go b/internal/federation/federatingactor.go
index 81f3c3281..8fc47462d 100644
--- a/internal/federation/federatingactor.go
+++ b/internal/federation/federatingactor.go
@@ -143,10 +143,12 @@ func (f *federatingActor) PostInboxScheme(ctx context.Context, w http.ResponseWr
have not yet applied authorization (ie., blocks).
*/
- // Obtain the activity; reject unknown activities.
- activity, errWithCode := ap.ResolveIncomingActivity(r)
+ // Resolve the activity, rejecting badly formatted / transient.
+ activity, ok, errWithCode := ap.ResolveIncomingActivity(r)
if errWithCode != nil {
return false, errWithCode
+ } else if !ok { // transient
+ return false, nil
}
// Set additional context data. Primarily this means
diff --git a/internal/federation/federatingdb/reject.go b/internal/federation/federatingdb/reject.go
index e02db18e0..437741584 100644
--- a/internal/federation/federatingdb/reject.go
+++ b/internal/federation/federatingdb/reject.go
@@ -45,16 +45,11 @@ func (f *federatingDB) Reject(ctx context.Context, reject vocab.ActivityStreamsR
return nil // Already processed.
}
- rejectObject := reject.GetActivityStreamsObject()
- if rejectObject == nil {
- return errors.New("Reject: no object set on vocab.ActivityStreamsReject")
- }
+ for _, obj := range ap.ExtractObjects(reject) {
- for iter := rejectObject.Begin(); iter != rejectObject.End(); iter = iter.Next() {
- // check if the object is an IRI
- if iter.IsIRI() {
+ if obj.IsIRI() {
// we have just the URI of whatever is being rejected, so we need to find out what it is
- rejectedObjectIRI := iter.GetIRI()
+ rejectedObjectIRI := obj.GetIRI()
if uris.IsFollowPath(rejectedObjectIRI) {
// REJECT FOLLOW
followReq, err := f.state.DB.GetFollowRequestByURI(ctx, rejectedObjectIRI.String())
@@ -71,15 +66,10 @@ func (f *federatingDB) Reject(ctx context.Context, reject vocab.ActivityStreamsR
}
}
- // check if iter is an AP object / type
- if iter.GetType() == nil {
- continue
- }
-
- if iter.GetType().GetTypeName() == ap.ActivityFollow {
+ if t := obj.GetType(); t != nil {
// we have the whole object so we can figure out what we're rejecting
// REJECT FOLLOW
- asFollow, ok := iter.GetType().(vocab.ActivityStreamsFollow)
+ asFollow, ok := t.(vocab.ActivityStreamsFollow)
if !ok {
return errors.New("Reject: couldn't parse follow into vocab.ActivityStreamsFollow")
}
diff --git a/internal/federation/federatingdb/undo.go b/internal/federation/federatingdb/undo.go
index a7a0f077a..6bc4cd7aa 100644
--- a/internal/federation/federatingdb/undo.go
+++ b/internal/federation/federatingdb/undo.go
@@ -78,7 +78,7 @@ func (f *federatingDB) Undo(ctx context.Context, undo vocab.ActivityStreamsUndo)
}
}
- return nil
+ return errs.Combine()
}
func (f *federatingDB) undoFollow(