From 4ea7b2dd63491e4cdcf8b5bf3896fa666e73a84f Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 18 Sep 2021 03:26:36 +0900 Subject: fix(server): fix #7786 --- src/queue/processors/db/export-blocking.ts | 2 +- src/queue/processors/db/export-following.ts | 2 +- src/queue/processors/db/export-mute.ts | 2 +- src/queue/processors/db/export-notes.ts | 2 +- src/queue/processors/db/export-user-lists.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/queue') diff --git a/src/queue/processors/db/export-blocking.ts b/src/queue/processors/db/export-blocking.ts index a0fc385006..8b8aa259d4 100644 --- a/src/queue/processors/db/export-blocking.ts +++ b/src/queue/processors/db/export-blocking.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { queueLogger } from '../../logger'; import addFile from '@/services/drive/add-file'; -import dateFormat from 'dateformat'; +import * as dateFormat from 'dateformat'; import { getFullApAccount } from '@/misc/convert-host'; import { Users, Blockings } from '@/models/index'; import { MoreThan } from 'typeorm'; diff --git a/src/queue/processors/db/export-following.ts b/src/queue/processors/db/export-following.ts index 3612150363..a0ecf5f560 100644 --- a/src/queue/processors/db/export-following.ts +++ b/src/queue/processors/db/export-following.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { queueLogger } from '../../logger'; import addFile from '@/services/drive/add-file'; -import dateFormat from 'dateformat'; +import * as dateFormat from 'dateformat'; import { getFullApAccount } from '@/misc/convert-host'; import { Users, Followings } from '@/models/index'; import { MoreThan } from 'typeorm'; diff --git a/src/queue/processors/db/export-mute.ts b/src/queue/processors/db/export-mute.ts index 70b2272cdb..d5976f7d56 100644 --- a/src/queue/processors/db/export-mute.ts +++ b/src/queue/processors/db/export-mute.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { queueLogger } from '../../logger'; import addFile from '@/services/drive/add-file'; -import dateFormat from 'dateformat'; +import * as dateFormat from 'dateformat'; import { getFullApAccount } from '@/misc/convert-host'; import { Users, Mutings } from '@/models/index'; import { MoreThan } from 'typeorm'; diff --git a/src/queue/processors/db/export-notes.ts b/src/queue/processors/db/export-notes.ts index 3f146aff1b..49850aa706 100644 --- a/src/queue/processors/db/export-notes.ts +++ b/src/queue/processors/db/export-notes.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { queueLogger } from '../../logger'; import addFile from '@/services/drive/add-file'; -import dateFormat from 'dateformat'; +import * as dateFormat from 'dateformat'; import { Users, Notes, Polls } from '@/models/index'; import { MoreThan } from 'typeorm'; import { Note } from '@/models/entities/note'; diff --git a/src/queue/processors/db/export-user-lists.ts b/src/queue/processors/db/export-user-lists.ts index 89bbd5af18..8a86c4df5d 100644 --- a/src/queue/processors/db/export-user-lists.ts +++ b/src/queue/processors/db/export-user-lists.ts @@ -4,7 +4,7 @@ import * as fs from 'fs'; import { queueLogger } from '../../logger'; import addFile from '@/services/drive/add-file'; -import dateFormat from 'dateformat'; +import * as dateFormat from 'dateformat'; import { getFullApAccount } from '@/misc/convert-host'; import { Users, UserLists, UserListJoinings } from '@/models/index'; import { In } from 'typeorm'; -- cgit v1.2.3-freya From 388de9dc96d0250a58cdcef85df9bcd437b5aa99 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Mon, 20 Sep 2021 21:55:19 +0900 Subject: chore, perf: Reduce redis memory (#7816) * Reduce redis memory * CHANGELOG * a --- CHANGELOG.md | 1 + src/queue/index.ts | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src/queue') diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a15faf6a7..b60fd7cfa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ --> ## 12.x.x (unreleased) +- ActivityPub: deliverキューのメモリ使用量を削減 ### Improvements - ActivityPub: リモートユーザーのDeleteアクティビティに対応 diff --git a/src/queue/index.ts b/src/queue/index.ts index 4ca7998e61..ee34ed47e4 100644 --- a/src/queue/index.ts +++ b/src/queue/index.ts @@ -64,7 +64,9 @@ export function deliver(user: ThinUser, content: unknown, to: string | null) { if (to == null) return null; const data = { - user, + user: { + id: user.id + }, content, to }; -- cgit v1.2.3-freya From 9208825975f56bab8aca7ae8d6507f6cfe0f599a Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 22 Sep 2021 17:34:48 +0900 Subject: feat(server): 管理者用アカウント削除API実装 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 動作確認済み Resolve #7735 --- CHANGELOG.md | 2 + src/queue/index.ts | 5 +- src/queue/processors/db/delete-account.ts | 11 +++-- src/queue/types.ts | 7 ++- src/server/api/endpoints/admin/accounts/delete.ts | 58 +++++++++++++++++++++++ src/server/api/endpoints/i/delete-account.ts | 4 +- 6 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 src/server/api/endpoints/admin/accounts/delete.ts (limited to 'src/queue') diff --git a/CHANGELOG.md b/CHANGELOG.md index cf5621fc05..e034c4e553 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ - ActivityPub: リモートユーザーのDeleteアクティビティに対応 - ActivityPub: add resolver check for blocked instance - ActivityPub: deliverキューのメモリ使用量を削減 +- API: 管理者用アカウント削除APIを実装(/admin/accounts/delete) + - リモートユーザーの削除も可能に - アカウントが凍結された場合に、凍結された旨を表示してからログアウトするように - 凍結されたアカウントにログインしようとしたときに、凍結されている旨を表示するように - リスト、アンテナタイムラインを個別ページとして分割 diff --git a/src/queue/index.ts b/src/queue/index.ts index ee34ed47e4..0ce10a4c60 100644 --- a/src/queue/index.ts +++ b/src/queue/index.ts @@ -173,9 +173,10 @@ export function createImportUserListsJob(user: ThinUser, fileId: DriveFile['id'] }); } -export function createDeleteAccountJob(user: ThinUser) { +export function createDeleteAccountJob(user: ThinUser, opts: { soft?: boolean; }) { return dbQueue.add('deleteAccount', { - user: user + user: user, + soft: opts.soft }, { removeOnComplete: true, removeOnFail: true diff --git a/src/queue/processors/db/delete-account.ts b/src/queue/processors/db/delete-account.ts index 65327754c2..e54f38e35e 100644 --- a/src/queue/processors/db/delete-account.ts +++ b/src/queue/processors/db/delete-account.ts @@ -1,7 +1,7 @@ import * as Bull from 'bull'; import { queueLogger } from '../../logger'; import { DriveFiles, Notes, UserProfiles, Users } from '@/models/index'; -import { DbUserJobData } from '@/queue/types'; +import { DbUserDeleteJobData } from '@/queue/types'; import { Note } from '@/models/entities/note'; import { DriveFile } from '@/models/entities/drive-file'; import { MoreThan } from 'typeorm'; @@ -10,7 +10,7 @@ import { sendEmail } from '@/services/send-email'; const logger = queueLogger.createSubLogger('delete-account'); -export async function deleteAccount(job: Bull.Job): Promise { +export async function deleteAccount(job: Bull.Job): Promise { logger.info(`Deleting account of ${job.data.user.id} ...`); const user = await Users.findOne(job.data.user.id); @@ -83,7 +83,12 @@ export async function deleteAccount(job: Bull.Job): Promise { + const user = await Users.findOne(ps.userId); + + if (user == null) { + throw new Error('user not found'); + } + + if (user.isAdmin) { + throw new Error('cannot suspend admin'); + } + + if (user.isModerator) { + throw new Error('cannot suspend moderator'); + } + + if (Users.isLocalUser(user)) { + // 物理削除する前にDelete activityを送信する + await doPostSuspend(user).catch(e => {}); + + createDeleteAccountJob(user, { + soft: false + }); + } else { + createDeleteAccountJob(user, { + soft: true // リモートユーザーの削除は、完全にDBから物理削除してしまうと再度連合してきてアカウントが復活する可能性があるため、soft指定する + }); + } + + await Users.update(user.id, { + isDeleted: true, + }); + + if (Users.isLocalUser(user)) { + // Terminate streaming + publishUserEvent(user.id, 'terminate', {}); + } +}); diff --git a/src/server/api/endpoints/i/delete-account.ts b/src/server/api/endpoints/i/delete-account.ts index 77f11925cd..10e5adf64a 100644 --- a/src/server/api/endpoints/i/delete-account.ts +++ b/src/server/api/endpoints/i/delete-account.ts @@ -35,7 +35,9 @@ export default define(meta, async (ps, user) => { // 物理削除する前にDelete activityを送信する await doPostSuspend(user).catch(e => {}); - createDeleteAccountJob(user); + createDeleteAccountJob(user, { + soft: false + }); await Users.update(user.id, { isDeleted: true, -- cgit v1.2.3-freya