diff --git a/packages/backend/src/server/api/endpoints/users/show.ts b/packages/backend/src/server/api/endpoints/users/show.ts index bd81989..8aaf8ca 100644 --- a/packages/backend/src/server/api/endpoints/users/show.ts +++ b/packages/backend/src/server/api/endpoints/users/show.ts @@ -97,6 +97,8 @@ export default class extends Endpoint { // eslint- const isModerator = await this.roleService.isModerator(me); ps.username = ps.username?.trim(); + const authed = me !== null + if (ps.userIds) { if (ps.userIds.length === 0) { return []; @@ -112,7 +114,10 @@ export default class extends Endpoint { // eslint- // リクエストされた通りに並べ替え const _users: MiUser[] = []; for (const id of ps.userIds) { - _users.push(users.find(x => x.id === id)!); + const user = users.find(x => x.id === id) + if (user && (authed || user.host === null)) { + _users.push(user); + } } return await Promise.all(_users.map(u => this.userEntityService.pack(u, me, { @@ -137,6 +142,14 @@ export default class extends Endpoint { // eslint- throw new ApiError(meta.errors.noSuchUser); } + if (!authed && user.host !== null) { + throw new ApiError({ + code: 'X_REMOTE_REDIRECT', + message: 'Redirect to remote user', + id: 'X_REMOTE_REDIRECT', + }, user.uri); + } + if (user.host == null) { if (me == null && ip != null) { this.perUserPvChart.commitByVisitor(user, ip); diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index cb41c4f..8199e3c 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -526,6 +526,11 @@ export class ClientServerService { if (user != null) { const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id }); + if (user.host !== null) { + reply.redirect(301, profile.url); + return; + } + const meta = await this.metaService.fetch(); const me = profile.fields ? profile.fields diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue index ebe4176..0cd39f3 100644 --- a/packages/frontend/src/pages/user/index.vue +++ b/packages/frontend/src/pages/user/index.vue @@ -70,6 +70,10 @@ function fetchUser(): void { misskeyApi('users/show', Misskey.acct.parse(props.acct)).then(u => { user.value = u; }).catch(err => { + if (err.code === 'X_REMOTE_REDIRECT') { + location.replace(err.info); + return; + } error.value = err; }); }