/event redirect to AP repr when accept application/json

This commit is contained in:
lesion
2021-11-11 16:55:11 +01:00
parent 82c21b3255
commit 8fc0da7474
3 changed files with 35 additions and 6 deletions

View File

@@ -85,11 +85,26 @@ const eventController = {
res.json(place)
},
async _get(slug) {
// retrocompatibility, old events URL does not use slug, use id as fallback
const id = Number(slug) || -1
return Event.findOne({
where: {
[Op.or]: {
slug,
id
}
}
})
},
async get (req, res) {
const format = req.params.format || 'json'
const is_admin = req.user && req.user.is_admin
const slug = req.params.event_id
const id = Number(req.params.event_id) || -1
const slug = req.params.event_slug
// retrocompatibility, old events URL does not use slug, use id as fallback
const id = Number(slug) || -1
let event
try {
@@ -301,7 +316,7 @@ const eventController = {
focalpoint = [parseFloat(focalpoint[0]).toFixed(2), parseFloat(focalpoint[1]).toFixed(2)]
eventDetails.media = [{
url,
name: body.image_name || '',
name: body.image_name || body.title || '',
focalpoint: [parseFloat(focalpoint[0]), parseFloat(focalpoint[1])]
}]
} else {

View File

@@ -214,7 +214,20 @@ module.exports = {
cursor = cursor.hour(date.hour()).minute(date.minute()).second(0)
log.debug(cursor)
return cursor
},
async APRedirect (req, res, next) {
const accepted = req.accepts('html', 'application/json', 'application/activity+json', 'application/ld+json' )
if (accepted && accepted !== 'html') {
const eventController = require('../server/api/controller/event')
try {
const event = await eventController._get(req.params.slug)
if (event) {
return res.redirect(`/federation/m/${event.id}`)
}
} catch (e) {}
}
next()
}
}

View File

@@ -35,9 +35,10 @@ if (!config.firstrun) {
// rss/ics/atom feed
app.get('/feed/:type', cors(), exportController.export)
// federation api / activitypub / webfinger / nodeinfo
app.use('/.well-known', webfinger)
app.use('/event/:slug', helpers.APRedirect)
// federation api / activitypub / webfinger / nodeinfo
app.use('/federation', federation)
app.use(spamFilter)