diff options
author | 2024-01-18 16:11:13 +0000 | |
---|---|---|
committer | 2024-01-18 17:11:13 +0100 | |
commit | 67e11a1a613bea9b7f5ac81a5f3bb2cd6c47b105 (patch) | |
tree | 34a2a61c1bcf3b850dda1835b34f0d81d9844612 /internal/federation | |
parent | [chore] update viper version (#2539) (diff) | |
download | gotosocial-67e11a1a613bea9b7f5ac81a5f3bb2cd6c47b105.tar.xz |
[chore] chore rationalise http return codes for activitypub handlers (#2540)
* some small code fixups and changes
* add check in ResolveIncomingActivity for transient activity types (i.e. activity ID is nil)
* update test to handle new transient behaviour
Diffstat (limited to 'internal/federation')
-rw-r--r-- | internal/federation/federatingactor.go | 6 | ||||
-rw-r--r-- | internal/federation/federatingdb/reject.go | 20 | ||||
-rw-r--r-- | internal/federation/federatingdb/undo.go | 2 |
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( |