summaryrefslogtreecommitdiff
path: root/internal/processing/workers/federate.go
diff options
context:
space:
mode:
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
+}