diff options
| author | 2024-01-18 16:11:13 +0000 | |
|---|---|---|
| committer | 2024-02-14 14:03:20 +0100 | |
| commit | 5d44ad75990cb66db4c1bd9bfe0e499ba2b52aa1 (patch) | |
| tree | 2e2981d7632151d1dd9fe488b0d33d8a6c649d92 /internal/federation | |
| parent | [bugfix] Ensure activities sender always = activities actor (#2608) (diff) | |
| download | gotosocial-5d44ad75990cb66db4c1bd9bfe0e499ba2b52aa1.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 ca0adbe1f..738087d62 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()) @@ -78,15 +73,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 6b70a4260..ccf6397cd 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( |
