experimenting with AP
This commit is contained in:
@@ -4,10 +4,14 @@ const APUser = require('../api/models/ap_user')
|
|||||||
const Tag = require('../api/models/tag')
|
const Tag = require('../api/models/tag')
|
||||||
|
|
||||||
const config = require('config')
|
const config = require('config')
|
||||||
const debug = require('debug')('fediverse:user')
|
const log = require('../log')
|
||||||
|
const utc = require('dayjs/plugin/utc')
|
||||||
|
const dayjs = require('dayjs')
|
||||||
|
dayjs.extend(utc)
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
get (req, res) {
|
get (req, res) {
|
||||||
|
log.debug('Get actor')
|
||||||
if (req.accepts('html')) { return res.redirect(301, '/') }
|
if (req.accepts('html')) { return res.redirect(301, '/') }
|
||||||
const name = req.params.name
|
const name = req.params.name
|
||||||
if (!name) { return res.status(400).send('Bad request.') }
|
if (!name) { return res.status(400).send('Bad request.') }
|
||||||
@@ -54,12 +58,12 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async followers (req, res) {
|
async followers (req, res) {
|
||||||
// TODO
|
|
||||||
const name = req.params.name
|
const name = req.params.name
|
||||||
const page = req.query.page
|
const page = req.query.page
|
||||||
debug('Retrieve %s followers', name)
|
log.debug(`Retrieve ${name} followers`)
|
||||||
if (!name) { return res.status(400).send('Bad request.') }
|
if (!name) { return res.status(400).send('Bad request.') }
|
||||||
if (name !== req.settings.instance_name) {
|
if (name !== req.settings.instance_name) {
|
||||||
|
log.warn('No record found')
|
||||||
return res.status(404).send(`No record found for ${name}`)
|
return res.status(404).send(`No record found for ${name}`)
|
||||||
}
|
}
|
||||||
const followers = await APUser.findAll({ where: { follower: true } })
|
const followers = await APUser.findAll({ where: { follower: true } })
|
||||||
@@ -67,15 +71,15 @@ module.exports = {
|
|||||||
res.type('application/activity+json; charset=utf-8')
|
res.type('application/activity+json; charset=utf-8')
|
||||||
|
|
||||||
if (!page) {
|
if (!page) {
|
||||||
debug('No pagination')
|
log.debug('No 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}/followers`,
|
id: `${config.baseurl}/federation/u/${name}/followers`,
|
||||||
type: 'OrderedCollection',
|
type: 'OrderedCollection',
|
||||||
totalItems: followers.length,
|
totalItems: 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: followers.map(f => f.ap_id)
|
// orderedItems: followers.map(f => f.ap_id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return res.json({
|
return res.json({
|
||||||
@@ -83,59 +87,81 @@ module.exports = {
|
|||||||
id: `${config.baseurl}/federation/u/${name}/followers?page=${page}`,
|
id: `${config.baseurl}/federation/u/${name}/followers?page=${page}`,
|
||||||
type: 'OrderedCollectionPage',
|
type: 'OrderedCollectionPage',
|
||||||
totalItems: followers.length,
|
totalItems: followers.length,
|
||||||
// partOf: `${config.baseurl}/federation/u/${name}/followers`,
|
partOf: `${config.baseurl}/federation/u/${name}/followers`,
|
||||||
orderedItems: followers.map(f => f.ap_id)
|
orderedItems: followers.map(f => f.ap_id)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
async outbox (req, res) {
|
async outbox (req, res) {
|
||||||
// TODO
|
|
||||||
const name = req.params.name
|
const name = req.params.name
|
||||||
// const page = req.query.page
|
const page = req.query.page
|
||||||
|
|
||||||
if (!name) { return res.status(400).send('Bad request.') }
|
if (!name) {
|
||||||
if (name !== req.settings.instance_name) { return res.status(404).send(`No record found for ${name}`) }
|
log.info('[AP] Bad /outbox request')
|
||||||
|
return res.status(400).send('Bad request.')
|
||||||
|
}
|
||||||
|
if (name !== req.settings.instance_name) {
|
||||||
|
log.info(`No record found for ${name}`)
|
||||||
|
return res.status(404).send(`No record found for ${name}`)
|
||||||
|
}
|
||||||
|
|
||||||
const events = await Event.findAll({ include: [{ model: Tag, required: false }, Place] })
|
const events = await Event.findAll({ include: [{ model: Tag, required: false }, Place] })
|
||||||
|
log.debug(`${config.baseurl} Inside ${name} outbox, should return all events from this instance: ${events.length}`)
|
||||||
debug('Inside outbox, should return all events from this user -> ', events.length)
|
|
||||||
|
|
||||||
// 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) {
|
||||||
// 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: events.length,
|
totalItems: events.length,
|
||||||
// first: `${config.baseurl}/federation/u/${name}/outbox?page=true`,
|
first: {
|
||||||
// last: `${config.baseurl}/federation/u/${name}/outbox?page=true`
|
id: `${config.baseurl}/federation/u/${name}/outbox?page=true`,
|
||||||
// })
|
type: 'OrderedCollectionPage',
|
||||||
// }
|
// totalItems: events.length,
|
||||||
|
partOf: `${config.baseurl}/federation/u/${name}/outbox`,
|
||||||
// debug('With pagination %s', page)
|
// prev: `${config.baseurl}/federation/u/${name}/outbox`,
|
||||||
return res.json({
|
// next: page !== 'last' && `${config.baseurl}/federation/u/${name}/outbox?page=last`,
|
||||||
'@context': [
|
orderedItems: page === 'last'
|
||||||
'https://www.w3.org/ns/activitystreams',
|
? []
|
||||||
'https://w3id.org/security/v1',
|
: events.map(e => ({
|
||||||
{
|
id: `${config.baseurl}/federation/m/${e.id}#create`,
|
||||||
hashtag: 'as:Hashtag'
|
type: 'Create',
|
||||||
|
to: ['https://www.w3.org/ns/activitystreams#Public'],
|
||||||
|
cc: [`${config.baseurl}/federation/u/${name}/followers`],
|
||||||
|
published: dayjs(e.createdAt).utc().format(),
|
||||||
|
actor: `${config.baseurl}/federation/u/${name}`,
|
||||||
|
object: e.toAPNote(name, req.settings.locale)
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
],
|
})
|
||||||
id: `${config.baseurl}/federation/u/${name}/outbox`,
|
}
|
||||||
type: 'OrderedCollectionPage',
|
|
||||||
totalItems: events.length,
|
|
||||||
// partOf: `${config.baseurl}/federation/u/${name}/outbox`,
|
|
||||||
orderedItems:
|
|
||||||
events.map(e => ({
|
|
||||||
id: `${config.baseurl}/federation/m/${e.id}#create`,
|
|
||||||
type: 'Create',
|
|
||||||
to: ['https://www.w3.org/ns/activitystreams#Public'],
|
|
||||||
cc: [`${config.baseurl}/federation/u/${name}/followers`],
|
|
||||||
published: e.createdAt,
|
|
||||||
actor: `${config.baseurl}/federation/u/${name}`,
|
|
||||||
object: e.toAPNote(name, req.settings.locale)
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// log.debug(`With pagination ${page}`)
|
||||||
|
// return res.json({
|
||||||
|
// '@context': [
|
||||||
|
// 'https://www.w3.org/ns/activitystreams'
|
||||||
|
// ],
|
||||||
|
// id: `${config.baseurl}/federation/u/${name}/outbox?page=true`,
|
||||||
|
// type: 'OrderedCollectionPage',
|
||||||
|
// // totalItems: events.length,
|
||||||
|
// partOf: `${config.baseurl}/federation/u/${name}/outbox`,
|
||||||
|
// // prev: `${config.baseurl}/federation/u/${name}/outbox`,
|
||||||
|
// next: page !== 'last' && `${config.baseurl}/federation/u/${name}/outbox?page=last`,
|
||||||
|
// orderedItems: page === 'last'
|
||||||
|
// ? []
|
||||||
|
// : events.map(e => ({
|
||||||
|
// id: `${config.baseurl}/federation/m/${e.id}#create`,
|
||||||
|
// type: 'Create',
|
||||||
|
// to: ['https://www.w3.org/ns/activitystreams#Public'],
|
||||||
|
// cc: [`${config.baseurl}/federation/u/${name}/followers`],
|
||||||
|
// published: dayjs(e.createdAt).utc().format(),
|
||||||
|
// actor: `${config.baseurl}/federation/u/${name}`,
|
||||||
|
// object: e.toAPNote(name, req.settings.locale)
|
||||||
|
// }))
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|||||||
Reference in New Issue
Block a user