diff options
| author | xtex <xtexchooser@duck.com> | 2023-07-19 12:01:14 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-19 13:01:14 +0900 |
| commit | bf9e74ca053e7c541f0457c0cd12bfe2acfc08bb (patch) | |
| tree | 923db6bd739fbea24bb2579b93ae0565eec6dec3 /packages/backend/src/core/RemoteUserResolveService.ts | |
| parent | fix(frontend): Fix cat ears are awkward on reply modal (#11309) (diff) | |
| download | sharkey-bf9e74ca053e7c541f0457c0cd12bfe2acfc08bb.tar.gz sharkey-bf9e74ca053e7c541f0457c0cd12bfe2acfc08bb.tar.bz2 sharkey-bf9e74ca053e7c541f0457c0cd12bfe2acfc08bb.zip | |
fix: failed to resolve acct URI which points to local Person (#11024)
* fix: resolving alias for local users (#9199)
Signed-off-by: xtex <xtexchooser@duck.com>
* style: return type for RemoteUserResolveService#resolveSelf
Signed-off-by: xtex <xtexchooser@duck.com>
* docs: update CHANGELOG
Signed-off-by: xtex <xtexchooser@duck.com>
* style: fix typecheck
Signed-off-by: xtex <xtexchooser@duck.com>
---------
Signed-off-by: xtex <xtexchooser@duck.com>
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/backend/src/core/RemoteUserResolveService.ts')
| -rw-r--r-- | packages/backend/src/core/RemoteUserResolveService.ts | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/packages/backend/src/core/RemoteUserResolveService.ts b/packages/backend/src/core/RemoteUserResolveService.ts index 952d244823..e19a245e18 100644 --- a/packages/backend/src/core/RemoteUserResolveService.ts +++ b/packages/backend/src/core/RemoteUserResolveService.ts @@ -8,8 +8,9 @@ import type { LocalUser, RemoteUser } from '@/models/entities/User.js'; import type { Config } from '@/config.js'; import type Logger from '@/logger.js'; import { UtilityService } from '@/core/UtilityService.js'; -import { WebfingerService } from '@/core/WebfingerService.js'; +import { ILink, WebfingerService } from '@/core/WebfingerService.js'; import { RemoteLoggerService } from '@/core/RemoteLoggerService.js'; +import { ApDbResolverService } from '@/core/activitypub/ApDbResolverService.js'; import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js'; import { bindThis } from '@/decorators.js'; @@ -27,6 +28,7 @@ export class RemoteUserResolveService { private utilityService: UtilityService, private webfingerService: WebfingerService, private remoteLoggerService: RemoteLoggerService, + private apDbResolverService: ApDbResolverService, private apPersonService: ApPersonService, ) { this.logger = this.remoteLoggerService.logger.createSubLogger('resolve-user'); @@ -67,6 +69,22 @@ export class RemoteUserResolveService { if (user == null) { const self = await this.resolveSelf(acctLower); + if (self.href.startsWith(this.config.url)) { + const local = this.apDbResolverService.parseUri(self.href); + if (local.local && local.type === 'users') { + // the LR points to local + return (await this.apDbResolverService + .getUserFromApId(self.href) + .then((u) => { + if (u == null) { + throw new Error('local user not found'); + } else { + return u; + } + })) as LocalUser; + } + } + this.logger.succ(`return new remote user: ${chalk.magenta(acctLower)}`); return await this.apPersonService.createPerson(self.href); } @@ -119,7 +137,7 @@ export class RemoteUserResolveService { } @bindThis - private async resolveSelf(acctLower: string) { + private async resolveSelf(acctLower: string): Promise<ILink> { this.logger.info(`WebFinger for ${chalk.yellow(acctLower)}`); const finger = await this.webfingerService.webfinger(acctLower).catch(err => { this.logger.error(`Failed to WebFinger for ${chalk.yellow(acctLower)}: ${ err.statusCode ?? err.message }`); |