gancio/server/federation/index.js

63 lines
2 KiB
JavaScript
Raw Normal View History

2019-07-29 01:27:47 +02:00
const express = require('express')
const router = express.Router()
2019-07-30 18:32:26 +02:00
const cors = require('cors')
const Users = require('./users')
2020-06-27 02:10:10 +02:00
const Event = require('../api/models/event')
const User = require('../api/models/user')
const Tag = require('../api/models/tag')
const Place = require('../api/models/place')
2019-09-25 14:38:16 +02:00
const settingsController = require('../api/controller/settings')
2019-08-02 13:43:28 +02:00
const Helpers = require('./helpers')
2021-03-05 14:19:52 +01:00
const Inbox = require('./inbox')
const log = require('../log')
2019-07-30 18:32:26 +02:00
/**
* Federation is calling!
* ref: https://www.w3.org/TR/activitypub/#Overview
*/
router.use(cors())
2019-10-28 17:33:20 +01:00
// is federation enabled? middleware
2019-09-25 14:38:16 +02:00
router.use((req, res, next) => {
2019-10-28 17:33:20 +01:00
if (settingsController.settings.enable_federation) { return next() }
2021-03-05 14:19:52 +01:00
log.debug('Federation disabled!')
2019-09-26 00:24:05 +02:00
res.status(401).send('Federation disabled')
next(false)
2019-09-25 14:38:16 +02:00
})
2019-09-11 19:12:24 +02:00
router.use(express.json({ type: ['application/json', 'application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'] }))
2019-08-01 15:18:45 +02:00
router.get('/m/:event_id', async (req, res) => {
2021-03-05 14:19:52 +01:00
log.debug('[AP] Get event details ')
2019-08-01 15:18:45 +02:00
const event_id = req.params.event_id
2019-10-28 17:33:20 +01:00
if (req.accepts('html')) { return res.redirect(301, `/event/${event_id}`) }
2019-08-01 15:18:45 +02:00
2019-12-18 14:44:09 +01:00
const event = await Event.findByPk(req.params.event_id, { include: [User, Tag, Place] })
2019-09-11 19:12:24 +02:00
if (!event) { return res.status(404).send('Not found') }
2021-06-20 23:50:22 +02:00
return res.json(event.toAPNote(settingsController.settings.instance_name, req.settings.locale))
2019-08-01 15:18:45 +02:00
})
2019-07-30 18:32:26 +02:00
// get any message coming from federation
2021-03-05 14:19:52 +01:00
router.post('/u/:name/inbox', Helpers.verifySignature, Inbox)
2019-07-29 01:27:47 +02:00
2020-03-14 18:47:49 +01:00
function redirect_on_html_accepted (req, res, next) {
if (req.accepts('html')) {
return res.redirect(settingsController.settings.baseurl)
}
return next()
}
2019-07-30 18:32:26 +02:00
router.get('/u/:name/outbox', Users.outbox)
router.get('/u/:name/followers', Users.followers)
2020-03-14 18:47:49 +01:00
router.get('/u/:name', redirect_on_html_accepted, Users.get)
2019-07-29 22:40:27 +02:00
2020-01-27 00:47:03 +01:00
// Handle 404
router.use((req, res) => {
2021-03-05 14:19:52 +01:00
log.warn(`404 Page not found: ${req.path}`)
2020-01-27 00:47:03 +01:00
res.status(404).send('404: Page not Found')
})
2019-07-29 23:35:47 +02:00
module.exports = router