diff options
author | 2024-03-13 13:53:29 +0100 | |
---|---|---|
committer | 2024-03-13 13:53:29 +0100 | |
commit | ab2d063fcb04f241a3147c843a021491f5fc0a55 (patch) | |
tree | 3d2eff864e8b19d4d9a24f4f1fe92feda8ee4dac /internal/processing/workers/federate.go | |
parent | [bugfix]: Add missing Link headers in Swagger spec (#2751) (diff) | |
download | gotosocial-ab2d063fcb04f241a3147c843a021491f5fc0a55.tar.xz |
[feature] Process outgoing Move from clientAPI (#2750)
* prevent moved accounts from taking create-type actions
* update move logic
* federate move out
* indicate on web profile when an account has moved
* [docs] Add migration docs section
* lock while checking + setting move state
* use redirectFollowers func for clientAPI as well
* comment typo
* linter? i barely know 'er!
* Update internal/uris/uri.go
Co-authored-by: Daenney <daenney@users.noreply.github.com>
* add a couple tests for move
* fix little mistake exposed by tests (thanks tests)
* ensure Move marked as successful
* attach shared util funcs to struct
* lock whole account when doing move
* move moving check to after error check
* replace repeated text with error func
* linterrrrrr!!!!
* catch self follow case
---------
Co-authored-by: Daenney <daenney@users.noreply.github.com>
Diffstat (limited to 'internal/processing/workers/federate.go')
-rw-r--r-- | internal/processing/workers/federate.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go index aacb8dcc8..9fdb8f662 100644 --- a/internal/processing/workers/federate.go +++ b/internal/processing/workers/federate.go @@ -23,6 +23,7 @@ import ( "github.com/superseriousbusiness/activity/pub" "github.com/superseriousbusiness/activity/streams" + "github.com/superseriousbusiness/gotosocial/internal/ap" "github.com/superseriousbusiness/gotosocial/internal/federation" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" @@ -954,3 +955,68 @@ func (f *federate) Flag(ctx context.Context, report *gtsmodel.Report) error { return nil } + +func (f *federate) MoveAccount(ctx context.Context, account *gtsmodel.Account) error { + // Do nothing if it's not our + // account that's been moved. + if !account.IsLocal() { + return nil + } + + // Parse relevant URI(s). + outboxIRI, err := parseURI(account.OutboxURI) + if err != nil { + return err + } + + // Actor doing the Move. + actorIRI := account.Move.Origin + + // Destination Actor of the Move. + targetIRI := account.Move.Target + + followersIRI, err := parseURI(account.FollowersURI) + if err != nil { + return err + } + + publicIRI, err := parseURI(pub.PublicActivityPubIRI) + if err != nil { + return err + } + + // Create a new move. + move := streams.NewActivityStreamsMove() + + // Set the Move ID. + if err := ap.SetJSONLDIdStr(move, account.Move.URI); err != nil { + return err + } + + // Set the Actor for the Move. + ap.AppendActorIRIs(move, actorIRI) + + // Set the account's IRI as the 'object' property. + ap.AppendObjectIRIs(move, actorIRI) + + // Set the target's IRI as the 'target' property. + ap.AppendTargetIRIs(move, targetIRI) + + // Address the move To followers. + ap.AppendTo(move, followersIRI) + + // Address the move CC public. + ap.AppendCc(move, publicIRI) + + // Send the Move via the Actor's outbox. + if _, err := f.FederatingActor().Send( + ctx, outboxIRI, move, + ); err != nil { + return gtserror.Newf( + "error sending activity %T via outbox %s: %w", + move, outboxIRI, err, + ) + } + + return nil +} |