From 0e7ab7500ba080518cad0fdcd7c9e66f7de7f99e Mon Sep 17 00:00:00 2001 From: mattyatea Date: Sun, 15 Oct 2023 19:45:00 +0900 Subject: [PATCH] =?UTF-8?q?=E6=97=A2=E5=AD=98=E3=81=AE=E3=82=82=E3=81=AE?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/core/UserFollowingService.ts | 6 +-- packages/backend/src/core/UtilityService.ts | 6 +++ .../core/entities/InstanceEntityService.ts | 3 +- packages/backend/src/misc/fetch-meta.ts | 40 ------------------- .../backend/src/misc/should-block-instance.ts | 15 ------- 5 files changed, 10 insertions(+), 60 deletions(-) delete mode 100644 packages/backend/src/misc/fetch-meta.ts delete mode 100644 packages/backend/src/misc/should-block-instance.ts diff --git a/packages/backend/src/core/UserFollowingService.ts b/packages/backend/src/core/UserFollowingService.ts index 0180a23b81..47e4d8e9b2 100644 --- a/packages/backend/src/core/UserFollowingService.ts +++ b/packages/backend/src/core/UserFollowingService.ts @@ -28,7 +28,7 @@ import { MetaService } from '@/core/MetaService.js'; import { CacheService } from '@/core/CacheService.js'; import type { Config } from '@/config.js'; import { AccountMoveService } from '@/core/AccountMoveService.js'; -import { shouldSilenceInstance } from '@/misc/should-block-instance.js'; +import { UtilityService } from '@/core/UtilityService.js'; import Logger from '../logger.js'; const logger = new Logger('following/create'); @@ -75,6 +75,7 @@ export class UserFollowingService implements OnModuleInit { private instancesRepository: InstancesRepository, private cacheService: CacheService, + private utilityService: UtilityService, private userEntityService: UserEntityService, private idService: IdService, private queueService: QueueService, @@ -122,7 +123,6 @@ export class UserFollowingService implements OnModuleInit { } const followeeProfile = await this.userProfilesRepository.findOneByOrFail({ userId: followee.id }); - // フォロー対象が鍵アカウントである or // フォロワーがBotであり、フォロー対象がBotからのフォローに慎重である or // フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである or @@ -132,7 +132,7 @@ export class UserFollowingService implements OnModuleInit { followee.isLocked || (followeeProfile.carefulBot && follower.isBot) || (this.userEntityService.isLocalUser(follower) && this.userEntityService.isRemoteUser(followee) && process.env.FORCE_FOLLOW_REMOTE_USER_FOR_TESTING !== 'true') || - ( this.userEntityService.isLocalUser(followee) && this.userEntityService.isRemoteUser(follower) && await shouldSilenceInstance(follower.host, this.db)) + ( this.userEntityService.isLocalUser(followee) && this.userEntityService.isRemoteUser(follower) && this.utilityService.isSilencedHost((await this.metaService.fetch()).silencedHosts, follower.host)) ) { let autoAccept = false; diff --git a/packages/backend/src/core/UtilityService.ts b/packages/backend/src/core/UtilityService.ts index d2d2776bd2..a005a00437 100644 --- a/packages/backend/src/core/UtilityService.ts +++ b/packages/backend/src/core/UtilityService.ts @@ -35,6 +35,12 @@ export class UtilityService { return blockedHosts.some(x => `.${host.toLowerCase()}`.endsWith(`.${x}`)); } + @bindThis + public isSilencedHost(silencedHosts: string[], host: string | null): boolean { + if (host == null) return false; + return silencedHosts.some(x => `.${host.toLowerCase()}`.endsWith(`.${x}`)); + } + @bindThis public extractDbHost(uri: string): string { const url = new URL(uri); diff --git a/packages/backend/src/core/entities/InstanceEntityService.ts b/packages/backend/src/core/entities/InstanceEntityService.ts index a09a4d69ca..bbd395ee0d 100644 --- a/packages/backend/src/core/entities/InstanceEntityService.ts +++ b/packages/backend/src/core/entities/InstanceEntityService.ts @@ -9,7 +9,6 @@ import type { Packed } from '@/misc/json-schema.js'; import type { MiInstance } from '@/models/Instance.js'; import { MetaService } from '@/core/MetaService.js'; import { bindThis } from '@/decorators.js'; -import { shouldSilenceInstance } from '@/misc/should-block-instance.js'; import { DI } from '@/di-symbols.js'; import { UtilityService } from '../UtilityService.js'; @@ -48,7 +47,7 @@ export class InstanceEntityService { description: instance.description, maintainerName: instance.maintainerName, maintainerEmail: instance.maintainerEmail, - isSilenced: await shouldSilenceInstance(instance.host, this.db), + isSilenced: this.utilityService.isSilencedHost(meta.silencedHosts, instance.host), iconUrl: instance.iconUrl, faviconUrl: instance.faviconUrl, themeColor: instance.themeColor, diff --git a/packages/backend/src/misc/fetch-meta.ts b/packages/backend/src/misc/fetch-meta.ts deleted file mode 100644 index cd86477f9b..0000000000 --- a/packages/backend/src/misc/fetch-meta.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { DataSource } from 'typeorm'; -import { MiMeta } from '@/models/Meta.js'; - -let cache: MiMeta; - -export async function fetchMeta(noCache = false, db: DataSource): Promise { - if (!noCache && cache) return cache; - - return await db.transaction(async (transactionalEntityManager) => { - // New IDs are prioritized because multiple records may have been created due to past bugs. - const metas = await transactionalEntityManager.find(MiMeta, { - order: { - id: 'DESC', - }, - }); - - const meta = metas[0]; - - if (meta) { - cache = meta; - return meta; - } else { - // If fetchMeta is called at the same time when meta is empty, this part may be called at the same time, so use fail-safe upsert. - const saved = await transactionalEntityManager - .upsert( - MiMeta, - { - id: 'x', - }, - ['id'], - ) - .then((x) => - transactionalEntityManager.findOneByOrFail(MiMeta, x.identifiers[0]), - ); - - cache = saved; - return saved; - } - }); -} diff --git a/packages/backend/src/misc/should-block-instance.ts b/packages/backend/src/misc/should-block-instance.ts deleted file mode 100644 index 666ff2815e..0000000000 --- a/packages/backend/src/misc/should-block-instance.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { DataSource } from 'typeorm'; -import { fetchMeta } from '@/misc/fetch-meta.js'; -import type { MiInstance } from '@/models/Instance.js'; -import type { MiMeta } from '@/models/Meta.js'; - -export async function shouldSilenceInstance( - host: MiInstance['host'], - db : DataSource, - meta?: MiMeta, -): Promise { - const { silencedHosts } = meta ?? (await fetchMeta(true, db)); - return silencedHosts.some( - (limitedHost: string) => host === limitedHost || host.endsWith(`.${limitedHost}`), - ); -}