[fedi] better /inbox /followers response

This commit is contained in:
les
2019-11-09 15:03:33 +01:00
parent 1041f046b4
commit d146600c0c

View File

@@ -12,16 +12,23 @@ module.exports = {
const ret = { const ret = {
'@context': [ '@context': [
'https://www.w3.org/ns/activitystreams', 'https://www.w3.org/ns/activitystreams',
'https://w3id.org/security/v1' 'https://w3id.org/security/v1',
{
toot: 'http://joinmastodon.org/ns#',
schema: 'http://schema.org#',
ProperyValue: 'schema:PropertyValue',
value: 'schema:value'
}
], ],
summary: config.description,
id: `${config.baseurl}/federation/u/${name}`, id: `${config.baseurl}/federation/u/${name}`,
type: 'Person', type: 'Person',
summary: config.description,
name: user.display_name || user.username, name: user.display_name || user.username,
preferredUsername: user.username, preferredUsername: user.username,
inbox: `${config.baseurl}/federation/u/${name}/inbox`, inbox: `${config.baseurl}/federation/u/${name}/inbox`,
outbox: `${config.baseurl}/federation/u/${name}/outbox`, // outbox: `${config.baseurl}/federation/u/${name}/outbox`,
followers: `${config.baseurl}/federation/u/${name}/followers`, // followers: `${config.baseurl}/federation/u/${name}/followers`,
discoverable: true,
attachment: [{ attachment: [{
type: 'PropertyValue', type: 'PropertyValue',
name: 'Website', name: 'Website',
@@ -46,7 +53,7 @@ module.exports = {
const page = req.query.page const page = req.query.page
debug('Retrieve %s followers', name) debug('Retrieve %s followers', name)
if (!name) { return res.status(400).send('Bad request.') } if (!name) { return res.status(400).send('Bad request.') }
const user = await User.findOne({ where: { username: name }, include: { model: FedUsers, as: 'followers' } }) const user = await User.findOne({ where: { username: name }, include: [{ model: FedUsers, as: 'followers' }] })
if (!user) { return res.status(404).send(`No record found for ${name}`) } if (!user) { return res.status(404).send(`No record found for ${name}`) }
res.type('application/activity+json; charset=utf-8') res.type('application/activity+json; charset=utf-8')
@@ -59,7 +66,8 @@ module.exports = {
type: 'OrderedCollection', type: 'OrderedCollection',
totalItems: user.followers.length, totalItems: user.followers.length,
first: `${config.baseurl}/federation/u/${name}/followers?page=true`, first: `${config.baseurl}/federation/u/${name}/followers?page=true`,
last: `${config.baseurl}/federation/u/${name}/followers?page=true` last: `${config.baseurl}/federation/u/${name}/followers?page=true`,
orderedItems: user.followers.map(f => f.ap_id)
}) })
} }
return res.json({ return res.json({
@@ -68,7 +76,7 @@ module.exports = {
type: 'OrderedCollectionPage', type: 'OrderedCollectionPage',
totalItems: user.followers.length, totalItems: user.followers.length,
partOf: `${config.baseurl}/federation/u/${name}/followers`, partOf: `${config.baseurl}/federation/u/${name}/followers`,
orderedItems: user.followers orderedItems: user.followers.map(f => f.ap_id)
}) })
}, },
@@ -89,9 +97,8 @@ module.exports = {
// https://www.w3.org/TR/activitypub/#outbox // https://www.w3.org/TR/activitypub/#outbox
res.type('application/activity+json; charset=utf-8') res.type('application/activity+json; charset=utf-8')
if (!page) { if (!page) {
debug('Without pagination ')
return res.json({ return res.json({
'@context': 'https://www.w3.org/ns/activitystreams', '@context': ['https://www.w3.org/ns/activitystreams'],
id: `${config.baseurl}/federation/u/${name}/outbox`, id: `${config.baseurl}/federation/u/${name}/outbox`,
type: 'OrderedCollection', type: 'OrderedCollection',
totalItems: user.events.length, totalItems: user.events.length,
@@ -102,20 +109,22 @@ module.exports = {
debug('With pagination %s', page) debug('With pagination %s', page)
return res.json({ return res.json({
'@context': 'https://www.w3.org/ns/activitystreams', '@context': ['https://www.w3.org/ns/activitystreams', { Hashtag: 'as:Hashtag' }],
id: `${config.baseurl}/federation/u/${name}/outbox?page=${page}`, id: `${config.baseurl}/federation/u/${name}/outbox?page=${page}`,
type: 'OrderedCollectionPage', type: 'OrderedCollectionPage',
totalItems: user.events.length, totalItems: user.events.length,
partOf: `${config.baseurl}/federation/u/${name}/outbox`, partOf: `${config.baseurl}/federation/u/${name}/outbox`,
orderedItems: user.events.map(e => ({ orderedItems: user.events.map(e => ({
id: `${config.baseurl}/federation/m/${e.id}#create`, ...e.toAP(user.username), actor: `${config.baseurl}/federation/u/${user.username}`}))
type: 'Create', // user.events.map(e => ({
to: ['https://www.w3.org/ns/activitystreams#Public'], // id: `${config.baseurl}/federation/m/${e.id}#create`,
cc: [`${config.baseurl}/federation/u/${user.username}/followers`], // type: 'Create',
published: e.createdAt, // to: ['https://www.w3.org/ns/activitystreams#Public'],
actor: `${config.baseurl}/federation/u/${user.username}`, // cc: [`${config.baseurl}/federation/u/${user.username}/followers`],
object: e.toAP(user.username) // published: e.createdAt,
})) // actor: `${config.baseurl}/federation/u/${user.username}`,
// object: e.toAP(user.username)
// }))
}) })
} }
} }