summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-06-27 23:49:16 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-06-27 23:49:16 +0900
commit329f055a976dc3b2e12f2a0141bfab2c57ae9193 (patch)
tree0f11f906c0e0401b83604e91bfee33ff6214e254 /packages/backend/src/server/api
parentrefactor: remove duplicate code (#8895) (diff)
downloadsharkey-329f055a976dc3b2e12f2a0141bfab2c57ae9193.tar.gz
sharkey-329f055a976dc3b2e12f2a0141bfab2c57ae9193.tar.bz2
sharkey-329f055a976dc3b2e12f2a0141bfab2c57ae9193.zip
feat: make possible to delete an account by admin
Resolve #8830
Diffstat (limited to 'packages/backend/src/server/api')
-rw-r--r--packages/backend/src/server/api/endpoints.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/admin/delete-account.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/delete-account.ts20
3 files changed, 36 insertions, 17 deletions
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index 11d9d7c026..93f93cef0c 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -59,6 +59,7 @@ import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
import * as ep___admin_vacuum from './endpoints/admin/vacuum.js';
+import * as ep___admin_deleteAccount from './endpoints/admin/delete-account.js';
import * as ep___announcements from './endpoints/announcements.js';
import * as ep___antennas_create from './endpoints/antennas/create.js';
import * as ep___antennas_delete from './endpoints/antennas/delete.js';
@@ -370,6 +371,7 @@ const eps = [
['admin/unsuspend-user', ep___admin_unsuspendUser],
['admin/update-meta', ep___admin_updateMeta],
['admin/vacuum', ep___admin_vacuum],
+ ['admin/delete-account', ep___admin_deleteAccount],
['announcements', ep___announcements],
['antennas/create', ep___antennas_create],
['antennas/delete', ep___antennas_delete],
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-account.ts b/packages/backend/src/server/api/endpoints/admin/delete-account.ts
new file mode 100644
index 0000000000..2d7ef2f236
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/delete-account.ts
@@ -0,0 +1,31 @@
+import { Users } from '@/models/index.js';
+import { deleteAccount } from '@/services/delete-account.js';
+import define from '../../define.js';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ res: {
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ userId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['userId'],
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, paramDef, async (ps) => {
+ const user = await Users.findOneByOrFail({ id: ps.userId });
+ if (user.isDeleted) {
+ return;
+ }
+
+ await deleteAccount(user);
+});
diff --git a/packages/backend/src/server/api/endpoints/i/delete-account.ts b/packages/backend/src/server/api/endpoints/i/delete-account.ts
index 184005eb53..ede4a9d03b 100644
--- a/packages/backend/src/server/api/endpoints/i/delete-account.ts
+++ b/packages/backend/src/server/api/endpoints/i/delete-account.ts
@@ -1,9 +1,7 @@
import bcrypt from 'bcryptjs';
-import define from '../../define.js';
import { UserProfiles, Users } from '@/models/index.js';
-import { doPostSuspend } from '@/services/suspend-user.js';
-import { publishUserEvent } from '@/services/stream.js';
-import { createDeleteAccountJob } from '@/queue/index.js';
+import { deleteAccount } from '@/services/delete-account.js';
+import define from '../../define.js';
export const meta = {
requireCredential: true,
@@ -34,17 +32,5 @@ export default define(meta, paramDef, async (ps, user) => {
throw new Error('incorrect password');
}
- // 物理削除する前にDelete activityを送信する
- await doPostSuspend(user).catch(e => {});
-
- createDeleteAccountJob(user, {
- soft: false,
- });
-
- await Users.update(user.id, {
- isDeleted: true,
- });
-
- // Terminate streaming
- publishUserEvent(user.id, 'terminate', {});
+ await deleteAccount(user);
});