diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts index 570e92d73..2995e1dbb 100644 --- a/src/remote/activitypub/models/person.ts +++ b/src/remote/activitypub/models/person.ts @@ -294,13 +294,6 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje } //#endregion - // 繋がらないインスタンスに何回も試行するのを防ぐ, 後続の同様処理の連続試行を防ぐ ため 試行前にも更新する - await User.update({ _id: exist._id }, { - $set: { - lastFetchedAt: new Date(), - }, - }); - if (resolver == null) resolver = new Resolver(); const object = hint || await resolver.resolve(uri) as any; diff --git a/src/remote/resolve-user.ts b/src/remote/resolve-user.ts index df5aee7a0..767eb89b7 100644 --- a/src/remote/resolve-user.ts +++ b/src/remote/resolve-user.ts @@ -9,7 +9,7 @@ import chalk from 'chalk'; const logger = remoteLogger.createSubLogger('resolve-user'); -export default async (username: string, _host: string, option?: any, resync?: boolean): Promise => { +export default async (username: string, _host: string, option?: any, resync = false): Promise => { const usernameLower = username.toLowerCase(); if (_host == null) { @@ -28,7 +28,7 @@ export default async (username: string, _host: string, option?: any, resync?: bo return await User.findOne({ usernameLower, host: null }); } - const user = await User.findOne({ usernameLower, host }, option); + const user = await User.findOne({ usernameLower, host }, option) as IRemoteUser; const acctLower = `${usernameLower}@${hostAscii}`; @@ -39,14 +39,22 @@ export default async (username: string, _host: string, option?: any, resync?: bo return await createPerson(self.href); } - if (resync) { + // resyncオプション OR ユーザー情報が古い場合は、WebFilgerからやりなおして返す + if (resync || user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24) { + // 繋がらないインスタンスに何回も試行するのを防ぐ, 後続の同様処理の連続試行を防ぐ ため 試行前にも更新する + await User.update({ _id: user._id }, { + $set: { + lastFetchedAt: new Date(), + }, + }); + logger.info(`try resync: ${acctLower}`); const self = await resolveSelf(acctLower); - if ((user as IRemoteUser).uri !== self.href) { + if (user.uri !== self.href) { // if uri mismatch, Fix (user@host <=> AP's Person id(IRemoteUser.uri)) mapping. logger.info(`uri missmatch: ${acctLower}`); - logger.info(`recovery missmatch uri for (username=${username}, host=${host}) from ${(user as IRemoteUser).uri} to ${self.href}`); + logger.info(`recovery missmatch uri for (username=${username}, host=${host}) from ${user.uri} to ${self.href}`); // validate uri const uri = new URL(self.href); diff --git a/src/server/api/endpoints/users/show.ts b/src/server/api/endpoints/users/show.ts index 4e59945eb..4561c5f1d 100644 --- a/src/server/api/endpoints/users/show.ts +++ b/src/server/api/endpoints/users/show.ts @@ -1,6 +1,6 @@ import $ from 'cafy'; import ID, { transform, transformMany } from '../../../../misc/cafy-id'; -import User, { pack, isRemoteUser } from '../../../../models/user'; +import User, { pack } from '../../../../models/user'; import resolveRemoteUser from '../../../../remote/resolve-user'; import define from '../../define'; import { apiLogger } from '../../logger'; @@ -96,13 +96,6 @@ export default define(meta, async (ps, me) => { throw new ApiError(meta.errors.noSuchUser); } - // ユーザー情報更新 - if (isRemoteUser(user)) { - if (user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24) { - resolveRemoteUser(ps.username, ps.host, { }, true); - } - } - return await pack(user, me, { detail: true });