From 0925235a96b069d9cf159a6068fc95076a1e4329 Mon Sep 17 00:00:00 2001 From: Anthony Wang Date: Wed, 20 Jul 2022 14:42:39 -0500 Subject: [PATCH] Fix federated following/unfollowing regression --- modules/activitypub/follow.go | 12 +++--------- modules/activitypub/iri.go | 9 +++++++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/activitypub/follow.go b/modules/activitypub/follow.go index c0ccf6600a..18c58bf4ce 100644 --- a/modules/activitypub/follow.go +++ b/modules/activitypub/follow.go @@ -46,8 +46,9 @@ func Follow(ctx context.Context, follow ap.Follow) { // Process a Undo follow activity // I haven't tried this yet so hopefully it works func Unfollow(ctx context.Context, unfollow ap.Undo) { + follow := unfollow.Object.(*ap.Follow) // Actor is the user performing the undo follow - actorIRI := unfollow.Actor.GetID() + actorIRI := follow.Actor.GetID() actorUser, err := personIRIToUser(ctx, actorIRI) if err != nil { log.Warn("Couldn't find actor user for follow", err) @@ -55,7 +56,7 @@ func Unfollow(ctx context.Context, unfollow ap.Undo) { } // Object is the user being unfollowed - objectIRI := unfollow.Object.GetID() + objectIRI := follow.Object.GetID() objectUser, err := personIRIToUser(ctx, objectIRI) // Must be a local user if strings.Contains(objectUser.Name, "@") || err != nil { @@ -64,11 +65,4 @@ func Unfollow(ctx context.Context, unfollow ap.Undo) { } user_model.UnfollowUser(actorUser.ID, objectUser.ID) - - // Send back an Accept activity - accept := ap.AcceptNew(objectIRI, unfollow) - accept.Actor = ap.Person{ID: objectIRI} - accept.To = ap.ItemCollection{ap.IRI(actorIRI.String() + "/inbox")} - accept.Object = unfollow - Send(objectUser, accept) } diff --git a/modules/activitypub/iri.go b/modules/activitypub/iri.go index e6a5645022..1733c0ab33 100644 --- a/modules/activitypub/iri.go +++ b/modules/activitypub/iri.go @@ -43,10 +43,15 @@ func personIRIToUser(ctx context.Context, personIRI ap.IRI) (*user_model.User, e } user, err := user_model.GetUserByName(ctx, name) - if err != nil || !strings.Contains(name, "@") { + if err != nil && !strings.Contains(name, "@") { return user, err } - FederatedUserNew(personIRI) + + err = FederatedUserNew(personIRI) + if err != nil { + return nil, err + } + return user_model.GetUserByName(ctx, name) }