v4: a remote account's links to its home lead to the home's pages — the settings' "Change it on <host>" button and the profile's "Account on <host>" link went to the host in the handle, which is the home's issuer, its API, not necessarily where its pages are: in development musique's button led to localhost:8000/settings, gerbeur's API, which served a stale build, instead of localhost:3000/settings. GET /api/users/:key/home?path= now redirects to a page of a remote user's home, their profile there by default, at the origin of the home's authorization_endpoint, which its metadata gives (homePageUrl in federation-service.ts), the issuer standing in while the home doesn't answer; a local user 404s, and a path that isn't one 400s. homeUrl links to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-09 21:06:14 +00:00
parent 5f2fb4479a
commit 8bcc005140
5 changed files with 90 additions and 9 deletions

View File

@@ -30,6 +30,9 @@
* page of the public playlists they follow.
* - `GET /api/users/:key/invitees` — public. Answers the tree of users they
* invited.
* - `GET /api/users/:key/home?path=` — public. Redirects to a page of the
* instance a user from another instance comes from, their profile there
* unless `path` names another; a local user 404s.
* - `PATCH /api/users/:key/role` — permission `user:manage`. Sets another
* user's role.
* - `PATCH /api/users/:key/username` — permission `user:manage`. Renames a
@@ -98,6 +101,7 @@ import {
getFollowedUsersByUser,
} from "../services/follow-service.ts";
import { resolveCategoryFilter } from "../services/category-service.ts";
import { homePageUrl } from "../services/federation-service.ts";
/**
* Mounted by `api/main.ts` behind the error, Open Graph and CORS middleware.
@@ -261,6 +265,13 @@ router.get("/:key/invitees", (ctx) => {
ctx.response.body = responseBody;
});
router.get("/:key/home", async (ctx) => {
const path = ctx.request.url.searchParams.get("path") ?? undefined;
ctx.response.redirect(
await homePageUrl(resolveUserKey(ctx.params.key), path),
);
});
router.patch(
"/:key/role",
authMiddleware,