From 3a3122454a6416bec30a6e81a60c80df5d7e206c Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 21:29:09 +0900 Subject: [PATCH 1/9] =?UTF-8?q?chore:=20=E7=9F=A5=E3=82=89=E3=82=93?= =?UTF-8?q?=E3=83=AA=E3=83=A2=E3=83=BC=E3=83=88=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=81=AE=E3=83=AA=E3=83=97=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=99=E3=82=8B=E8=A8=AD=E5=AE=9A=E3=82=92=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC=E3=83=AB=E3=83=91=E3=83=8D?= =?UTF-8?q?=E3=83=AB=E3=81=8B=E3=82=89=E3=81=84=E3=81=98=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rilaBlockMentionsFromUnfamiliarRemoteUsers.js | 16 ++++++++++++++++ packages/backend/src/config.ts | 3 --- packages/backend/src/core/NoteCreateService.ts | 2 +- packages/backend/src/models/Meta.ts | 5 +++++ .../src/server/api/endpoints/admin/meta.ts | 5 +++++ .../server/api/endpoints/admin/update-meta.ts | 5 +++++ packages/frontend/src/pages/admin/moderation.vue | 7 +++++++ packages/misskey-js/src/autogen/types.ts | 2 ++ 8 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 packages/backend/migration/1719663422807-NirilaBlockMentionsFromUnfamiliarRemoteUsers.js diff --git a/packages/backend/migration/1719663422807-NirilaBlockMentionsFromUnfamiliarRemoteUsers.js b/packages/backend/migration/1719663422807-NirilaBlockMentionsFromUnfamiliarRemoteUsers.js new file mode 100644 index 000000000000..b89a50b69add --- /dev/null +++ b/packages/backend/migration/1719663422807-NirilaBlockMentionsFromUnfamiliarRemoteUsers.js @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: anatawa12 + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class NirilaBlockMentionsFromUnfamiliarRemoteUsers1719663422807 { + name = 'NirilaBlockMentionsFromUnfamiliarRemoteUsers1719663422807' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "nirilaBlockMentionsFromUnfamiliarRemoteUsers" boolean NOT NULL DEFAULT false`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "nirilaBlockMentionsFromUnfamiliarRemoteUsers"`); + } +} diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index b2b35f3af97f..70f4f7392bf9 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -103,7 +103,6 @@ type Source = { maxWebImageSize?: number; withRepliesInHomeTL?: boolean; withRepliesInUserList?: boolean; - blockMentionsFromUnfamiliarRemoteUsers?: boolean; } }; @@ -191,7 +190,6 @@ export type Config = { maxWebImageSize?: number; withRepliesInHomeTL?: boolean, withRepliesInUserList: boolean, - blockMentionsFromUnfamiliarRemoteUsers: boolean; } }; @@ -237,7 +235,6 @@ export function loadConfig(): Config { // to avoid merge conflict in the future, this is at top nirila: Object.assign({ withRepliesInUserList: true, - blockMentionsFromUnfamiliarRemoteUsers: false, }, config.nirila ?? {}), version, publishTarballInsteadOfProvideRepositoryUrl: !!config.publishTarballInsteadOfProvideRepositoryUrl, diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index c497567e5883..b4ebc54fdd9e 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -377,7 +377,7 @@ export class NoteCreateService implements OnApplicationShutdown { || (data.visibility === 'specified' && data.visibleUsers?.some(u => u.host === null)) || data.reply?.userHost === null || (this.isRenote(data) && this.isQuote(data) && data.renote?.userHost === null) || false; - if (this.config.nirila.blockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification) { + if (meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification) { const userEntity = await this.usersRepository.findOneBy({ id: user.id }); if ((userEntity?.followersCount ?? 0) === 0) { this.logger.error('Request rejected because user has no local followers', { user: user.id, note: data }); diff --git a/packages/backend/src/models/Meta.ts b/packages/backend/src/models/Meta.ts index e7e050a02c8f..f35bea20442f 100644 --- a/packages/backend/src/models/Meta.ts +++ b/packages/backend/src/models/Meta.ts @@ -625,4 +625,9 @@ export class MiMeta { nullable: true, }) public urlPreviewUserAgent: string | null; + + @Column('boolean', { + default: false, + }) + public nirilaBlockMentionsFromUnfamiliarRemoteUsers: boolean; } diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 327353d2b7e2..e62ee3496714 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -481,6 +481,10 @@ export const meta = { type: 'string', optional: false, nullable: true, }, + nirilaBlockMentionsFromUnfamiliarRemoteUsers: { + type: 'boolean', + optional: false, nullable: false, + }, }, }, } as const; @@ -615,6 +619,7 @@ export default class extends Endpoint { // eslint- urlPreviewRequireContentLength: instance.urlPreviewRequireContentLength, urlPreviewUserAgent: instance.urlPreviewUserAgent, urlPreviewSummaryProxyUrl: instance.urlPreviewSummaryProxyUrl, + nirilaBlockMentionsFromUnfamiliarRemoteUsers: instance.nirilaBlockMentionsFromUnfamiliarRemoteUsers, }; }); } diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index c53990802711..076fbf0dfd3c 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -161,6 +161,7 @@ export const paramDef = { urlPreviewRequireContentLength: { type: 'boolean' }, urlPreviewUserAgent: { type: 'string', nullable: true }, urlPreviewSummaryProxyUrl: { type: 'string', nullable: true }, + nirilaBlockMentionsFromUnfamiliarRemoteUsers: { type: 'boolean', nullable: false }, }, required: [], } as const; @@ -622,6 +623,10 @@ export default class extends Endpoint { // eslint- set.urlPreviewSummaryProxyUrl = value === '' ? null : value; } + if (ps.nirilaBlockMentionsFromUnfamiliarRemoteUsers !== undefined) { + set.nirilaBlockMentionsFromUnfamiliarRemoteUsers = ps.nirilaBlockMentionsFromUnfamiliarRemoteUsers; + } + const before = await this.metaService.fetch(true); await this.metaService.update(set); diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue index a75799696d8f..f43388bd098d 100644 --- a/packages/frontend/src/pages/admin/moderation.vue +++ b/packages/frontend/src/pages/admin/moderation.vue @@ -55,6 +55,10 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + @@ -93,6 +97,7 @@ const preservedUsernames = ref(''); const tosUrl = ref(null); const privacyPolicyUrl = ref(null); const inquiryUrl = ref(null); +const nirilaBlockMentionsFromUnfamiliarRemoteUsers = ref(false); async function init() { const meta = await misskeyApi('admin/meta'); @@ -105,6 +110,7 @@ async function init() { tosUrl.value = meta.tosUrl; privacyPolicyUrl.value = meta.privacyPolicyUrl; inquiryUrl.value = meta.inquiryUrl; + nirilaBlockMentionsFromUnfamiliarRemoteUsers.value = meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers; } function save() { @@ -118,6 +124,7 @@ function save() { prohibitedWords: prohibitedWords.value.split('\n'), hiddenTags: hiddenTags.value.split('\n'), preservedUsernames: preservedUsernames.value.split('\n'), + nirilaBlockMentionsFromUnfamiliarRemoteUsers: nirilaBlockMentionsFromUnfamiliarRemoteUsers.value, }).then(() => { fetchInstance(true); }); diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 033d8dc1fa4e..a5dd599b3b3e 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -5100,6 +5100,7 @@ export type operations = { urlPreviewRequireContentLength: boolean; urlPreviewUserAgent: string | null; urlPreviewSummaryProxyUrl: string | null; + nirilaBlockMentionsFromUnfamiliarRemoteUsers: boolean; }; }; }; @@ -9110,6 +9111,7 @@ export type operations = { urlPreviewRequireContentLength?: boolean; urlPreviewUserAgent?: string | null; urlPreviewSummaryProxyUrl?: string | null; + nirilaBlockMentionsFromUnfamiliarRemoteUsers?: boolean; }; }; }; From 751653a67665bd11f4324b8151a3773b216fd4a0 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 22:00:24 +0900 Subject: [PATCH 2/9] =?UTF-8?q?chore:=20=E7=89=B9=E5=AE=9A=E3=81=AE?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=81=AB=E5=AF=BE=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=A9=E3=82=A4=E3=81=AF=E3=83=96=E3=83=AD?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...66-NirilaAllowedUnfamiliarRemoteUserIds.js | 16 ++++++++++++++ .../backend/src/core/NoteCreateService.ts | 22 ++++++++++++++++++- packages/backend/src/models/Meta.ts | 7 ++++++ .../src/server/api/endpoints/admin/meta.ts | 11 ++++++++++ .../server/api/endpoints/admin/update-meta.ts | 12 ++++++++++ .../frontend/src/pages/admin/moderation.vue | 9 ++++++++ packages/misskey-js/src/autogen/types.ts | 2 ++ 7 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 packages/backend/migration/1719664479666-NirilaAllowedUnfamiliarRemoteUserIds.js diff --git a/packages/backend/migration/1719664479666-NirilaAllowedUnfamiliarRemoteUserIds.js b/packages/backend/migration/1719664479666-NirilaAllowedUnfamiliarRemoteUserIds.js new file mode 100644 index 000000000000..18f9c2e9fa2f --- /dev/null +++ b/packages/backend/migration/1719664479666-NirilaAllowedUnfamiliarRemoteUserIds.js @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: anatawa12 + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class NirilaAllowedUnfamiliarRemoteUserIds1719664479666 { + name = 'NirilaAllowedUnfamiliarRemoteUserIds1719664479666' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "nirilaAllowedUnfamiliarRemoteUserIds" character varying(32) array NOT NULL DEFAULT '{}'`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "nirilaAllowedUnfamiliarRemoteUserIds"`); + } +} diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index b4ebc54fdd9e..af72ba14d546 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -377,7 +377,27 @@ export class NoteCreateService implements OnApplicationShutdown { || (data.visibility === 'specified' && data.visibleUsers?.some(u => u.host === null)) || data.reply?.userHost === null || (this.isRenote(data) && this.isQuote(data) && data.renote?.userHost === null) || false; - if (meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification) { + const isAllowedToCreateNotification = () => { + const targetUserIds: string[][] = []; + targetUserIds.push(mentionedUsers.filter(x => x.host == null).map(x => x.id)) + if (data.visibility === 'specified' && data.visibleUsers != null) + targetUserIds.push(data.visibleUsers.filter(x => x.host == null).map(x => x.id)); + if (data.reply != null && data.reply.userHost == null) + targetUserIds.push([data.reply.userId]); + if (this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null) + targetUserIds.push([data.renote.userId]); + const allowedIds = new Set(meta.nirilaAllowedUnfamiliarRemoteUserIds); + for (let targetUserIds1 of targetUserIds) { + for (let targetUserId of targetUserIds1) { + if (allowedIds.has(targetUserId)) { + return true; + } + } + } + return false; + } + + if (meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification && !isAllowedToCreateNotification()) { const userEntity = await this.usersRepository.findOneBy({ id: user.id }); if ((userEntity?.followersCount ?? 0) === 0) { this.logger.error('Request rejected because user has no local followers', { user: user.id, note: data }); diff --git a/packages/backend/src/models/Meta.ts b/packages/backend/src/models/Meta.ts index f35bea20442f..18a41123ea5d 100644 --- a/packages/backend/src/models/Meta.ts +++ b/packages/backend/src/models/Meta.ts @@ -630,4 +630,11 @@ export class MiMeta { default: false, }) public nirilaBlockMentionsFromUnfamiliarRemoteUsers: boolean; + + @Column('varchar', { + length: 32, + array: true, + default: '{}', + }) + public nirilaAllowedUnfamiliarRemoteUserIds: string[]; } diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index e62ee3496714..32bef35c965b 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -485,6 +485,16 @@ export const meta = { type: 'boolean', optional: false, nullable: false, }, + nirilaAllowedUnfamiliarRemoteUserIds: { + type: 'array', + optional: false, + nullable: false, + items: { + type: 'string', + optional: false, + nullable: false, + }, + }, }, }, } as const; @@ -620,6 +630,7 @@ export default class extends Endpoint { // eslint- urlPreviewUserAgent: instance.urlPreviewUserAgent, urlPreviewSummaryProxyUrl: instance.urlPreviewSummaryProxyUrl, nirilaBlockMentionsFromUnfamiliarRemoteUsers: instance.nirilaBlockMentionsFromUnfamiliarRemoteUsers, + nirilaAllowedUnfamiliarRemoteUserIds: instance.nirilaAllowedUnfamiliarRemoteUserIds, }; }); } diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index 076fbf0dfd3c..9f2acc97978a 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -162,6 +162,14 @@ export const paramDef = { urlPreviewUserAgent: { type: 'string', nullable: true }, urlPreviewSummaryProxyUrl: { type: 'string', nullable: true }, nirilaBlockMentionsFromUnfamiliarRemoteUsers: { type: 'boolean', nullable: false }, + nirilaAllowedUnfamiliarRemoteUserIds: { + type: 'array', + nullable: false, + items: { + type: 'string', + nullable: false, + }, + } }, required: [], } as const; @@ -627,6 +635,10 @@ export default class extends Endpoint { // eslint- set.nirilaBlockMentionsFromUnfamiliarRemoteUsers = ps.nirilaBlockMentionsFromUnfamiliarRemoteUsers; } + if (ps.nirilaAllowedUnfamiliarRemoteUserIds !== undefined) { + set.nirilaAllowedUnfamiliarRemoteUserIds = ps.nirilaAllowedUnfamiliarRemoteUserIds; + } + const before = await this.metaService.fetch(true); await this.metaService.update(set); diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue index f43388bd098d..d945116cb8c3 100644 --- a/packages/frontend/src/pages/admin/moderation.vue +++ b/packages/frontend/src/pages/admin/moderation.vue @@ -59,6 +59,11 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + + @@ -98,6 +103,7 @@ const tosUrl = ref(null); const privacyPolicyUrl = ref(null); const inquiryUrl = ref(null); const nirilaBlockMentionsFromUnfamiliarRemoteUsers = ref(false); +const nirilaAllowedUnfamiliarRemoteUserIds = ref(''); async function init() { const meta = await misskeyApi('admin/meta'); @@ -111,6 +117,7 @@ async function init() { privacyPolicyUrl.value = meta.privacyPolicyUrl; inquiryUrl.value = meta.inquiryUrl; nirilaBlockMentionsFromUnfamiliarRemoteUsers.value = meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers; + nirilaAllowedUnfamiliarRemoteUserIds.value = meta.nirilaAllowedUnfamiliarRemoteUserIds.join('\n'); } function save() { @@ -125,6 +132,8 @@ function save() { hiddenTags: hiddenTags.value.split('\n'), preservedUsernames: preservedUsernames.value.split('\n'), nirilaBlockMentionsFromUnfamiliarRemoteUsers: nirilaBlockMentionsFromUnfamiliarRemoteUsers.value, + nirilaAllowedUnfamiliarRemoteUserIds: nirilaAllowedUnfamiliarRemoteUserIds.value == '' + ? [] : nirilaAllowedUnfamiliarRemoteUserIds.value.split('\n'), }).then(() => { fetchInstance(true); }); diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index a5dd599b3b3e..b247fdcd6ebd 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -5101,6 +5101,7 @@ export type operations = { urlPreviewUserAgent: string | null; urlPreviewSummaryProxyUrl: string | null; nirilaBlockMentionsFromUnfamiliarRemoteUsers: boolean; + nirilaAllowedUnfamiliarRemoteUserIds: string[]; }; }; }; @@ -9112,6 +9113,7 @@ export type operations = { urlPreviewUserAgent?: string | null; urlPreviewSummaryProxyUrl?: string | null; nirilaBlockMentionsFromUnfamiliarRemoteUsers?: boolean; + nirilaAllowedUnfamiliarRemoteUserIds?: string[]; }; }; }; From c51b5f1573dc1f2f45d514aed59a909bbd16817f Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 22:03:19 +0900 Subject: [PATCH 3/9] =?UTF-8?q?docs(changelog):=20=E6=9C=AA=E7=9F=A5?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=83=A2=E3=83=BC=E3=83=88=E3=83=A6=E3=83=BC?= =?UTF-8?q?=E3=82=B6=E3=81=8B=E3=82=89=E3=81=AE=E9=80=9A=E7=9F=A5=E3=82=92?= =?UTF-8?q?=E7=94=9F=E6=88=90=E3=81=99=E3=82=8B=E3=83=8E=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=82=92=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=81=99=E3=82=8B?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=AE=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d943e66a55..60935f724725 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Unreleased ### General +- 未知のリモートユーザからの通知を生成するノートをブロックする機能の改善 (#206) ### Client From 42ce4fced0309e0ff4ff4e9b293e510edbe02a33 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 22:25:23 +0900 Subject: [PATCH 4/9] fix lint --- packages/backend/src/core/NoteCreateService.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index af72ba14d546..4ecdf10413c3 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -379,23 +379,21 @@ export class NoteCreateService implements OnApplicationShutdown { const isAllowedToCreateNotification = () => { const targetUserIds: string[][] = []; - targetUserIds.push(mentionedUsers.filter(x => x.host == null).map(x => x.id)) + targetUserIds.push(mentionedUsers.filter(x => x.host == null).map(x => x.id)); if (data.visibility === 'specified' && data.visibleUsers != null) targetUserIds.push(data.visibleUsers.filter(x => x.host == null).map(x => x.id)); - if (data.reply != null && data.reply.userHost == null) - targetUserIds.push([data.reply.userId]); - if (this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null) - targetUserIds.push([data.renote.userId]); + if (data.reply != null && data.reply.userHost == null) targetUserIds.push([data.reply.userId]); + if (this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null) targetUserIds.push([data.renote.userId]); const allowedIds = new Set(meta.nirilaAllowedUnfamiliarRemoteUserIds); - for (let targetUserIds1 of targetUserIds) { - for (let targetUserId of targetUserIds1) { + for (const targetUserIds1 of targetUserIds) { + for (const targetUserId of targetUserIds1) { if (allowedIds.has(targetUserId)) { return true; } } } return false; - } + }; if (meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification && !isAllowedToCreateNotification()) { const userEntity = await this.usersRepository.findOneBy({ id: user.id }); From 72bc9b36090874db329dd22f7d93017c359be343 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 22:29:51 +0900 Subject: [PATCH 5/9] lint: fix --- packages/backend/src/core/NoteCreateService.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 4ecdf10413c3..92d6b9d49c99 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -380,8 +380,7 @@ export class NoteCreateService implements OnApplicationShutdown { const isAllowedToCreateNotification = () => { const targetUserIds: string[][] = []; targetUserIds.push(mentionedUsers.filter(x => x.host == null).map(x => x.id)); - if (data.visibility === 'specified' && data.visibleUsers != null) - targetUserIds.push(data.visibleUsers.filter(x => x.host == null).map(x => x.id)); + if (data.visibility === 'specified' && data.visibleUsers != null) targetUserIds.push(data.visibleUsers.filter(x => x.host == null).map(x => x.id)); if (data.reply != null && data.reply.userHost == null) targetUserIds.push([data.reply.userId]); if (this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null) targetUserIds.push([data.renote.userId]); const allowedIds = new Set(meta.nirilaAllowedUnfamiliarRemoteUserIds); From cf079a8d623c0ab620a963bee65471ed9645dab4 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sat, 29 Jun 2024 22:42:23 +0900 Subject: [PATCH 6/9] lint: fix --- packages/frontend/src/pages/admin/moderation.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue index d945116cb8c3..25386c4def21 100644 --- a/packages/frontend/src/pages/admin/moderation.vue +++ b/packages/frontend/src/pages/admin/moderation.vue @@ -132,7 +132,7 @@ function save() { hiddenTags: hiddenTags.value.split('\n'), preservedUsernames: preservedUsernames.value.split('\n'), nirilaBlockMentionsFromUnfamiliarRemoteUsers: nirilaBlockMentionsFromUnfamiliarRemoteUsers.value, - nirilaAllowedUnfamiliarRemoteUserIds: nirilaAllowedUnfamiliarRemoteUserIds.value == '' + nirilaAllowedUnfamiliarRemoteUserIds: nirilaAllowedUnfamiliarRemoteUserIds.value === '' ? [] : nirilaAllowedUnfamiliarRemoteUserIds.value.split('\n'), }).then(() => { fetchInstance(true); From 797736573d101b78764d91273b025f6db9d92dd6 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sun, 30 Jun 2024 17:07:26 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=E6=9D=A1=E4=BB=B6=E3=81=8C=E9=80=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/core/NoteCreateService.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 92d6b9d49c99..486344d588ea 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -386,12 +386,12 @@ export class NoteCreateService implements OnApplicationShutdown { const allowedIds = new Set(meta.nirilaAllowedUnfamiliarRemoteUserIds); for (const targetUserIds1 of targetUserIds) { for (const targetUserId of targetUserIds1) { - if (allowedIds.has(targetUserId)) { - return true; + if (!allowedIds.has(targetUserId)) { + return false; } } } - return false; + return true; }; if (meta.nirilaBlockMentionsFromUnfamiliarRemoteUsers && user.host !== null && willCauseNotification && !isAllowedToCreateNotification()) { From a2e26fb903bb9d725454c5eb586e719677df6caa Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sun, 30 Jun 2024 17:10:46 +0900 Subject: [PATCH 8/9] =?UTF-8?q?chore:=20=E3=82=B7=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=83=AB=E3=81=ABstring=E9=85=8D=E5=88=97=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/core/NoteCreateService.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 486344d588ea..21e965b41478 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -378,17 +378,16 @@ export class NoteCreateService implements OnApplicationShutdown { || data.reply?.userHost === null || (this.isRenote(data) && this.isQuote(data) && data.renote?.userHost === null) || false; const isAllowedToCreateNotification = () => { - const targetUserIds: string[][] = []; - targetUserIds.push(mentionedUsers.filter(x => x.host == null).map(x => x.id)); - if (data.visibility === 'specified' && data.visibleUsers != null) targetUserIds.push(data.visibleUsers.filter(x => x.host == null).map(x => x.id)); - if (data.reply != null && data.reply.userHost == null) targetUserIds.push([data.reply.userId]); - if (this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null) targetUserIds.push([data.renote.userId]); + const targetUserIds: string[] = [ + ...mentionedUsers.filter(x => x.host == null).map(x => x.id), + ...(data.visibility === 'specified' && data.visibleUsers != null ? data.visibleUsers.filter(x => x.host == null).map(x => x.id) : []), + ...(data.reply != null && data.reply.userHost == null ? [data.reply.userId] : []), + ...(this.isRenote(data) && this.isQuote(data) && data.renote.userHost === null ? [data.renote.userId] : []), + ]; const allowedIds = new Set(meta.nirilaAllowedUnfamiliarRemoteUserIds); - for (const targetUserIds1 of targetUserIds) { - for (const targetUserId of targetUserIds1) { - if (!allowedIds.has(targetUserId)) { - return false; - } + for (const targetUserId of targetUserIds) { + if (!allowedIds.has(targetUserId)) { + return false; } } return true; From 33a81e80b5463e01fecc9f192061f3547729293b Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sun, 30 Jun 2024 17:17:34 +0900 Subject: [PATCH 9/9] Apply suggestions from code review Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com> --- CHANGELOG.md | 2 +- packages/frontend/src/pages/admin/moderation.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60935f724725..f3edae44ec59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## Unreleased ### General -- 未知のリモートユーザからの通知を生成するノートをブロックする機能の改善 (#206) +- 未知のリモートユーザーによる通知が発生するノートをブロックする機能の改善 (#206) ### Client diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue index 25386c4def21..fa1fd6f8ce56 100644 --- a/packages/frontend/src/pages/admin/moderation.vue +++ b/packages/frontend/src/pages/admin/moderation.vue @@ -57,12 +57,12 @@ SPDX-License-Identifier: AGPL-3.0-only - + - - + +