fix(backend): APのURIがローカルかどうかをoriginで比較するように修正 (MisskeyIO#508)
This commit is contained in:
		
							parent
							
								
									cb07db5399
								
							
						
					
					
						commit
						2537f8c263
					
				|  | @ -74,7 +74,7 @@ export class RemoteUserResolveService { | |||
| 		if (user == null) { | ||||
| 			const self = await this.resolveSelf(acctLower); | ||||
| 
 | ||||
| 			if (self.href.startsWith(this.config.url)) { | ||||
| 			if (new URL(self.href).origin === this.config.url) { | ||||
| 				const local = this.apDbResolverService.parseUri(self.href); | ||||
| 				if (local.local && local.type === 'users') { | ||||
| 					// the LR points to local
 | ||||
|  |  | |||
|  | @ -569,7 +569,7 @@ export class ApRendererService { | |||
| 
 | ||||
| 	@bindThis | ||||
| 	public renderUndo(object: string | IObject, user: { id: MiUser['id'] }): IUndo { | ||||
| 		const id = typeof object !== 'string' && typeof object.id === 'string' && object.id.startsWith(this.config.url) ? `${object.id}/undo` : undefined; | ||||
| 		const id = typeof object !== 'string' && typeof object.id === 'string' && new URL(object.id).origin === this.config.url ? `${object.id}/undo` : undefined; | ||||
| 
 | ||||
| 		return { | ||||
| 			type: 'Undo', | ||||
|  |  | |||
|  | @ -360,7 +360,7 @@ export class ApNoteService { | |||
| 			if (exist) return exist; | ||||
| 			//#endregion
 | ||||
| 
 | ||||
| 			if (uri.startsWith(this.config.url)) { | ||||
| 			if (new URL(uri).origin === this.config.url) { | ||||
| 				throw new StatusError('cannot resolve local note', 400, 'cannot resolve local note'); | ||||
| 			} | ||||
| 
 | ||||
|  |  | |||
|  | @ -225,7 +225,7 @@ export class ApPersonService implements OnModuleInit { | |||
| 		if (cached) return cached; | ||||
| 
 | ||||
| 		// URIがこのサーバーを指しているならデータベースからフェッチ
 | ||||
| 		if (uri.startsWith(`${this.config.url}/`)) { | ||||
| 		if (new URL(uri).origin === this.config.url) { | ||||
| 			const id = uri.split('/').pop(); | ||||
| 			const u = await this.usersRepository.findOneBy({ id }) as MiLocalUser | null; | ||||
| 			if (u) this.cacheService.uriPersonCache.set(uri, u); | ||||
|  | @ -285,7 +285,7 @@ export class ApPersonService implements OnModuleInit { | |||
| 	public async createPerson(uri: string, resolver?: Resolver): Promise<MiRemoteUser> { | ||||
| 		if (typeof uri !== 'string') throw new Error('uri is not string'); | ||||
| 
 | ||||
| 		if (uri.startsWith(this.config.url)) { | ||||
| 		if (new URL(uri).origin === this.config.url) { | ||||
| 			throw new StatusError('cannot resolve local user', 400, 'cannot resolve local user'); | ||||
| 		} | ||||
| 
 | ||||
|  | @ -447,7 +447,7 @@ export class ApPersonService implements OnModuleInit { | |||
| 		if (typeof uri !== 'string') throw new Error('uri is not string'); | ||||
| 
 | ||||
| 		// URIがこのサーバーを指しているならスキップ
 | ||||
| 		if (uri.startsWith(`${this.config.url}/`)) return; | ||||
| 		if (new URL(uri).origin === this.config.url) return; | ||||
| 
 | ||||
| 		//#region このサーバーに既に登録されているか
 | ||||
| 		const exist = await this.fetchPerson(uri) as MiRemoteUser | null; | ||||
|  | @ -692,7 +692,7 @@ export class ApPersonService implements OnModuleInit { | |||
| 			await this.updatePerson(src.movedToUri, undefined, undefined, [...movePreventUris, src.uri]); | ||||
| 			dst = await this.fetchPerson(src.movedToUri) ?? dst; | ||||
| 		} else { | ||||
| 			if (src.movedToUri.startsWith(`${this.config.url}/`)) { | ||||
| 			if (new URL(src.movedToUri).origin === this.config.url) { | ||||
| 				// ローカルユーザーっぽいのにfetchPersonで見つからないということはmovedToUriが間違っている
 | ||||
| 				return 'failed: movedTo is local but not found'; | ||||
| 			} | ||||
|  |  | |||
|  | @ -71,7 +71,7 @@ export class ApQuestionService { | |||
| 		if (uri == null) throw new Error('uri is null'); | ||||
| 
 | ||||
| 		// URIがこのサーバーを指しているならスキップ
 | ||||
| 		if (uri.startsWith(this.config.url + '/')) throw new Error('uri points local'); | ||||
| 		if (new URL(uri).origin === this.config.url) throw new Error('uri points local'); | ||||
| 
 | ||||
| 		//#region このサーバーに既に登録されているか
 | ||||
| 		const note = await this.notesRepository.findOneBy({ uri }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue