clarify UA used for federation

pull/215/head
Sven Sauleau 2023-02-07 16:03:46 +00:00
rodzic 78d029c452
commit 7cea876ed8
10 zmienionych plików z 25 dodań i 12 usunięć

Wyświetl plik

@ -248,7 +248,7 @@ export async function handle(
await acceptFollowing(db, originalActor, receiver)
const reply = accept.create(receiver, activity)
const signingKey = await getSigningKey(userKEK, db, receiver)
await deliverToActor(signingKey, receiver, originalActor, reply)
await deliverToActor(signingKey, receiver, originalActor, reply, domain)
// Notify the user
const notifId = await insertFollowNotification(db, receiver, originalActor)

Wyświetl plik

@ -7,14 +7,20 @@ import type { Actor } from './actors'
import { generateDigestHeader } from 'wildebeest/backend/src/utils/http-signing-cavage'
import { signRequest } from 'wildebeest/backend/src/utils/http-signing'
import { getFollowers } from 'wildebeest/backend/src/mastodon/follow'
import { WILDEBEEST_VERSION, MASTODON_API_VERSION } from 'wildebeest/config/versions'
import { getFederationUA } from 'wildebeest/config/ua'
const MAX_BATCH_SIZE = 100
export async function deliverToActor(signingKey: CryptoKey, from: Actor, to: Actor, activity: Activity) {
export async function deliverToActor(
signingKey: CryptoKey,
from: Actor,
to: Actor,
activity: Activity,
domain: string
) {
const headers = {
Accept: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
'User-Agent': `Wildebeest/${WILDEBEEST_VERSION} Mastodon/${MASTODON_API_VERSION}`,
'User-Agent': getFederationUA(domain),
}
const body = JSON.stringify(activity)

5
config/ua.ts 100644
Wyświetl plik

@ -0,0 +1,5 @@
import { WILDEBEEST_VERSION, MASTODON_API_VERSION } from 'wildebeest/config/versions'
export function getFederationUA(domain: string): string {
return `Wildebeest/${WILDEBEEST_VERSION} (Mastodon/${MASTODON_API_VERSION}; +${domain})`
}

Wyświetl plik

@ -20,5 +20,5 @@ export async function handleDeliverMessage(env: Env, actor: Actor, message: Deli
}
const signingKey = await getSigningKey(message.userKEK, env.DATABASE, actor)
await deliverToActor(signingKey, actor, targetActor, message.activity)
await deliverToActor(signingKey, actor, targetActor, message.activity, env.DOMAIN)
}

Wyświetl plik

@ -31,6 +31,7 @@ describe('Consumer', () => {
if (input.url.toString() === 'https://example.com/inbox') {
assert(input.headers.get('accept').includes('json'))
assert(input.headers.get('user-agent').includes('Wildebeest'))
assert(input.headers.get('user-agent').includes(domain))
assert.equal(input.method, 'POST')
receivedActivity = await input.json()
return new Response('')
@ -60,6 +61,7 @@ describe('Consumer', () => {
const env = {
DATABASE: db,
DOMAIN: domain,
} as any
await handleDeliverMessage(env, actor, message)

Wyświetl plik

@ -25,7 +25,7 @@ export async function handleRequest(
if (request.method !== 'POST') {
return new Response('', { status: 400 })
}
const domain = new URL(request.url).hostname
const handle = parseHandle(id)
// Only allow to follow remote users
@ -44,7 +44,7 @@ export async function handleRequest(
const activity = follow.create(connectedActor, targetActor)
const signingKey = await getSigningKey(userKEK, db, connectedActor)
await deliverToActor(signingKey, connectedActor, targetActor, activity)
await deliverToActor(signingKey, connectedActor, targetActor, activity, domain)
const res: Relationship = {
id: await addFollowing(db, connectedActor, targetActor, acct),

Wyświetl plik

@ -24,7 +24,7 @@ export async function handleRequest(
if (request.method !== 'POST') {
return new Response('', { status: 400 })
}
const domain = new URL(request.url).hostname
const handle = parseHandle(id)
// Only allow to unfollow remote users
@ -41,7 +41,7 @@ export async function handleRequest(
const activity = unfollow.create(connectedActor, targetActor)
const signingKey = await getSigningKey(userKEK, db, connectedActor)
await deliverToActor(signingKey, connectedActor, targetActor, activity)
await deliverToActor(signingKey, connectedActor, targetActor, activity, domain)
await removeFollowing(db, connectedActor, targetActor)
const res: Relationship = {

Wyświetl plik

@ -127,7 +127,7 @@ export async function handleRequest(
note.cc.push(targetActor.id.toString())
const activity = activities.create(domain, connectedActor, note)
const signingKey = await getSigningKey(userKEK, db, connectedActor)
await deliverToActor(signingKey, connectedActor, targetActor, activity)
await deliverToActor(signingKey, connectedActor, targetActor, activity, domain)
}
}

Wyświetl plik

@ -45,7 +45,7 @@ export async function handleRequest(
const activity = like.create(connectedActor, new URL(obj[originalObjectIdSymbol]))
const signingKey = await getSigningKey(userKEK, db, connectedActor)
await deliverToActor(signingKey, connectedActor, targetActor, activity)
await deliverToActor(signingKey, connectedActor, targetActor, activity, domain)
}
await insertLike(db, connectedActor, obj)

Wyświetl plik

@ -50,7 +50,7 @@ export async function handleRequest(
await Promise.all([
// Delivers the announce activity to the post author.
deliverToActor(signingKey, connectedActor, targetActor, activity),
deliverToActor(signingKey, connectedActor, targetActor, activity, domain),
// Share reblogged by delivering the announce activity to followers
deliverFollowers(db, userKEK, connectedActor, activity, queue),
])