Fix: リモートユーザーの修復処理が自動的に実行されない for v10 (#4763)

* Fix: ユーザーresyncが自動実行されない

* ここにあっても意味がない

* lastFetchedAt事前更新はWebFingerする前のみ

* lint fix
This commit is contained in:
MeiMei 2019-04-21 23:56:56 +09:00 committed by syuilo
parent 7d31bd97ff
commit 98b8a94f2b
3 changed files with 14 additions and 20 deletions

View file

@ -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;

View file

@ -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<IUser> => {
export default async (username: string, _host: string, option?: any, resync = false): Promise<IUser> => {
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);

View file

@ -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
});