[backend] Don't recursively resolve user profile mentions

This commit is contained in:
Laura Hausmann 2023-10-24 18:29:14 +02:00
parent 7c8881f1a8
commit 3b85491ee4
Signed by: zotan
GPG key ID: D044E84C5BE01605
2 changed files with 8 additions and 6 deletions

View file

@ -170,6 +170,7 @@ export async function createPerson(
uri: string, uri: string,
resolver?: Resolver, resolver?: Resolver,
subjectHost?: string, subjectHost?: string,
skipMentions: boolean = false
): Promise<User> { ): Promise<User> {
if (typeof uri !== "string") throw new Error("uri is not string"); if (typeof uri !== "string") throw new Error("uri is not string");
@ -399,7 +400,7 @@ export async function createPerson(
updateUsertags(user!, tags); updateUsertags(user!, tags);
// Mentions update // Mentions update
UserProfiles.updateMentions(user!.id); if (!skipMentions) UserProfiles.updateMentions(user!.id);
//#region Fetch avatar and header image //#region Fetch avatar and header image
const [avatar, banner] = await Promise.all( const [avatar, banner] = await Promise.all(

View file

@ -30,7 +30,8 @@ export async function resolveUser(
username: string, username: string,
host: string | null, host: string | null,
refresh: boolean = true, refresh: boolean = true,
awaitRefresh: boolean = true awaitRefresh: boolean = true,
skipMentionsOnCreate: boolean = false
): Promise<User> { ): Promise<User> {
const usernameLower = username.toLowerCase(); const usernameLower = username.toLowerCase();
@ -104,14 +105,14 @@ export async function resolveUser(
// Otherwise create and return new user // Otherwise create and return new user
else { else {
logger.succ(`return new remote user: ${chalk.magenta(finalAcctLower)}`); logger.succ(`return new remote user: ${chalk.magenta(finalAcctLower)}`);
return await createPerson(fingerRes.self.href, undefined, subjectHost); return await createPerson(fingerRes.self.href, undefined, subjectHost, skipMentionsOnCreate);
} }
} }
} }
// Not a split domain setup, so we can simply create and return the new user // Not a split domain setup, so we can simply create and return the new user
logger.succ(`return new remote user: ${chalk.magenta(finalAcctLower)}`); logger.succ(`return new remote user: ${chalk.magenta(finalAcctLower)}`);
return await createPerson(fingerRes.self.href, undefined, subjectHost); return await createPerson(fingerRes.self.href, undefined, subjectHost, skipMentionsOnCreate);
} }
// If user information is out of date, return it by starting over from WebFinger // If user information is out of date, return it by starting over from WebFinger
@ -187,7 +188,7 @@ export async function resolveUser(
} else if (refresh && !awaitRefresh && (user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24)) { } else if (refresh && !awaitRefresh && (user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24)) {
// Run the refresh in the background // Run the refresh in the background
// noinspection ES6MissingAwait // noinspection ES6MissingAwait
resolveUser(username, host, true, true); resolveUser(username, host, true, true, skipMentionsOnCreate);
} }
logger.info(`return existing remote user: ${acctLower}`); logger.info(`return existing remote user: ${acctLower}`);
@ -197,7 +198,7 @@ export async function resolveUser(
export async function resolveMentionToUserAndProfile(username: string, host: string | null, objectHost: string | null) { export async function resolveMentionToUserAndProfile(username: string, host: string | null, objectHost: string | null) {
return profileMentionCache.fetch(`${username}@${host ?? objectHost}`, async () => { return profileMentionCache.fetch(`${username}@${host ?? objectHost}`, async () => {
try { try {
const user = await resolveUser(username, host ?? objectHost, false); const user = await resolveUser(username, host ?? objectHost, false, false, true);
const profile = await UserProfiles.findOneBy({ userId: user.id }); const profile = await UserProfiles.findOneBy({ userId: user.id });
const data = { username, host: host ?? objectHost }; const data = { username, host: host ?? objectHost };