Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[chore] Expose move endpoint again, small settings panel fixes #2752

Merged
merged 1 commit into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3316,7 +3316,6 @@ paths:
post:
consumes:
- multipart/form-data
description: NOT IMPLEMENTED YET!
operationId: accountMove
parameters:
- description: Password of the account user, for confirmation.
Expand Down
2 changes: 0 additions & 2 deletions internal/api/client/accounts/accountmove.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ import (
//
// Move your account to another account.
//
// NOT IMPLEMENTED YET!
//
// ---
// tags:
// - accounts
Expand Down
2 changes: 1 addition & 1 deletion internal/api/client/accounts/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,5 +113,5 @@ func (m *Module) Route(attachHandler func(method string, path string, f ...gin.H

// migration handlers
attachHandler(http.MethodPost, AliasPath, m.AccountAliasPOSTHandler)
// attachHandler(http.MethodPost, MovePath, m.AccountMovePOSTHandler) // todo: enable this only when Move is completed
attachHandler(http.MethodPost, MovePath, m.AccountMovePOSTHandler)
}
11 changes: 11 additions & 0 deletions internal/processing/account/move.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,17 @@ func (p *Processor) MoveSelf(
}
}

// If originAcct has already moved, ensure
// this move reattempt is to the same account.
if originAcct.IsMoving() &&
originAcct.MovedToURI != targetAcct.URI {
err := fmt.Errorf(
"your account is already Moving or has Moved to %s; you cannot also Move to %s",
originAcct.MovedToURI, targetAcct.URI,
)
return gtserror.NewErrorUnprocessableEntity(err, err.Error())
}

// Target account MUST be aliased to this
// account for this to be a valid Move.
if !slices.Contains(targetAcct.AlsoKnownAsURIs, originAcct.URI) {
Expand Down
90 changes: 45 additions & 45 deletions web/source/settings/user/migration.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,49 +40,23 @@ export default function UserMigration() {
}

function UserMigrationForm({ data: profile }) {
let urlStr = store.getState().oauth.instanceUrl ?? "";
let url = new URL(urlStr);

return (
<>
<h2>Account Migration Settings</h2>
<div className="info">
<i className="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
<b>Moving your account to another instance, or moving an account from another instance to your account, isn't implemented yet! You will only be able to use the "alias" section of the below panel. <a href="https://github.com/superseriousbusiness/gotosocial/issues/130" target="_blank" rel="noopener noreferrer">See here for progress</a>.</b>
</div>
<p>
The following settings allow you to <strong>alias</strong> your account to another account
elsewhere, and to <strong>move</strong> your followers and following lists to another account.
The following settings allow you to <strong>alias</strong> your account to
another account elsewhere, or to <strong>move</strong> to another account.
</p>
<p>
Account <strong>aliasing</strong> is harmless and reversible; you can
set and unset up to five account aliases as many times as you wish.
</p>
<p>
The account <strong>move</strong> action, on the other hand, has serious and irreversible consequences.
</p>
<p>
To move, you must set an alias from your account to the target account, using this settings panel.
The account <strong>move</strong> action, on the other
hand, has serious and irreversible consequences.
</p>
<p>
You must also set an alias from the target account back to your account, using
the settings panel of the instance on which the target account resides.
</p>
<p>
Provide the following details to the other instance:
</p>
<dl className="migration-details">
<div>
<dt>Account handle/username:</dt>
<dd>@{profile.acct}@{url.host}</dd>
</div>
<div>
<dt>Account URI:</dt>
<dd>{urlStr}/users/{profile.username}</dd>
</div>
</dl>
<p>
For more information on account migration, please see <a href="https://docs.gotosocial.org/en/latest/user_guide/settings/#alias-account" target="_blank" className="docslink" rel="noreferrer">the documentation</a>.
For more information on account migration, please see <a href="https://docs.gotosocial.org/en/latest/user_guide/settings/#migration" target="_blank" className="docslink" rel="noreferrer">the documentation</a>.
</p>
<AliasForm data={profile} />
<MoveForm data={profile} />
Expand Down Expand Up @@ -166,44 +140,70 @@ function AlsoKnownAsURI({ index, data }) {
}

function MoveForm({ data: profile }) {
let urlStr = store.getState().oauth.instanceUrl ?? "";
let url = new URL(urlStr);

const form = {
movedToURI: useTextInput("moved_to_uri", {
source: profile,
valueSelector: (p) => p.moved?.uri },
valueSelector: (p) => p.moved?.url },
),
password: useTextInput("password"),
};

const [submitForm, result] = useFormSubmit(form, useMoveAccountMutation());
const [submitForm, result] = useFormSubmit(form, useMoveAccountMutation(), {
changedOnly: false,
});

return (
<form className="user-migration-move" onSubmit={submitForm}>
<div className="form-section-docs without-border">
<h3>Move Account</h3>
<a
href="https://docs.gotosocial.org/en/latest/user_guide/settings/#move-account"
target="_blank"
className="docslink"
rel="noreferrer"
>
Learn more about moving your account (opens in a new tab)
</a>
<p>
<p>
For a move to be successful, you must have already set an alias from the
target account back to the account you're moving from (ie., this account),
using the settings panel of the instance on which the target account resides.
</p>
<p>
To do this, provide the following details to the other instance:
</p>
<dl className="migration-details">
<div>
<dt>Account handle/username:</dt>
<dd>@{profile.acct}@{url.host}</dd>
</div>
<div>
<dt>Account URI:</dt>
<dd>{urlStr}/users/{profile.username}</dd>
</div>
</dl>
<br/>
<a
href="https://docs.gotosocial.org/en/latest/user_guide/settings/#move-account"
target="_blank"
className="docslink"
rel="noreferrer"
>
Learn more about moving your account (opens in a new tab)
</a>
</p>
</div>
<TextInput
disabled={true}
disabled={false}
field={form.movedToURI}
label="Move target URI"
placeholder="https://example.org/users/my_new_account"
/>
<TextInput
disabled={true}
disabled={false}
type="password"
name="password"
field={form.password}
label="Confirm account password"
label="Current account password"
/>
<MutationButton
disabled={true}
disabled={false}
label="Confirm account move"
result={result}
/>
Expand Down