diff --git a/packages/backend-rs/index.d.ts b/packages/backend-rs/index.d.ts index 001ee6f679..8d61f9ccd9 100644 --- a/packages/backend-rs/index.d.ts +++ b/packages/backend-rs/index.d.ts @@ -264,6 +264,8 @@ export interface DecodedReaction { export function decodeReaction(reaction: string): DecodedReaction export function countReactions(reactions: Record): Record export function toDbReaction(reaction?: string | undefined | null, host?: string | undefined | null): Promise +/** Delete all entries in the "attestation_challenge" table created at more than 5 minutes ago */ +export function removeOldAttestationChallenges(): Promise export interface AbuseUserReport { id: string createdAt: Date diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js index 411a39e050..d4ae11b676 100644 --- a/packages/backend-rs/index.js +++ b/packages/backend-rs/index.js @@ -310,7 +310,7 @@ if (!nativeBinding) { throw new Error(`Failed to load native binding`) } -const { loadEnv, loadConfig, stringToAcct, acctToString, addNoteToAntenna, 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, ChatEvent, publishToChatStream, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding +const { loadEnv, loadConfig, stringToAcct, acctToString, addNoteToAntenna, 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, removeOldAttestationChallenges, AntennaSrcEnum, DriveFileUsageHintEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, ChatEvent, publishToChatStream, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding module.exports.loadEnv = loadEnv module.exports.loadConfig = loadConfig @@ -342,6 +342,7 @@ module.exports.isOldPasswordAlgorithm = isOldPasswordAlgorithm module.exports.decodeReaction = decodeReaction module.exports.countReactions = countReactions module.exports.toDbReaction = toDbReaction +module.exports.removeOldAttestationChallenges = removeOldAttestationChallenges module.exports.AntennaSrcEnum = AntennaSrcEnum module.exports.DriveFileUsageHintEnum = DriveFileUsageHintEnum module.exports.MutedNoteReasonEnum = MutedNoteReasonEnum diff --git a/packages/backend-rs/src/misc/mod.rs b/packages/backend-rs/src/misc/mod.rs index 8246b6a31a..049c744f62 100644 --- a/packages/backend-rs/src/misc/mod.rs +++ b/packages/backend-rs/src/misc/mod.rs @@ -13,3 +13,4 @@ pub mod nyaify; pub mod password; pub mod reaction; pub mod redis_cache; +pub mod remove_old_attestation_challenges; diff --git a/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs b/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs new file mode 100644 index 0000000000..829a8e2c0c --- /dev/null +++ b/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs @@ -0,0 +1,17 @@ +// TODO: We want to get rid of this + +use crate::database::db_conn; +use crate::model::entity::attestation_challenge; +use chrono::{Duration, Utc}; +use sea_orm::{ColumnTrait, DbErr, EntityTrait, QueryFilter}; + +/// Delete all entries in the "attestation_challenge" table created at more than 5 minutes ago +#[crate::export] +pub async fn remove_old_attestation_challenges() -> Result<(), DbErr> { + attestation_challenge::Entity::delete_many() + .filter(attestation_challenge::Column::CreatedAt.lt(Utc::now() - Duration::minutes(5))) + .exec(db_conn().await?) + .await?; + + Ok(()) +} diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts index f254aaea17..e9e3ceb98a 100644 --- a/packages/backend/src/boot/master.ts +++ b/packages/backend/src/boot/master.ts @@ -9,7 +9,7 @@ import semver from "semver"; import Logger from "@/services/logger.js"; import type { Config } from "backend-rs"; -import { fetchMeta } from "backend-rs"; +import { fetchMeta, removeOldAttestationChallenges } from "backend-rs"; import { config, envOption } from "@/config.js"; import { showMachineInfo } from "@/misc/show-machine-info.js"; import { db, initDb } from "@/db/postgre.js"; @@ -115,18 +115,14 @@ export async function masterMain() { true, ); - if ( - !envOption.noDaemons && - config.clusterLimits?.web && - config.clusterLimits?.web >= 1 - ) { + if (!envOption.noDaemons) { import("../daemons/server-stats.js").then((x) => x.default()); import("../daemons/queue-stats.js").then((x) => x.default()); - import("../daemons/janitor.js").then((x) => x.default()); + // Update meta cache every 5 minitues + setInterval(() => fetchMeta(false), 1000 * 60 * 5); + // Remove old attestation challenges + setInterval(() => removeOldAttestationChallenges(), 1000 * 60 * 30); } - - // Update meta cache every 5 minitues - setInterval(() => fetchMeta(false), 1000 * 60 * 5); } function showEnvironment(): void { diff --git a/packages/backend/src/daemons/janitor.ts b/packages/backend/src/daemons/janitor.ts deleted file mode 100644 index 99b809d1c8..0000000000 --- a/packages/backend/src/daemons/janitor.ts +++ /dev/null @@ -1,20 +0,0 @@ -// TODO: 消したい - -const interval = 30 * 60 * 1000; -import { AttestationChallenges } from "@/models/index.js"; -import { LessThan } from "typeorm"; - -/** - * Clean up database occasionally - */ -export default function () { - async function tick() { - await AttestationChallenges.delete({ - createdAt: LessThan(new Date(Date.now() - 5 * 60 * 1000)), - }); - } - - tick(); - - setInterval(tick, interval); -}