Merge pull request #323 from cloudflare/sven/use-actor-properties

use Actor properties for inbox URL
sven/post-relay
Sven Sauleau 2023-02-20 17:03:19 +00:00 zatwierdzone przez GitHub
commit 80ca74923a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 36 dodań i 24 usunięć

Wyświetl plik

@ -11,22 +11,6 @@ export function actorURL(domain: string, id: string): URL {
return new URL(`/ap/users/${id}`, 'https://' + domain)
}
function inboxURL(id: URL): URL {
return new URL(id + '/inbox')
}
function outboxURL(id: URL): URL {
return new URL(id + '/outbox')
}
function followingURL(id: URL): URL {
return new URL(id + '/following')
}
export function followersURL(id: URL): URL {
return new URL(id + '/followers')
}
// https://www.w3.org/TR/activitystreams-vocabulary/#actor-types
export interface Actor extends APObject {
inbox: URL
@ -143,8 +127,14 @@ type PersonProperties = {
icon?: { url: string }
image?: { url: string }
preferredUsername?: string
inbox?: string
outbox?: string
following?: string
followers?: string
}
// Create a local user
export async function createPerson(
domain: string,
db: D1Database,
@ -178,6 +168,23 @@ export async function createPerson(
}
const id = actorURL(domain, properties.preferredUsername).toString()
if (properties.inbox === undefined) {
properties.inbox = id + '/inbox'
}
if (properties.outbox === undefined) {
properties.outbox = id + '/outbox'
}
if (properties.following === undefined) {
properties.following = id + '/following'
}
if (properties.followers === undefined) {
properties.followers = id + '/followers'
}
const row = await db
.prepare(
`
@ -256,6 +263,10 @@ export function personFromRow(row: any): Person {
domain = new URL(row.original_actor_id).hostname
}
if (properties.inbox === undefined) {
console.warn('malformed Actor: missing inbox')
}
return {
// Hidden values
[emailSymbol]: row.email,
@ -270,11 +281,7 @@ export function personFromRow(row: any): Person {
type: PERSON,
id,
published: new Date(row.cdate).toISOString(),
inbox: inboxURL(row.id),
outbox: outboxURL(row.id),
following: followingURL(row.id),
followers: followersURL(row.id),
url: new URL('@' + preferredUsername, 'https://' + domain),
} as Person
} as unknown as Person
}

Wyświetl plik

@ -2,7 +2,6 @@
import type { Actor } from 'wildebeest/backend/src/activitypub/actors'
import type { Link } from 'wildebeest/backend/src/activitypub/objects/link'
import { followersURL } from 'wildebeest/backend/src/activitypub/actors'
import { PUBLIC_GROUP } from 'wildebeest/backend/src/activitypub/activities'
import * as objects from '.'
@ -36,7 +35,7 @@ export async function createPublicNote(
attributedTo: actorId,
content,
to: [PUBLIC_GROUP],
cc: [followersURL(actorId)],
cc: [actor.followers.toString()],
// FIXME: stub values
replies: null,

Wyświetl plik

@ -31,7 +31,13 @@ describe('ActivityPub', () => {
test('fetch user by id', async () => {
const db = await makeDB()
const properties = { summary: 'test summary' }
const properties = {
summary: 'test summary',
inbox: 'https://example.com/inbox',
outbox: 'https://example.com/outbox',
following: 'https://example.com/following',
followers: 'https://example.com/followers',
}
const pubKey =
'-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApnI8FHJQXqqAdM87YwVseRUqbNLiw8nQ0zHBUyLylzaORhI4LfW4ozguiw8cWYgMbCufXMoITVmdyeTMGbQ3Q1sfQEcEjOZZXEeCCocmnYjK6MFSspjFyNw6GP0a5A/tt1tAcSlgALv8sg1RqMhSE5Kv+6lSblAYXcIzff7T2jh9EASnimaoAAJMaRH37+HqSNrouCxEArcOFhmFETadXsv+bHZMozEFmwYSTugadr4WD3tZd+ONNeimX7XZ3+QinMzFGOW19ioVHyjt3yCDU1cPvZIDR17dyEjByNvx/4N4Zly7puwBn6Ixy/GkIh5BWtL5VOFDJm/S+zcf1G1WsOAXMwKL4Nc5UWKfTB7Wd6voId7vF7nI1QYcOnoyh0GqXWhTPMQrzie4nVnUrBedxW0s/0vRXeR63vTnh5JrTVu06JGiU2pq2kvwqoui5VU6rtdImITybJ8xRkAQ2jo4FbbkS6t49PORIuivxjS9wPl7vWYazZtDVa5g/5eL7PnxOG3HsdIJWbGEh1CsG83TU9burHIepxXuQ+JqaSiKdCVc8CUiO++acUqKp7lmbYR9E/wRmvxXDFkxCZzA0UL2mRoLLLOe4aHvRSTsqiHC5Wwxyew5bb+eseJz3wovid9ZSt/tfeMAkCDmaCxEK+LGEbJ9Ik8ihis8Esm21N0A54sCAwEAAQ==-----END PUBLIC KEY-----'
await db