From 8fc0da7474a873364c8314b66a9c36a74e50dac9 Mon Sep 17 00:00:00 2001 From: lesion Date: Thu, 11 Nov 2021 16:55:11 +0100 Subject: [PATCH] /event redirect to AP repr when accept application/json --- server/api/controller/event.js | 21 ++++++++++++++++++--- server/helpers.js | 15 ++++++++++++++- server/routes.js | 5 +++-- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/server/api/controller/event.js b/server/api/controller/event.js index b7153c56..3d257b99 100644 --- a/server/api/controller/event.js +++ b/server/api/controller/event.js @@ -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 { diff --git a/server/helpers.js b/server/helpers.js index 5d72055d..8b7fbb86 100644 --- a/server/helpers.js +++ b/server/helpers.js @@ -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() } - } diff --git a/server/routes.js b/server/routes.js index 9de0a57f..e749044d 100644 --- a/server/routes.js +++ b/server/routes.js @@ -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)