From 29cecd750f2b6eabafe3d25265389c14ea165637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 11 Apr 2026 14:45:11 +0900 Subject: [PATCH] =?UTF-8?q?fix(backend):=20=E5=AD=98=E5=9C=A8=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84Actor=E3=81=AB=E5=AF=BE=E3=81=99=E3=82=8BDele?= =?UTF-8?q?te=E3=82=A2=E3=82=AF=E3=83=86=E3=82=A3=E3=83=93=E3=83=86?= =?UTF-8?q?=E3=82=A3=E3=81=AF=E7=84=A1=E8=A6=96=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=20(#17294)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(backend): 存在しないActorに対するDeleteアクティビティは無視するように * Update Changelog * fix * Revert "fix" This reverts commit 985feea32698552f9dc2880d0541f559a789b47d. * fix? * fix * fix * fix * fix * refactor: remove unused imports * fix * Update CHANGELOG.md [ci skip] --- CHANGELOG.md | 1 + .../queue/processors/InboxProcessorService.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 406f5ba606..e7cfa6dc7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### Server - Fix: `/api-doc` にアクセスできない問題を修正 - Fix: support `alsoKnownAs` from remote actors as either array or unwrapped singleton +- Fix: ローカルに存在しないリモートアカウントに対するアカウント削除リクエストを受信した際に、そのユーザーを新規作成して削除する挙動を修正 ## 2026.3.2 diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts index 079e014da8..75e2d0753e 100644 --- a/packages/backend/src/queue/processors/InboxProcessorService.ts +++ b/packages/backend/src/queue/processors/InboxProcessorService.ts @@ -13,7 +13,7 @@ import { FetchInstanceMetadataService } from '@/core/FetchInstanceMetadataServic import InstanceChart from '@/core/chart/charts/instance.js'; import ApRequestChart from '@/core/chart/charts/ap-request.js'; import FederationChart from '@/core/chart/charts/federation.js'; -import { getApId } from '@/core/activitypub/type.js'; +import { getApId, isActor, isDelete } from '@/core/activitypub/type.js'; import type { IActivity } from '@/core/activitypub/type.js'; import type { MiRemoteUser } from '@/models/User.js'; import type { MiUserPublickey } from '@/models/UserPublickey.js'; @@ -84,6 +84,23 @@ export class InboxProcessorService implements OnApplicationShutdown { return `Old keyId is no longer supported. ${keyIdLower}`; } + { + let userExistenceCheckApId: string | null = null; + + // 存在しないActorに対するActorのDeleteアクティビティは無視する。 + // actorとobjectが同じならばそれはActorに違いない + if (isDelete(activity) && typeof activity.object === 'object' && (isActor(activity.object) || getApId(activity.actor) === getApId(activity.object))) { + userExistenceCheckApId = getApId(activity.object); + } + + if (userExistenceCheckApId != null) { + const user = await this.apDbResolverService.getUserFromApId(userExistenceCheckApId); + if (user == null) { + throw new Bull.UnrecoverableError(`skip: user not found for delete activity. ${getApId(userExistenceCheckApId)}`); + } + } + } + // HTTP-Signature keyIdを元にDBから取得 let authUser: { user: MiRemoteUser;