Merge pull request #2190 from mei23/mei-apsendvis2
ActivityPub送信時の公開範囲の実装
This commit is contained in:
		
						commit
						131a454e7c
					
				
					 3 changed files with 60 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -50,9 +50,21 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 | 
			
		|||
		? note.mentionedRemoteUsers.map(x => x.uri)
 | 
			
		||||
		: [];
 | 
			
		||||
 | 
			
		||||
	const cc = ['public', 'home', 'followers'].includes(note.visibility)
 | 
			
		||||
		? [`${attributedTo}/followers`].concat(mentions)
 | 
			
		||||
		: [];
 | 
			
		||||
	let to: string[] = [];
 | 
			
		||||
	let cc: string[] = [];
 | 
			
		||||
 | 
			
		||||
	if (note.visibility == 'public') {
 | 
			
		||||
		to = ['https://www.w3.org/ns/activitystreams#Public'];
 | 
			
		||||
		cc = [`${attributedTo}/followers`].concat(mentions);
 | 
			
		||||
	} else if (note.visibility == 'home') {
 | 
			
		||||
		to = [`${attributedTo}/followers`];
 | 
			
		||||
		cc = ['https://www.w3.org/ns/activitystreams#Public'].concat(mentions);
 | 
			
		||||
	} else if (note.visibility == 'followers') {
 | 
			
		||||
		to = [`${attributedTo}/followers`];
 | 
			
		||||
		cc = mentions;
 | 
			
		||||
	} else {
 | 
			
		||||
		to = mentions;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const mentionedUsers = note.mentions ? await User.find({
 | 
			
		||||
		_id: {
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +86,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 | 
			
		|||
		summary: note.cw,
 | 
			
		||||
		content: toHtml(note),
 | 
			
		||||
		published: note.createdAt.toISOString(),
 | 
			
		||||
		to: 'https://www.w3.org/ns/activitystreams#Public',
 | 
			
		||||
		to,
 | 
			
		||||
		cc,
 | 
			
		||||
		inReplyTo,
 | 
			
		||||
		attachment: (await promisedFiles).map(renderDocument),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,8 @@ export default async (user: ILocalUser) => {
 | 
			
		|||
		id,
 | 
			
		||||
		inbox: `${id}/inbox`,
 | 
			
		||||
		outbox: `${id}/outbox`,
 | 
			
		||||
		followers: `${id}/followers`,
 | 
			
		||||
		following: `${id}/following`,
 | 
			
		||||
		sharedInbox: `${config.url}/inbox`,
 | 
			
		||||
		url: `${config.url}/@${user.username}`,
 | 
			
		||||
		preferredUsername: user.username,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,6 +89,48 @@ router.get('/users/:user/outbox', async ctx => {
 | 
			
		|||
	ctx.body = pack(rendered);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// followers
 | 
			
		||||
router.get('/users/:user/followers', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
 | 
			
		||||
	const user = await User.findOne({
 | 
			
		||||
		_id: userId,
 | 
			
		||||
		host: null
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (user === null) {
 | 
			
		||||
		ctx.status = 404;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: Implement fetch and render
 | 
			
		||||
 | 
			
		||||
	const rendered = renderOrderedCollection(`${config.url}/users/${userId}/followers`, 0, []);
 | 
			
		||||
 | 
			
		||||
	ctx.body = pack(rendered);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// following
 | 
			
		||||
router.get('/users/:user/following', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
 | 
			
		||||
	const user = await User.findOne({
 | 
			
		||||
		_id: userId,
 | 
			
		||||
		host: null
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (user === null) {
 | 
			
		||||
		ctx.status = 404;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: Implement fetch and render
 | 
			
		||||
 | 
			
		||||
	const rendered = renderOrderedCollection(`${config.url}/users/${userId}/following`, 0, []);
 | 
			
		||||
 | 
			
		||||
	ctx.body = pack(rendered);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// publickey
 | 
			
		||||
router.get('/users/:user/publickey', async ctx => {
 | 
			
		||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue