From 558b58a0cdb5f229ca3d7973a0a8ecae14410c54 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sun, 10 Sep 2023 18:54:02 +0200 Subject: [PATCH] Fix updating host on updatePerson --- .../src/remote/activitypub/models/person.ts | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/packages/backend/src/remote/activitypub/models/person.ts b/packages/backend/src/remote/activitypub/models/person.ts index c9182ac70..4f913b50d 100644 --- a/packages/backend/src/remote/activitypub/models/person.ts +++ b/packages/backend/src/remote/activitypub/models/person.ts @@ -187,41 +187,45 @@ export async function createPerson( const host = subjectHost ?? await getSubjectHostFromUri(object.id) ?? toPuny(new URL(object.id).hostname); - let checkUser = (await Users.findOneBy({ - usernameLower: person.preferredUsername!.toLowerCase(), - host: toPuny(new URL(object.id).hostname), - })) as IRemoteUser | null; + const usernameLower = person.preferredUsername?.toLowerCase(); - if (checkUser != null) { - logger.info('Person already exists'); - if (host != checkUser.host) { - logger.info('Updating existing person with canonical account domain'); - checkUser.host = host; - await Users.update( - { - usernameLower: checkUser.usernameLower, - host: checkUser.host, - }, - { - host: host, - }, - ); - } - logger.info('Returning existing person'); - return checkUser; - } - - if (host != toPuny(new URL(object.id).hostname)) { - checkUser = (await Users.findOneBy({ - usernameLower: person.preferredUsername!.toLowerCase(), - host: host, + if (usernameLower !== null) { + let checkUser = (await Users.findOneBy({ + usernameLower: usernameLower, + host: toPuny(new URL(object.id).hostname), })) as IRemoteUser | null; if (checkUser != null) { logger.info('Person already exists'); + if (host != checkUser.host) { + logger.info(`Updating existing person with canonical account domain (${usernameLower}@${checkUser.host} -> ${usernameLower}@${host})`); + await Users.update( + { + usernameLower: usernameLower, + host: checkUser.host, + }, + { + host: host, + }, + ); + checkUser.host = host; + } logger.info('Returning existing person'); return checkUser; } + + if (host != toPuny(new URL(object.id).hostname)) { + checkUser = (await Users.findOneBy({ + usernameLower: usernameLower, + host: host, + })) as IRemoteUser | null; + + if (checkUser != null) { + logger.info('Person already exists'); + logger.info('Returning existing person'); + return checkUser; + } + } } const { fields } = analyzeAttachments(person.attachment || []);