diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts index 11e9824c6..95890c01d 100644 --- a/packages/pl-api/lib/client.ts +++ b/packages/pl-api/lib/client.ts @@ -1422,6 +1422,17 @@ class PlApiClient { return response.json as {}; }, + /** + * Requires features{@link Features['deleteAccountWithoutPassword']}. + */ + deleteAccountWithoutPassword: async () => { + const response = await this.request('/api/v1/settings/delete_account', { + method: 'POST', + }); + + return response.json as {}; + }, + /** * Disable an account * diff --git a/packages/pl-api/lib/features.ts b/packages/pl-api/lib/features.ts index a7e8d5231..dbd2de626 100644 --- a/packages/pl-api/lib/features.ts +++ b/packages/pl-api/lib/features.ts @@ -510,6 +510,11 @@ const getFeatures = (instance: Instance) => { v.software === PLEROMA, ]), + /** + * @see POST /api/v1/settings/delete_account + */ + deleteAccountWithoutPassword: v.software === MITRA && gte(v.version, '2.14.0'), + /** * Allow to register on a given domain * @see GET /api/v1/pleroma/admin/domains diff --git a/packages/pl-fe/src/actions/security.ts b/packages/pl-fe/src/actions/security.ts index 43ba43d22..966922c20 100644 --- a/packages/pl-fe/src/actions/security.ts +++ b/packages/pl-fe/src/actions/security.ts @@ -36,7 +36,9 @@ const deleteAccount = (password: string) => (dispatch: AppDispatch, getState: () => RootState) => { const account = getLoggedInAccount(getState())!; - return getClient(getState).settings.deleteAccount(password).then(() => { + const client = getClient(getState); + + return (client.features.deleteAccount ? client.settings.deleteAccount(password) : client.settings.deleteAccountWithoutPassword()).then(() => { dispatch({ type: AUTH_LOGGED_OUT, account }); toast.success(messages.loggedOut); }); diff --git a/packages/pl-fe/src/features/delete-account/index.tsx b/packages/pl-fe/src/features/delete-account/index.tsx index 79d011ecc..2f56d848f 100644 --- a/packages/pl-fe/src/features/delete-account/index.tsx +++ b/packages/pl-fe/src/features/delete-account/index.tsx @@ -17,8 +17,8 @@ import toast from 'pl-fe/toast'; const messages = defineMessages({ passwordFieldLabel: { id: 'security.fields.password.label', defaultMessage: 'Password' }, deleteHeader: { id: 'security.headers.delete', defaultMessage: 'Delete account' }, - deleteText: { id: 'security.text.delete', defaultMessage: 'To delete your account, enter your password then click Delete Account. This is a permanent action that cannot be undone. Your account will be destroyed from this server, and a deletion request will be sent to other servers. It\'s not guaranteed that all servers will purge your account.' }, - localDeleteText: { id: 'security.text.delete.local', defaultMessage: 'To delete your account, enter your password then click Delete Account. This is a permanent action that cannot be undone.' }, + deleteText: { id: 'security.text.delete', defaultMessage: 'To delete your account, enter your password and then click Delete account. This is a permanent action that cannot be undone. Your account will be destroyed from this server, and a deletion request will be sent to other servers. It\'s not guaranteed that all servers will purge your account.' }, + localDeleteText: { id: 'security.text.delete.local', defaultMessage: 'To delete your account, enter your password and then click Delete account. This is a permanent action that cannot be undone.' }, deleteSubmit: { id: 'security.submit.delete', defaultMessage: 'Delete account' }, deleteAccountSuccess: { id: 'security.delete_account.success', defaultMessage: 'Account successfully deleted.' }, deleteAccountFail: { id: 'security.delete_account.fail', defaultMessage: 'Account deletion failed.' }, @@ -65,14 +65,16 @@ const DeleteAccount = () => {
- - - + {!features.deleteAccountWithoutPassword && ( + + + + )}