Fix: リモートユーザーの修復処理が自動的に実行されない for v10 (#4763)
* Fix: ユーザーresyncが自動実行されない * ここにあっても意味がない * lastFetchedAt事前更新はWebFingerする前のみ * lint fix
This commit is contained in:
parent
7d31bd97ff
commit
98b8a94f2b
3 changed files with 14 additions and 20 deletions
|
@ -294,13 +294,6 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
// 繋がらないインスタンスに何回も試行するのを防ぐ, 後続の同様処理の連続試行を防ぐ ため 試行前にも更新する
|
|
||||||
await User.update({ _id: exist._id }, {
|
|
||||||
$set: {
|
|
||||||
lastFetchedAt: new Date(),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (resolver == null) resolver = new Resolver();
|
if (resolver == null) resolver = new Resolver();
|
||||||
|
|
||||||
const object = hint || await resolver.resolve(uri) as any;
|
const object = hint || await resolver.resolve(uri) as any;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import chalk from 'chalk';
|
||||||
|
|
||||||
const logger = remoteLogger.createSubLogger('resolve-user');
|
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();
|
const usernameLower = username.toLowerCase();
|
||||||
|
|
||||||
if (_host == null) {
|
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 });
|
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}`;
|
const acctLower = `${usernameLower}@${hostAscii}`;
|
||||||
|
|
||||||
|
@ -39,14 +39,22 @@ export default async (username: string, _host: string, option?: any, resync?: bo
|
||||||
return await createPerson(self.href);
|
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}`);
|
logger.info(`try resync: ${acctLower}`);
|
||||||
const self = await resolveSelf(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.
|
// if uri mismatch, Fix (user@host <=> AP's Person id(IRemoteUser.uri)) mapping.
|
||||||
logger.info(`uri missmatch: ${acctLower}`);
|
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
|
// validate uri
|
||||||
const uri = new URL(self.href);
|
const uri = new URL(self.href);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import $ from 'cafy';
|
import $ from 'cafy';
|
||||||
import ID, { transform, transformMany } from '../../../../misc/cafy-id';
|
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 resolveRemoteUser from '../../../../remote/resolve-user';
|
||||||
import define from '../../define';
|
import define from '../../define';
|
||||||
import { apiLogger } from '../../logger';
|
import { apiLogger } from '../../logger';
|
||||||
|
@ -96,13 +96,6 @@ export default define(meta, async (ps, me) => {
|
||||||
throw new ApiError(meta.errors.noSuchUser);
|
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, {
|
return await pack(user, me, {
|
||||||
detail: true
|
detail: true
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue