From 0c1e7cdd72a4eda2045d117a274d4c28e6b1484f Mon Sep 17 00:00:00 2001 From: naskya Date: Mon, 22 Apr 2024 08:31:28 +0900 Subject: [PATCH] refactor (backend): port should-block-instance to backend-rs --- packages/backend-rs/index.d.ts | 17 ++++++- packages/backend-rs/index.js | 5 +- .../backend-rs/src/misc/check_server_block.rs | 49 +++++++++++++++++++ packages/backend-rs/src/misc/mod.rs | 1 + .../backend/src/misc/should-block-instance.ts | 38 -------------- .../backend/src/misc/skipped-instances.ts | 9 ++-- .../src/models/repositories/instance.ts | 9 ++-- .../backend/src/queue/processors/inbox.ts | 10 ++-- .../src/remote/activitypub/check-fetch.ts | 13 ++--- .../activitypub/kernel/announce/note.ts | 4 +- .../src/remote/activitypub/kernel/index.ts | 5 +- .../src/remote/activitypub/models/note.ts | 7 ++- .../src/remote/activitypub/resolver.ts | 24 +++++---- .../src/server/api/endpoints/ap/show.ts | 5 +- .../src/services/create-notification.ts | 7 ++- .../backend/src/services/following/create.ts | 5 +- packages/backend/src/services/note/create.ts | 11 +++-- 17 files changed, 117 insertions(+), 102 deletions(-) create mode 100644 packages/backend-rs/src/misc/check_server_block.rs delete mode 100644 packages/backend/src/misc/should-block-instance.ts diff --git a/packages/backend-rs/index.d.ts b/packages/backend-rs/index.d.ts index 50489a846d..69de833dcc 100644 --- a/packages/backend-rs/index.d.ts +++ b/packages/backend-rs/index.d.ts @@ -193,6 +193,21 @@ export interface Acct { } export function stringToAcct(acct: string): Acct export function acctToString(acct: Acct): string +/** + * @param host punycoded instance host + * @returns whether the given host should be blocked +*/ +export function isBlockedServer(host: string): Promise +/** + * @param host punycoded instance host + * @returns whether the given host should be limited +*/ +export function isSilencedServer(host: string): Promise +/** + * @param host punycoded instance host + * @returns whether the given host is allowlisted (this is always true if private mode is disabled) +*/ +export function isAllowedServer(host: string): Promise /** TODO: handle name collisions better */ export interface NoteLikeForCheckWordMute { fileIds: Array @@ -557,7 +572,6 @@ export interface Meta { recaptchaSecretKey: string | null localDriveCapacityMb: number remoteDriveCapacityMb: number - antennaLimit: number summalyProxy: string | null enableEmail: boolean email: string | null @@ -620,6 +634,7 @@ export interface Meta { donationLink: string | null moreUrls: Json markLocalFilesNsfwByDefault: boolean + antennaLimit: number } export interface Migrations { id: number diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js index 9a5e3d1a92..b4d86dccdf 100644 --- a/packages/backend-rs/index.js +++ b/packages/backend-rs/index.js @@ -310,12 +310,15 @@ if (!nativeBinding) { throw new Error(`Failed to load native binding`) } -const { loadEnv, loadConfig, stringToAcct, acctToString, checkWordMute, getFullApAccount, isSelfHost, isSameOrigin, extractHost, toPuny, isUnicodeEmoji, sqlLikeEscape, safeForSql, formatMilliseconds, getNoteSummary, toMastodonId, fromMastodonId, fetchMeta, metaToPugArgs, nyaify, hashPassword, verifyPassword, isOldPasswordAlgorithm, decodeReaction, countReactions, toDbReaction, AntennaSrcEnum, DriveFileUsageHintEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, addNoteToAntenna, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding +const { loadEnv, loadConfig, stringToAcct, acctToString, isBlockedServer, isSilencedServer, isAllowedServer, checkWordMute, getFullApAccount, isSelfHost, isSameOrigin, extractHost, toPuny, isUnicodeEmoji, sqlLikeEscape, safeForSql, formatMilliseconds, getNoteSummary, toMastodonId, fromMastodonId, fetchMeta, metaToPugArgs, nyaify, hashPassword, verifyPassword, isOldPasswordAlgorithm, decodeReaction, countReactions, toDbReaction, AntennaSrcEnum, DriveFileUsageHintEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, addNoteToAntenna, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding module.exports.loadEnv = loadEnv module.exports.loadConfig = loadConfig module.exports.stringToAcct = stringToAcct module.exports.acctToString = acctToString +module.exports.isBlockedServer = isBlockedServer +module.exports.isSilencedServer = isSilencedServer +module.exports.isAllowedServer = isAllowedServer module.exports.checkWordMute = checkWordMute module.exports.getFullApAccount = getFullApAccount module.exports.isSelfHost = isSelfHost diff --git a/packages/backend-rs/src/misc/check_server_block.rs b/packages/backend-rs/src/misc/check_server_block.rs new file mode 100644 index 0000000000..b5e262aa87 --- /dev/null +++ b/packages/backend-rs/src/misc/check_server_block.rs @@ -0,0 +1,49 @@ +use crate::misc::meta::fetch_meta; +use sea_orm::DbErr; + +/** + * @param host punycoded instance host + * @returns whether the given host should be blocked + */ +#[crate::export] +pub async fn is_blocked_server(host: &str) -> Result { + Ok(fetch_meta(true) + .await? + .blocked_hosts + .iter() + .any(|blocked_host| { + host == blocked_host || host.ends_with(format!(".{}", blocked_host).as_str()) + })) +} + +/** + * @param host punycoded instance host + * @returns whether the given host should be limited + */ +#[crate::export] +pub async fn is_silenced_server(host: &str) -> Result { + Ok(fetch_meta(true) + .await? + .silenced_hosts + .iter() + .any(|silenced_host| { + host == silenced_host || host.ends_with(format!(".{}", silenced_host).as_str()) + })) +} + +/** + * @param host punycoded instance host + * @returns whether the given host is allowlisted (this is always true if private mode is disabled) + */ +#[crate::export] +pub async fn is_allowed_server(host: &str) -> Result { + let meta = fetch_meta(true).await?; + + if !meta.private_mode.unwrap_or(false) { + return Ok(true); + } + if let Some(allowed_hosts) = meta.allowed_hosts { + return Ok(allowed_hosts.contains(&host.to_string())); + } + Ok(false) +} diff --git a/packages/backend-rs/src/misc/mod.rs b/packages/backend-rs/src/misc/mod.rs index a9d7074dbf..56aae3b552 100644 --- a/packages/backend-rs/src/misc/mod.rs +++ b/packages/backend-rs/src/misc/mod.rs @@ -1,4 +1,5 @@ pub mod acct; +pub mod check_server_block; pub mod check_word_mute; pub mod convert_host; pub mod emoji; 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 465be41f2a..0000000000 --- a/packages/backend/src/misc/should-block-instance.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { fetchMeta } from "backend-rs"; -import type { Instance } from "@/models/entities/instance.js"; -import type { Meta } from "@/models/entities/meta.js"; - -/** - * Returns whether a specific host (punycoded) should be blocked. - * - * @param host punycoded instance host - * @param meta a resolved Meta table - * @returns whether the given host should be blocked - */ -export async function shouldBlockInstance( - host: Instance["host"], - meta?: Meta, -): Promise { - const { blockedHosts } = meta ?? (await fetchMeta(true)); - return blockedHosts.some( - (blockedHost) => host === blockedHost || host.endsWith(`.${blockedHost}`), - ); -} - -/** - * Returns whether a specific host (punycoded) should be limited. - * - * @param host punycoded instance host - * @param meta a resolved Meta table - * @returns whether the given host should be limited - */ -export async function shouldSilenceInstance( - host: Instance["host"], - meta?: Meta, -): Promise { - const { silencedHosts } = meta ?? (await fetchMeta(true)); - return silencedHosts.some( - (silencedHost) => - host === silencedHost || host.endsWith(`.${silencedHost}`), - ); -} diff --git a/packages/backend/src/misc/skipped-instances.ts b/packages/backend/src/misc/skipped-instances.ts index 14b26a3032..0c87a524f6 100644 --- a/packages/backend/src/misc/skipped-instances.ts +++ b/packages/backend/src/misc/skipped-instances.ts @@ -1,9 +1,8 @@ import { Brackets } from "typeorm"; -import { fetchMeta } from "backend-rs"; +import { isBlockedServer } from "backend-rs"; import { Instances } from "@/models/index.js"; import type { Instance } from "@/models/entities/instance.js"; import { DAY } from "@/const.js"; -import { shouldBlockInstance } from "./should-block-instance.js"; // Threshold from last contact after which an instance will be considered // "dead" and should no longer get activities delivered to it. @@ -19,16 +18,16 @@ export async function skippedInstances( hosts: Instance["host"][], ): Promise { // first check for blocked instances since that info may already be in memory - const meta = await fetchMeta(true); const shouldSkip = await Promise.all( - hosts.map((host) => shouldBlockInstance(host, meta)), + hosts.map((host) => isBlockedServer(host)), ); const skipped = hosts.filter((_, i) => shouldSkip[i]); // if possible return early and skip accessing the database if (skipped.length === hosts.length) return hosts; - const deadTime = new Date(Date.now() - deadThreshold); + // FIXME: Use or remove this + // const deadTime = new Date(Date.now() - deadThreshold); return skipped.concat( await Instances.createQueryBuilder("instance") diff --git a/packages/backend/src/models/repositories/instance.ts b/packages/backend/src/models/repositories/instance.ts index 667ec948de..8f479e8ea4 100644 --- a/packages/backend/src/models/repositories/instance.ts +++ b/packages/backend/src/models/repositories/instance.ts @@ -1,10 +1,7 @@ import { db } from "@/db/postgre.js"; import { Instance } from "@/models/entities/instance.js"; import type { Packed } from "@/misc/schema.js"; -import { - shouldBlockInstance, - shouldSilenceInstance, -} from "@/misc/should-block-instance.js"; +import { isBlockedServer, isSilencedServer } from "backend-rs"; export const InstanceRepository = db.getRepository(Instance).extend({ async pack(instance: Instance): Promise> { @@ -22,8 +19,8 @@ export const InstanceRepository = db.getRepository(Instance).extend({ lastCommunicatedAt: instance.lastCommunicatedAt.toISOString(), isNotResponding: instance.isNotResponding, isSuspended: instance.isSuspended, - isBlocked: await shouldBlockInstance(instance.host), - isSilenced: await shouldSilenceInstance(instance.host), + isBlocked: await isBlockedServer(instance.host), + isSilenced: await isSilencedServer(instance.host), softwareName: instance.softwareName, softwareVersion: instance.softwareVersion, openRegistrations: instance.openRegistrations, diff --git a/packages/backend/src/queue/processors/inbox.ts b/packages/backend/src/queue/processors/inbox.ts index 0ea72306b6..898c68cff3 100644 --- a/packages/backend/src/queue/processors/inbox.ts +++ b/packages/backend/src/queue/processors/inbox.ts @@ -5,7 +5,7 @@ import perform from "@/remote/activitypub/perform.js"; import Logger from "@/services/logger.js"; import { registerOrFetchInstanceDoc } from "@/services/register-or-fetch-instance-doc.js"; import { Instances } from "@/models/index.js"; -import { fetchMeta } from "backend-rs"; +import { isAllowedServer, isBlockedServer } from "backend-rs"; import { toPuny, extractHost } from "backend-rs"; import { getApId } from "@/remote/activitypub/type.js"; import { fetchInstanceMetadata } from "@/services/fetch-instance-metadata.js"; @@ -16,7 +16,6 @@ import { LdSignature } from "@/remote/activitypub/misc/ld-signature.js"; import { StatusError } from "@/misc/fetch.js"; import type { CacheableRemoteUser } from "@/models/entities/user.js"; import type { UserPublickey } from "@/models/entities/user-publickey.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import { verifySignature } from "@/remote/activitypub/check-fetch.js"; import { inspect } from "node:util"; @@ -41,13 +40,12 @@ export default async (job: Bull.Job): Promise => { const host = toPuny(new URL(signature.keyId).hostname); // interrupt if blocked - const meta = await fetchMeta(true); - if (await shouldBlockInstance(host, meta)) { + if (await isBlockedServer(host)) { return `Blocked request: ${host}`; } // only whitelisted instances in private mode - if (meta.privateMode && !meta.allowedHosts.includes(host)) { + if (!isAllowedServer(host)) { return `Blocked request: ${host}`; } @@ -158,7 +156,7 @@ export default async (job: Bull.Job): Promise => { // ブロックしてたら中断 const ldHost = extractHost(authUser.user.uri); - if (await shouldBlockInstance(ldHost, meta)) { + if (await isBlockedServer(ldHost)) { return `Blocked request: ${ldHost}`; } } else { diff --git a/packages/backend/src/remote/activitypub/check-fetch.ts b/packages/backend/src/remote/activitypub/check-fetch.ts index 04d989064f..726d996ad8 100644 --- a/packages/backend/src/remote/activitypub/check-fetch.ts +++ b/packages/backend/src/remote/activitypub/check-fetch.ts @@ -1,11 +1,10 @@ import { URL } from "url"; -import httpSignature, { IParsedSignature } from "@peertube/http-signature"; +import httpSignature, { type IParsedSignature } from "@peertube/http-signature"; import { config } from "@/config.js"; -import { fetchMeta } from "backend-rs"; +import { fetchMeta, isAllowedServer, isBlockedServer } from "backend-rs"; import { toPuny } from "backend-rs"; import DbResolver from "@/remote/activitypub/db-resolver.js"; import { getApId } from "@/remote/activitypub/type.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import type { IncomingMessage } from "http"; import type { CacheableRemoteUser } from "@/models/entities/user.js"; import type { UserPublickey } from "@/models/entities/user-publickey.js"; @@ -44,15 +43,11 @@ export async function checkFetch(req: IncomingMessage): Promise { const keyId = new URL(signature.keyId); const host = toPuny(keyId.hostname); - if (await shouldBlockInstance(host, meta)) { + if (await isBlockedServer(host)) { return 403; } - if ( - meta.privateMode && - host !== config.host && - !meta.allowedHosts.includes(host) - ) { + if (host !== config.host && !isAllowedServer(host)) { return 403; } diff --git a/packages/backend/src/remote/activitypub/kernel/announce/note.ts b/packages/backend/src/remote/activitypub/kernel/announce/note.ts index ae16c77dbd..41d1319dbd 100644 --- a/packages/backend/src/remote/activitypub/kernel/announce/note.ts +++ b/packages/backend/src/remote/activitypub/kernel/announce/note.ts @@ -10,7 +10,7 @@ import { getApLock } from "@/misc/app-lock.js"; import { parseAudience } from "../../audience.js"; import { StatusError } from "@/misc/fetch.js"; import { Notes } from "@/models/index.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; +import { isBlockedServer } from "backend-rs"; import { inspect } from "node:util"; const logger = apLogger; @@ -31,7 +31,7 @@ export default async function ( } // Interrupt if you block the announcement destination - if (await shouldBlockInstance(extractHost(uri))) return; + if (await isBlockedServer(extractHost(uri))) return; const lock = await getApLock(uri); diff --git a/packages/backend/src/remote/activitypub/kernel/index.ts b/packages/backend/src/remote/activitypub/kernel/index.ts index f64a0e2ee8..b556550c5f 100644 --- a/packages/backend/src/remote/activitypub/kernel/index.ts +++ b/packages/backend/src/remote/activitypub/kernel/index.ts @@ -38,8 +38,7 @@ import block from "./block/index.js"; import flag from "./flag/index.js"; import move from "./move/index.js"; import type { IObject, IActivity } from "../type.js"; -import { extractHost } from "backend-rs"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; +import { extractHost, isBlockedServer } from "backend-rs"; import { inspect } from "node:util"; export async function performActivity( @@ -71,7 +70,7 @@ async function performOneActivity( if (typeof activity.id !== "undefined") { const host = extractHost(getApId(activity)); - if (await shouldBlockInstance(host)) return; + if (await isBlockedServer(host)) return; } if (isCreate(activity)) { diff --git a/packages/backend/src/remote/activitypub/models/note.ts b/packages/backend/src/remote/activitypub/models/note.ts index b2fd67288c..4b685747ba 100644 --- a/packages/backend/src/remote/activitypub/models/note.ts +++ b/packages/backend/src/remote/activitypub/models/note.ts @@ -12,7 +12,7 @@ import { unique, toArray, toSingle } from "@/prelude/array.js"; import { extractPollFromQuestion } from "./question.js"; import vote from "@/services/note/polls/vote.js"; import { apLogger } from "../logger.js"; -import { DriveFile } from "@/models/entities/drive-file.js"; +import type { DriveFile } from "@/models/entities/drive-file.js"; import { extractHost, isSameOrigin, toPuny } from "backend-rs"; import { Emojis, @@ -33,14 +33,13 @@ import { getApType, } from "../type.js"; import type { Emoji } from "@/models/entities/emoji.js"; -import { genId } from "backend-rs"; +import { genId, isBlockedServer } from "backend-rs"; import { getApLock } from "@/misc/app-lock.js"; import { createMessage } from "@/services/messages/create.js"; import { parseAudience } from "../audience.js"; import { extractApMentions } from "./mention.js"; import DbResolver from "../db-resolver.js"; import { StatusError } from "@/misc/fetch.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import { publishNoteStream } from "@/services/stream.js"; import { extractHashtags } from "@/misc/extract-hashtags.js"; import { UserProfiles } from "@/models/index.js"; @@ -421,7 +420,7 @@ export async function resolveNote( if (uri == null) throw new Error("missing uri"); // Abort if origin host is blocked - if (await shouldBlockInstance(extractHost(uri))) + if (await isBlockedServer(extractHost(uri))) throw new StatusError( "host blocked", 451, diff --git a/packages/backend/src/remote/activitypub/resolver.ts b/packages/backend/src/remote/activitypub/resolver.ts index 65e6f1d635..51419deecf 100644 --- a/packages/backend/src/remote/activitypub/resolver.ts +++ b/packages/backend/src/remote/activitypub/resolver.ts @@ -1,8 +1,12 @@ import { config } from "@/config.js"; import type { ILocalUser } from "@/models/entities/user.js"; import { getInstanceActor } from "@/services/instance-actor.js"; -import { fetchMeta } from "backend-rs"; -import { extractHost, isSelfHost } from "backend-rs"; +import { + extractHost, + isAllowedServer, + isBlockedServer, + isSelfHost, +} from "backend-rs"; import { apGet } from "./request.js"; import type { IObject, ICollection, IOrderedCollection } from "./type.js"; import { isCollectionOrOrderedCollection, getApId } from "./type.js"; @@ -21,7 +25,6 @@ import renderQuestion from "@/remote/activitypub/renderer/question.js"; import renderCreate from "@/remote/activitypub/renderer/create.js"; import { renderActivity } from "@/remote/activitypub/renderer/index.js"; import renderFollow from "@/remote/activitypub/renderer/follow.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import { apLogger } from "@/remote/activitypub/logger.js"; import { IsNull, Not } from "typeorm"; @@ -69,7 +72,7 @@ export default class Resolver { apLogger.debug("Object to resolve is not a string"); if (typeof value.id !== "undefined") { const host = extractHost(getApId(value)); - if (await shouldBlockInstance(host)) { + if (await isBlockedServer(host)) { throw new Error("instance is blocked"); } } @@ -100,17 +103,12 @@ export default class Resolver { return await this.resolveLocal(value); } - const meta = await fetchMeta(true); - if (await shouldBlockInstance(host, meta)) { - throw new Error("Instance is blocked"); + if (await isBlockedServer(host)) { + throw new Error("This instance is blocked"); } - if ( - meta.privateMode && - config.host !== host && - !meta.allowedHosts.includes(host) - ) { - throw new Error("Instance is not allowed"); + if (config.host !== host && !isAllowedServer(host)) { + throw new Error("This instance is not allowed"); } if (!this.user) { diff --git a/packages/backend/src/server/api/endpoints/ap/show.ts b/packages/backend/src/server/api/endpoints/ap/show.ts index f1d42d8d93..56307311b2 100644 --- a/packages/backend/src/server/api/endpoints/ap/show.ts +++ b/packages/backend/src/server/api/endpoints/ap/show.ts @@ -4,14 +4,13 @@ import { createNote } from "@/remote/activitypub/models/note.js"; import DbResolver from "@/remote/activitypub/db-resolver.js"; import Resolver from "@/remote/activitypub/resolver.js"; import { ApiError } from "@/server/api/error.js"; -import { extractHost } from "backend-rs"; +import { extractHost, isBlockedServer } from "backend-rs"; import { Users, Notes } from "@/models/index.js"; import type { Note } from "@/models/entities/note.js"; import type { CacheableLocalUser, User } from "@/models/entities/user.js"; import { isActor, isPost, getApId } from "@/remote/activitypub/type.js"; import type { SchemaType } from "@/misc/schema.js"; import { MINUTE } from "@/const.js"; -import { shouldBlockInstance } from "@/misc/should-block-instance.js"; import { updateQuestion } from "@/remote/activitypub/models/question.js"; import { populatePoll } from "@/models/repositories/note.js"; import { redisClient } from "@/db/redis.js"; @@ -101,7 +100,7 @@ async function fetchAny( me: CacheableLocalUser | null | undefined, ): Promise | null> { // Wait if blocked. - if (await shouldBlockInstance(extractHost(uri))) return null; + if (await isBlockedServer(extractHost(uri))) return null; const dbResolver = new DbResolver(); diff --git a/packages/backend/src/services/create-notification.ts b/packages/backend/src/services/create-notification.ts index a108d4f5de..93fec126d3 100644 --- a/packages/backend/src/services/create-notification.ts +++ b/packages/backend/src/services/create-notification.ts @@ -8,11 +8,10 @@ import { Users, Followings, } from "@/models/index.js"; -import { genId } from "backend-rs"; +import { genId, isSilencedServer } from "backend-rs"; import type { User } from "@/models/entities/user.js"; import type { Notification } from "@/models/entities/notification.js"; import { sendEmailNotification } from "./send-email-notification.js"; -import { shouldSilenceInstance } from "@/misc/should-block-instance.js"; export async function createNotification( notifieeId: User["id"], @@ -35,8 +34,8 @@ export async function createNotification( if ( (notifier.isSilenced || (Users.isRemoteUser(notifier) && - (await shouldSilenceInstance(notifier.host)))) && - !(await Followings.exist({ + (await isSilencedServer(notifier.host)))) && + !(await Followings.exists({ where: { followerId: notifieeId, followeeId: data.notifierId }, })) ) diff --git a/packages/backend/src/services/following/create.ts b/packages/backend/src/services/following/create.ts index 7387346d1a..49852ee9ef 100644 --- a/packages/backend/src/services/following/create.ts +++ b/packages/backend/src/services/following/create.ts @@ -17,13 +17,12 @@ import { Instances, UserProfiles, } from "@/models/index.js"; -import { genId } from "backend-rs"; +import { genId, isSilencedServer } from "backend-rs"; import { createNotification } from "@/services/create-notification.js"; import { isDuplicateKeyValueError } from "@/misc/is-duplicate-key-value-error.js"; import type { Packed } from "@/misc/schema.js"; import { getActiveWebhooks } from "@/misc/webhook-cache.js"; import { webhookDeliver } from "@/queue/index.js"; -import { shouldSilenceInstance } from "@/misc/should-block-instance.js"; const logger = new Logger("following/create"); @@ -231,7 +230,7 @@ export default async function ( (Users.isLocalUser(follower) && Users.isRemoteUser(followee)) || (Users.isRemoteUser(follower) && Users.isLocalUser(followee) && - (await shouldSilenceInstance(follower.host))) + (await isSilencedServer(follower.host))) ) { let autoAccept = false; diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index 206f6a50ad..2135847a17 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -37,14 +37,18 @@ import type { DriveFile } from "@/models/entities/drive-file.js"; import type { App } from "@/models/entities/app.js"; import { Not, In } from "typeorm"; import type { User, ILocalUser, IRemoteUser } from "@/models/entities/user.js"; -import { genId } from "backend-rs"; import { activeUsersChart } from "@/services/chart/index.js"; import type { IPoll } from "@/models/entities/poll.js"; import { Poll } from "@/models/entities/poll.js"; import { createNotification } from "@/services/create-notification.js"; import { isDuplicateKeyValueError } from "@/misc/is-duplicate-key-value-error.js"; import { checkHitAntenna } from "@/misc/check-hit-antenna.js"; -import { addNoteToAntenna, checkWordMute } from "backend-rs"; +import { + addNoteToAntenna, + checkWordMute, + genId, + isSilencedServer, +} from "backend-rs"; import { countSameRenotes } from "@/misc/count-same-renotes.js"; import { deliverToRelays, getCachedRelays } from "../relay.js"; import type { Channel } from "@/models/entities/channel.js"; @@ -56,7 +60,6 @@ import { Cache } from "@/misc/cache.js"; import type { UserProfile } from "@/models/entities/user-profile.js"; import { db } from "@/db/postgre.js"; import { getActiveWebhooks } from "@/misc/webhook-cache.js"; -import { shouldSilenceInstance } from "@/misc/should-block-instance.js"; import { redisClient } from "@/db/redis.js"; import { Mutex } from "redis-semaphore"; import { langmap } from "@/misc/langmap.js"; @@ -225,7 +228,7 @@ export default async ( if ( data.visibility === "public" && Users.isRemoteUser(user) && - (await shouldSilenceInstance(user.host)) + (await isSilencedServer(user.host)) ) { data.visibility = "home"; }