From bc80fd7c49c1f65a355404c9ff163e57650620aa Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 7 Nov 2025 00:22:32 -0500 Subject: [PATCH] fix cherry-pick errors --- .../core/activitypub/ApDbResolverService.ts | 26 +++++++---- .../activitypub/models/ApPersonService.ts | 44 +++++++------------ .../src/server/api/endpoints/i/apps.ts | 2 +- .../server/api/endpoints/miauth/gen-token.ts | 2 +- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/backend/src/core/activitypub/ApDbResolverService.ts b/packages/backend/src/core/activitypub/ApDbResolverService.ts index e9e0dde9cd..a5eb851d6c 100644 --- a/packages/backend/src/core/activitypub/ApDbResolverService.ts +++ b/packages/backend/src/core/activitypub/ApDbResolverService.ts @@ -107,15 +107,25 @@ export class ApDbResolverService implements OnApplicationShutdown { if (parsed.local) { if (parsed.type !== 'users') return null; - return await this.cacheService.userByIdCache.fetchMaybe( - parsed.id, - () => this.usersRepository.findOneBy({ id: parsed.id, isDeleted: false }).then(x => x ?? undefined), - ) as MiLocalUser | undefined ?? null; + const u = await this.cacheService.findOptionalUserById(parsed.id); + + if (u == null || u.isDeleted) { + return null; + } + + return u as MiLocalUser | MiRemoteUser; } else { - return await this.cacheService.uriPersonCache.fetch( - parsed.uri, - () => this.usersRepository.findOneBy({ uri: parsed.uri, isDeleted: false }), - ) as MiRemoteUser | null; + const uid = await this.apPersonService.uriPersonCache.fetchMaybe(parsed.uri); + if (uid == null) { + return null; + } + + const u = await this.cacheService.findOptionalUserById(uid); + if (u == null || u.isDeleted) { + return null; + } + + return u as MiLocalUser | MiRemoteUser; } } diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts index 62c2f3def2..cf2c302af1 100644 --- a/packages/backend/src/core/activitypub/models/ApPersonService.ts +++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts @@ -277,38 +277,28 @@ export class ApPersonService implements OnModuleInit { * Misskeyに対象のPersonが登録されていればそれを返し、登録がなければnullを返します。 */ @bindThis - public async fetchPerson(uri: string, opts?: { withDeleted?: boolean, withSuspended?: boolean }): Promise { - const _opts = { - withDeleted: opts?.withDeleted ?? false, - withSuspended: opts?.withSuspended ?? true, - }; + public async fetchPerson(uri: string): Promise { + const cached = await this.uriPersonCache.fetchMaybe(uri); + if (cached) return await this.cacheService.findOptionalUserById(cached) as MiRemoteUser | MiLocalUser | undefined ?? null; - let userId; - - // Resolve URI -> User ID - const parsed = this.utilityService.parseUri(uri); - if (parsed.local) { - userId = parsed.type === 'users' ? parsed.id : null; - } else { - userId = await this.uriPersonCache.fetch(uri).catch(() => null); + // URIがこのサーバーを指しているならデータベースからフェッチ + if (uri.startsWith(`${this.config.url}/`)) { + const id = uri.split('/').pop(); + const u = await this.usersRepository.findOneBy({ id }) as MiLocalUser | null; + if (u) await this.uriPersonCache.set(uri, u.id); + return u; } - // No match - if (!userId) { - return null; - } + //#region このサーバーに既に登録されていたらそれを返す + const exist = await this.usersRepository.findOneBy({ uri }) as MiLocalUser | MiRemoteUser | null; - const user = await this.cacheService.findUserById(userId) - .catch(() => null) as MiLocalUser | MiRemoteUser | null; - - if (user?.isDeleted && !_opts.withDeleted) { - return null; - } - if (user?.isSuspended && !_opts.withSuspended) { - return null; + if (exist) { + await this.uriPersonCache.set(uri, exist.id); + return exist; } + //#endregion - return user; + return null; } private async resolveAvatarAndBanner(user: MiRemoteUser, icon: any, image: any, bgimg: any): Promise>> { @@ -845,7 +835,7 @@ export class ApPersonService implements OnModuleInit { } //#region このサーバーに既に登録されていたらそれを返す - const exist = await this.fetchPerson(uri, { withDeleted: true }); + const exist = await this.fetchPerson(uri); if (exist) return exist; //#endregion diff --git a/packages/backend/src/server/api/endpoints/i/apps.ts b/packages/backend/src/server/api/endpoints/i/apps.ts index 1563366da2..9fccc10345 100644 --- a/packages/backend/src/server/api/endpoints/i/apps.ts +++ b/packages/backend/src/server/api/endpoints/i/apps.ts @@ -116,7 +116,7 @@ export default class extends Endpoint { // eslint- const tokens = await query.getMany(); - const users = await this.cacheService.getUsers(tokens.flatMap(token => token.granteeIds)); + const users = await this.cacheService.findUsersById(tokens.flatMap(token => token.granteeIds)); const packedUsers = await this.userEntityService.packMany(Array.from(users.values()), me); const packedUserMap = new Map(packedUsers.map(u => [u.id, u])); diff --git a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts index 2f2035f52b..9cd4cb6d68 100644 --- a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts +++ b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts @@ -84,7 +84,7 @@ export default class extends Endpoint { // eslint- super(meta, paramDef, async (ps, me) => { // Validate grantees if (ps.grantees && ps.grantees.length > 0) { - const grantees = await this.cacheService.getUsers(ps.grantees); + const grantees = await this.cacheService.findUsersById(ps.grantees); if (grantees.size !== ps.grantees.length) { throw new ApiError(meta.errors.noSuchUser);