[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>
This commit is contained in:
tobi 2024-03-13 13:53:29 +01:00 committed by GitHub
commit ab2d063fcb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
60 changed files with 1124 additions and 309 deletions

View file

@ -177,21 +177,31 @@ func (m *moveDB) getMove(
}
// Populate the Move by parsing out the URIs.
if err := m.PopulateMove(ctx, move); err != nil {
return nil, err
}
return move, nil
}
func (m *moveDB) PopulateMove(ctx context.Context, move *gtsmodel.Move) error {
if move.Origin == nil {
var err error
move.Origin, err = url.Parse(move.OriginURI)
if err != nil {
return nil, fmt.Errorf("error parsing Move originURI: %w", err)
return fmt.Errorf("error parsing Move originURI: %w", err)
}
}
if move.Target == nil {
var err error
move.Target, err = url.Parse(move.TargetURI)
if err != nil {
return nil, fmt.Errorf("error parsing Move originURI: %w", err)
return fmt.Errorf("error parsing Move targetURI: %w", err)
}
}
return move, nil
return nil
}
func (m *moveDB) PutMove(ctx context.Context, move *gtsmodel.Move) error {

View file

@ -34,6 +34,9 @@ type Move interface {
// GetMoveByOriginTarget gets one move with the given originURI and targetURI.
GetMoveByOriginTarget(ctx context.Context, originURI string, targetURI string) (*gtsmodel.Move, error)
// PopulateMove parses out the origin and target URIs on the move.
PopulateMove(ctx context.Context, move *gtsmodel.Move) error
// GetLatestMoveSuccessInvolvingURIs gets the time of
// the latest successfully-processed Move that includes
// either uri1 or uri2 in target or origin positions.