kopia lustrzana https://github.com/cloudflare/wildebeest
				
				
				
			Merge pull request #323 from cloudflare/sven/use-actor-properties
use Actor properties for inbox URLsven/post-relay
						commit
						80ca74923a
					
				|  | @ -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 | ||||
| } | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Sven Sauleau
						Sven Sauleau