signs all activitypub requests

This commit is contained in:
Christian Beutel
2025-06-26 00:51:15 +02:00
parent 54d7357603
commit 4051d232c6
6 changed files with 210 additions and 57 deletions

View File

@@ -13,16 +13,19 @@ export async function POST(event: RequestEvent) {
return json("Bad request", { status: 400 });
}
// Clone original headers to ensure no loss
const originalHeaders: Record<string, string> = {};
event.request.headers.forEach((value, key) => {
originalHeaders[key] = value
});
// Add forwarded path
originalHeaders['X-Forwarded-Path'] = event.url.pathname;
const success = await event.locals.pb.send("/activitypub/activity/process", {
method: "POST",
fetch: event.fetch,
headers: {
'X-Forwarded-Path': event.url.pathname,
'Content-Type': event.request.headers.get("content-type")!,
signature: event.request.headers.get("signature")!,
date: event.request.headers.get("date")!,
digest: event.request.headers.get("digest")!
},
headers: originalHeaders,
body: JSON.stringify(activity)
})

View File

@@ -22,16 +22,8 @@ export async function GET(event: RequestEvent) {
const { actor }: { actor: Actor } = await event.locals.pb.send(`/activitypub/actor?resource=acct:${handle}`, { method: "GET", fetch: event.fetch, });
const page = event.url.searchParams.get("page") ?? "1"
const headers = new Headers()
headers.set("Accept", 'application/ld+json')
const r = await event.fetch(actor[type as "followers" | "following"]! + '?' + new URLSearchParams({ page }), { headers })
if (!r.ok) {
const errorResponse = await r.json()
throw new ClientResponseError({ status: r.status, response: errorResponse });
}
const followers: APOrderedCollectionPage = await r.json()
const followers: APOrderedCollectionPage = await event.locals.pb.send(`/activitypub/actor/${actor.id}/${type}?page=${page}`, { method: "GET", fetch: event.fetch, });
const followerActors: Actor[] = []
for (const f of followers.orderedItems ?? []) {