ActivityPub visibility on send

This commit is contained in:
mei23 2018-08-13 03:49:17 +09:00
parent ab701bb93e
commit f079041827
3 changed files with 60 additions and 4 deletions

View File

@ -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),

View File

@ -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,

View File

@ -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);