mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] Process incoming Move
activity (#2724)
* [feature] Process incoming account Move activity * fix targetAcct typo * put move origin account on fMsg * shift more move functionality back to the worker fn * simplify error logic
This commit is contained in:
@ -846,4 +846,44 @@ GoToSocial will only set `movedTo` on outgoing Actors when an account `Move` has
|
||||
|
||||
### `Move` Activity
|
||||
|
||||
TODO: document how `Move` works!
|
||||
To actually trigger account migrations, GoToSocial uses the `Move` Activity with Actor URI as Object and Target, for example:
|
||||
|
||||
```json
|
||||
{
|
||||
"@context": "https://www.w3.org/ns/activitystreams",
|
||||
"id": "https://example.org/users/1happyturtle/moves/01HR9FDFCAGM7JYPMWNTFRDQE9",
|
||||
"actor": "https://example.org/users/1happyturtle",
|
||||
"type": "Move",
|
||||
"object": "https://example.org/users/1happyturtle",
|
||||
"target": "https://another-server.com/users/my_new_account_hurray",
|
||||
"to": "https://example.org/users/1happyturtle/followers"
|
||||
}
|
||||
```
|
||||
|
||||
In the above `Move`, Actor `https://example.org/users/1happyturtle` indicates that their account is moving to the URI `https://another-server.com/users/my_new_account_hurray`.
|
||||
|
||||
#### Incoming
|
||||
|
||||
On receiving a `Move` activity in an Actor's Inbox, GoToSocial will first validate the `Move` by making the following checks:
|
||||
|
||||
1. Request was signed by `actor`.
|
||||
2. `actor` and `object` fields are the same (you can't `Move` someone else's account).
|
||||
3. `actor` has not already moved somewhere else.
|
||||
4. `target` is a valid Actor URI: retrievable, not suspended, not already moved, and on a domain that's not defederated by the GoToSocial instance that received the `Move`.
|
||||
5. `target` has `alsoKnownAs` set to the `actor` that sent the `Move`. In this example, `https://another-server.com/users/my_new_account_hurray` must have an `alsoKnownAs` value that includes `https://example.org/users/1happyturtle`.
|
||||
|
||||
If checks pass, then GoToSocial will process the `Move` by redirecting followers to the new account:
|
||||
|
||||
1. Select all followers on this GtS instance of the `actor` doing the `Move`.
|
||||
2. For each local follower selected in this way, send a follow request from that follower to the `target` of the `Move`.
|
||||
3. Remove all follows targeting the "old" `actor`.
|
||||
|
||||
The end result of this is that all followers of `https://example.org/users/1happyturtle` on the receiving instance will now be following `https://another-server.com/users/my_new_account_hurray` instead.
|
||||
|
||||
GoToSocial will also remove all follow and pending follow requests owned by the `actor` doing the `Move`; it's up to the `target` account to send follow requests out again.
|
||||
|
||||
To prevent potential DoS vectors, GoToSocial enforces a 7-day cooldown on `Move`s. Once an account has successfully moved, GoToSocial will not process further moves from the new account until 7 days after the previous move.
|
||||
|
||||
#### Outgoing
|
||||
|
||||
Outgoing account migrations use the `Move` Activity in much the same way. When an Actor on a GoToSocial instance wants to `Move`, GtS will first check and validate the `Move` target, and ensure it has an `alsoKnownAs` entry equal to the Actor doing the `Move`. On successful validation, a `Move` message will be sent out to all of the moving Actor's followers, indicating the `target` of the Move. GoToSocial expects remote instances to transfer the `actor`'s followers to the `target`.
|
||||
|
Reference in New Issue
Block a user