diff --git a/CHANGELOG.md b/CHANGELOG.md index dc81997d4137701b6e117b2a845b94fc5c5df012..e6c66f0859076e726c57b4c8f98871948899dcd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - Feat: プãƒãƒ•ã‚£ãƒ¼ãƒ«ã§ã®ãƒªãƒ³ã‚¯æ¤œè¨¼ - Feat: 通知をテストã§ãるよã†ã«ãªã‚Šã¾ã—㟠- Feat: PWAã®ã‚¢ã‚¤ã‚³ãƒ³ãŒè¨å®šã§ãるよã†ã«ãªã‚Šã¾ã—㟠+- Enhance: アンテナã®å—信ソースã«æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ã‚’除外ã™ã‚‹ã‚‚ã®ã‚’è¿½åŠ - Enhance: 二è¦ç´ èªè¨¼è¨å®šæ™‚ã®ã‚»ã‚ュリティを強化 - パスワード入力ãŒå¿…è¦ãªæ“作を行ã†éš›ã€äºŒè¦ç´ èªè¨¼ãŒæœ‰åŠ¹ã§ã‚ã‚Œã°ç¢ºèªã‚³ãƒ¼ãƒ‰ã®å…¥åŠ›ã‚‚å¿…è¦ã«ãªã‚Šã¾ã—㟠- Enhance: manifest.jsonをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰å¯èƒ½ã« diff --git a/locales/index.d.ts b/locales/index.d.ts index 3009c991851919b1cd08c7ece24ae342aacf034b..f6b6daae892f9368c01af87a2e18be175d85c3f6 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1917,6 +1917,7 @@ export interface Locale { "homeTimeline": string; "users": string; "userList": string; + "userBlacklist": string; }; "_weekday": { "sunday": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b30fd5333df9b5ab29ff54c9000a4930222ac2c1..82ced0aa3b8b462c3d6d6e4faff9c53f590eeb86 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1834,6 +1834,7 @@ _antennaSources: homeTimeline: "フォãƒãƒ¼ã—ã¦ã„るユーザーã®ãƒŽãƒ¼ãƒˆ" users: "指定ã—ãŸä¸€äººã¾ãŸã¯è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒŽãƒ¼ãƒˆ" userList: "指定ã—ãŸãƒªã‚¹ãƒˆã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒŽãƒ¼ãƒˆ" + userBlacklist: "指定ã—ãŸä¸€äººã¾ãŸã¯è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’除ã„ãŸå…¨ã¦ã®ãƒŽãƒ¼ãƒˆ" _weekday: sunday: "日曜日" diff --git a/packages/backend/migration/1689325027964-UserBlacklistAnntena.js b/packages/backend/migration/1689325027964-UserBlacklistAnntena.js new file mode 100644 index 0000000000000000000000000000000000000000..ce246b20f887540bbedf47d378c214713a3f96e5 --- /dev/null +++ b/packages/backend/migration/1689325027964-UserBlacklistAnntena.js @@ -0,0 +1,10 @@ +export class UserBlacklistAnntena1689325027964 { + name = 'UserBlacklistAnntena1689325027964' + + async up(queryRunner) { + await queryRunner.query(`ALTER TYPE "antenna_src_enum" ADD VALUE 'users_blacklist' AFTER 'list'`); + } + + async down(queryRunner) { + } +} diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts index a7e74eeef077945f91fe3aecd6d2ee82e2927bb0..841ce4b84aab61548f836595418838fc86614421 100644 --- a/packages/backend/src/core/AntennaService.ts +++ b/packages/backend/src/core/AntennaService.ts @@ -119,6 +119,12 @@ export class AntennaService implements OnApplicationShutdown { return this.utilityService.getFullApAccount(username, host).toLowerCase(); }); if (!accts.includes(this.utilityService.getFullApAccount(noteUser.username, noteUser.host).toLowerCase())) return false; + } else if (antenna.src === 'users_blacklist') { + const accts = antenna.users.map(x => { + const { username, host } = Acct.parse(x); + return this.utilityService.getFullApAccount(username, host).toLowerCase(); + }); + if (accts.includes(this.utilityService.getFullApAccount(noteUser.username, noteUser.host).toLowerCase())) return false; } const keywords = antenna.keywords diff --git a/packages/backend/src/models/Antenna.ts b/packages/backend/src/models/Antenna.ts index 7c1d80cc46ed6100c3858b03692d4c82f3f88cfe..dc398b6dd21d9e4e002bc1b68862382e13b78206 100644 --- a/packages/backend/src/models/Antenna.ts +++ b/packages/backend/src/models/Antenna.ts @@ -41,8 +41,8 @@ export class MiAntenna { }) public name: string; - @Column('enum', { enum: ['home', 'all', 'users', 'list'] }) - public src: 'home' | 'all' | 'users' | 'list'; + @Column('enum', { enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }) + public src: 'home' | 'all' | 'users' | 'list' | 'users_blacklist'; @Column({ ...id(), diff --git a/packages/backend/src/models/json-schema/antenna.ts b/packages/backend/src/models/json-schema/antenna.ts index 3f58cbee6c783f3741ccd9414b6729761541b2cf..7b6475919c6909c43638e6a1dd3df864a03da443 100644 --- a/packages/backend/src/models/json-schema/antenna.ts +++ b/packages/backend/src/models/json-schema/antenna.ts @@ -47,7 +47,7 @@ export const packedAntennaSchema = { src: { type: 'string', optional: false, nullable: false, - enum: ['home', 'all', 'users', 'list'], + enum: ['home', 'all', 'users', 'list', 'users_blacklist'], }, userListId: { type: 'string', diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts index f1170efe42057989da2798a248f10536e9ee547b..15fca4904d75e6f00d91388ead9bc72580b6ea06 100644 --- a/packages/backend/src/server/api/endpoints/antennas/create.ts +++ b/packages/backend/src/server/api/endpoints/antennas/create.ts @@ -47,7 +47,7 @@ export const paramDef = { type: 'object', properties: { name: { type: 'string', minLength: 1, maxLength: 100 }, - src: { type: 'string', enum: ['home', 'all', 'users', 'list'] }, + src: { type: 'string', enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }, userListId: { type: 'string', format: 'misskey:id', nullable: true }, keywords: { type: 'array', items: { type: 'array', items: { diff --git a/packages/backend/src/server/api/endpoints/antennas/update.ts b/packages/backend/src/server/api/endpoints/antennas/update.ts index b020a7595f5bba03b17716c90dce793aec5f6cc6..0e9874688184a6a78893a93ea3b8b11669b05538 100644 --- a/packages/backend/src/server/api/endpoints/antennas/update.ts +++ b/packages/backend/src/server/api/endpoints/antennas/update.ts @@ -46,7 +46,7 @@ export const paramDef = { properties: { antennaId: { type: 'string', format: 'misskey:id' }, name: { type: 'string', minLength: 1, maxLength: 100 }, - src: { type: 'string', enum: ['home', 'all', 'users', 'list'] }, + src: { type: 'string', enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }, userListId: { type: 'string', format: 'misskey:id', nullable: true }, keywords: { type: 'array', items: { type: 'array', items: { diff --git a/packages/frontend/src/pages/my-antennas/editor.vue b/packages/frontend/src/pages/my-antennas/editor.vue index cd920b75e610d33b0ca961495843003240a8db90..4add66c3966580c53324091219de02d745265fc4 100644 --- a/packages/frontend/src/pages/my-antennas/editor.vue +++ b/packages/frontend/src/pages/my-antennas/editor.vue @@ -16,12 +16,13 @@ SPDX-License-Identifier: AGPL-3.0-only <!--<option value="home">{{ i18n.ts._antennaSources.homeTimeline }}</option>--> <option value="users">{{ i18n.ts._antennaSources.users }}</option> <!--<option value="list">{{ i18n.ts._antennaSources.userList }}</option>--> + <option value="users_blacklist">{{ i18n.ts._antennaSources.userBlacklist }}</option> </MkSelect> <MkSelect v-if="src === 'list'" v-model="userListId"> <template #label>{{ i18n.ts.userList }}</template> <option v-for="list in userLists" :key="list.id" :value="list.id">{{ list.name }}</option> </MkSelect> - <MkTextarea v-else-if="src === 'users'" v-model="users"> + <MkTextarea v-else-if="src === 'users' || src === 'users_blacklist'" v-model="users"> <template #label>{{ i18n.ts.users }}</template> <template #caption>{{ i18n.ts.antennaUsersDescription }} <button class="_textButton" @click="addUser">{{ i18n.ts.addUser }}</button></template> </MkTextarea>