summaryrefslogtreecommitdiff
path: root/internal/processing/workers/federate.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-03-13 13:53:29 +0100
committerLibravatar GitHub <noreply@github.com>2024-03-13 13:53:29 +0100
commitab2d063fcb04f241a3147c843a021491f5fc0a55 (patch)
tree3d2eff864e8b19d4d9a24f4f1fe92feda8ee4dac /internal/processing/workers/federate.go
parent[bugfix]: Add missing Link headers in Swagger spec (#2751) (diff)
downloadgotosocial-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.go66
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
+}