summary refs log tree commit diff
path: root/src/activitypub/routes/user.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/activitypub/routes/user.ts')
-rw-r--r--src/activitypub/routes/user.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/activitypub/routes/user.ts b/src/activitypub/routes/user.ts
new file mode 100644

index 00000000..838d14b7 --- /dev/null +++ b/src/activitypub/routes/user.ts
@@ -0,0 +1,36 @@ +import { route } from "@spacebar/api"; +import { Config, User } from "@spacebar/util"; +import { Request, Response, Router } from "express"; + +const router = Router(); +export default router; + +router.get("/:id", route({}), async (req: Request, res: Response) => { + const id = req.params.name; + + const user = await User.findOneOrFail({ where: { id } }); + + const { webDomain } = Config.get().federation; + + return res.json({ + "@context": "https://www.w3.org/ns/activitystreams", + type: "Person", + id: `https://${webDomain}/fed/user/${user.id}`, + name: user.username, + preferredUsername: user.username, + summary: user.bio, + icon: user.avatar + ? [ + `${Config.get().cdn.endpointPublic}/avatars/${user.id}/${ + user.avatar + }`, + ] + : undefined, + + inbox: `https://${webDomain}/fed/user/${user.id}/inbox`, + outbox: `https://${webDomain}/fed/user/${user.id}/outbox`, + followers: `https://${webDomain}/fed/user/${user.id}/followers`, + following: `https://${webDomain}/fed/user/${user.id}/following`, + linked: `https://${webDomain}/fed/user/${user.id}/likeds`, + }); +});