refactor res.locals and settings
This commit is contained in:
@@ -2,6 +2,7 @@ const config = require('../config')
|
||||
const Helpers = require('./helpers')
|
||||
const crypto = require('crypto')
|
||||
const log = require('../log')
|
||||
const settingsController = require('../api/controller/settings')
|
||||
|
||||
module.exports = {
|
||||
// follow request from fediverse
|
||||
@@ -9,8 +10,8 @@ module.exports = {
|
||||
const body = req.body
|
||||
if (typeof body.object !== 'string') { return }
|
||||
const username = body.object.replace(`${config.baseurl}/federation/u/`, '')
|
||||
if (username !== req.settings.instance_name) {
|
||||
log.warn(`Following the wrong user: ${username} instead of ${req.settings.instance_name} (could be a wrong config.baseurl)`)
|
||||
if (username !== settingsController.settings.instance_name) {
|
||||
log.warn(`Following the wrong user: ${username} instead of ${settingsController.settings.instance_name} (could be a wrong config.baseurl)`)
|
||||
return res.status(404).send('User not found')
|
||||
}
|
||||
|
||||
@@ -18,7 +19,7 @@ module.exports = {
|
||||
// if (!user.followers.includes(body.actor)) {
|
||||
// await user.addFollowers([req.fedi_user.id])
|
||||
// await user.update({ followers: [...user.followers, body.actor] })
|
||||
await req.fedi_user.update({ follower: true })
|
||||
await res.locals.fedi_user.update({ follower: true })
|
||||
log.info(`Followed by ${body.actor}`)
|
||||
const guid = crypto.randomBytes(16).toString('hex')
|
||||
const message = {
|
||||
@@ -28,7 +29,7 @@ module.exports = {
|
||||
actor: `${config.baseurl}/federation/u/${username}`,
|
||||
object: body
|
||||
}
|
||||
Helpers.signAndSend(JSON.stringify(message), req.fedi_user.object.inbox)
|
||||
Helpers.signAndSend(JSON.stringify(message), res.locals.fedi_user.object.inbox)
|
||||
res.sendStatus(200)
|
||||
},
|
||||
|
||||
@@ -36,16 +37,16 @@ module.exports = {
|
||||
async unfollow (req, res) {
|
||||
const body = req.body
|
||||
const username = body.object.object.replace(`${config.baseurl}/federation/u/`, '')
|
||||
if (username !== req.settings.instance_name) {
|
||||
log.warn(`Unfollowing wrong user: ${username} instead of ${req.settings.instance_name}`)
|
||||
if (username !== settingsController.settings.instance_name) {
|
||||
log.warn(`Unfollowing wrong user: ${username} instead of ${settingsController.settings.instance_name}`)
|
||||
return res.status(404).send('User not found')
|
||||
}
|
||||
|
||||
if (body.actor !== body.object.actor || body.actor !== req.fedi_user.ap_id) {
|
||||
if (body.actor !== body.object.actor || body.actor !== res.locals.fedi_user.ap_id) {
|
||||
log.info('Unfollow an user created by a different actor !?!?')
|
||||
return res.status(400).send('Bad things')
|
||||
}
|
||||
await req.fedi_user.update({ follower: false })
|
||||
await res.locals.fedi_user.update({ follower: false })
|
||||
log.info(`Unfollowed by ${body.actor}`)
|
||||
res.sendStatus(200)
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ const Helpers = {
|
||||
return res.status(401).send('User blocked')
|
||||
}
|
||||
|
||||
req.fedi_user = user
|
||||
res.locals.fedi_user = user
|
||||
|
||||
// TODO: check Digest // cannot do this with json bodyparser
|
||||
// const digest = crypto.createHash('sha256')
|
||||
|
||||
@@ -6,6 +6,7 @@ const Event = require('../api/models/event')
|
||||
const User = require('../api/models/user')
|
||||
const Tag = require('../api/models/tag')
|
||||
const Place = require('../api/models/place')
|
||||
const settingsController = require('../api/controller/settings')
|
||||
|
||||
const Helpers = require('./helpers')
|
||||
const Inbox = require('./inbox')
|
||||
@@ -20,7 +21,6 @@ router.use(cors())
|
||||
|
||||
// is federation enabled? middleware
|
||||
router.use((req, res, next) => {
|
||||
const settingsController = require('../api/controller/settings')
|
||||
if (settingsController.settings.enable_federation) { return next() }
|
||||
log.debug('Federation disabled!')
|
||||
return res.status(401).send('Federation disabled')
|
||||
@@ -36,7 +36,7 @@ router.get('/m/:event_id', async (req, res) => {
|
||||
|
||||
const event = await Event.findByPk(req.params.event_id, { include: [User, Tag, Place] })
|
||||
if (!event) { return res.status(404).send('Not found') }
|
||||
return res.json(event.toAP(settingsController.settings.instance_name, req.settings.instance_locale))
|
||||
return res.json(event.toAP(settingsController.settings.instance_name, settingsController.settings.instance_locale))
|
||||
})
|
||||
|
||||
// get any message coming from federation
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const Event = require('../api/models/event')
|
||||
const Resource = require('../api/models/resource')
|
||||
const APUser = require('../api/models/ap_user')
|
||||
const settingsController = require('../api/controller/settings')
|
||||
|
||||
const log = require('../log')
|
||||
const helpers = require('../helpers')
|
||||
@@ -10,7 +11,7 @@ module.exports = {
|
||||
|
||||
// create a resource from AP Note
|
||||
async create (req, res) {
|
||||
if (!req.settings.enable_resources) {
|
||||
if (!settingsController.settings.enable_resources) {
|
||||
log.info('Ignore resource as it is disabled in settings')
|
||||
return
|
||||
}
|
||||
@@ -67,7 +68,7 @@ module.exports = {
|
||||
}
|
||||
// check if fedi_user that requested resource removal
|
||||
// is the same that created the resource at first place
|
||||
if (req.fedi_user.ap_id === resource.ap_user.ap_id) {
|
||||
if (res.locals.fedi_user.ap_id === resource.ap_user.ap_id) {
|
||||
await resource.destroy()
|
||||
log.info(`Comment ${req.body.object.id} removed`)
|
||||
res.sendStatus(201)
|
||||
|
||||
@@ -7,16 +7,18 @@ const config = require('../config')
|
||||
const log = require('../log')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const dayjs = require('dayjs')
|
||||
const settingsController = require('../api/controller/settings')
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
get (req, res) {
|
||||
log.debug('Get actor')
|
||||
if (req.accepts('html')) { return res.redirect(301, '/') }
|
||||
const settings = settingsController.settings
|
||||
const name = req.params.name
|
||||
if (!name) { return res.status(400).send('Bad request.') }
|
||||
|
||||
if (name !== req.settings.instance_name) { return res.status(404).send(`No record found for ${escape(name)}`) }
|
||||
if (name !== settings.instance_name) { return res.status(404).send(`No record found for ${escape(name)}`) }
|
||||
const ret = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
@@ -50,7 +52,7 @@ module.exports = {
|
||||
publicKey: {
|
||||
id: `${config.baseurl}/federation/u/${name}#main-key`,
|
||||
owner: `${config.baseurl}/federation/u/${name}`,
|
||||
publicKeyPem: req.settings.publicKey
|
||||
publicKeyPem: settings.publicKey
|
||||
}
|
||||
}
|
||||
res.type('application/activity+json; charset=utf-8')
|
||||
@@ -62,7 +64,7 @@ module.exports = {
|
||||
const page = req.query.page
|
||||
log.debug(`Retrieve ${name} followers`)
|
||||
if (!name) { return res.status(400).send('Bad request.') }
|
||||
if (name !== req.settings.instance_name) {
|
||||
if (name !== settings.instance_name) {
|
||||
log.warn('No record found')
|
||||
return res.status(404).send(`No record found for ${escape(name)}`)
|
||||
}
|
||||
@@ -95,12 +97,13 @@ module.exports = {
|
||||
async outbox (req, res) {
|
||||
const name = req.params.name
|
||||
const page = req.query.page
|
||||
const settings = settingsController.settings
|
||||
|
||||
if (!name) {
|
||||
log.info('[AP] Bad /outbox request')
|
||||
return res.status(400).send('Bad request.')
|
||||
}
|
||||
if (name !== req.settings.instance_name) {
|
||||
if (name !== settings.instance_name) {
|
||||
log.info(`No record found for ${name}`)
|
||||
return res.status(404).send(`No record found for ${escape(name)}`)
|
||||
}
|
||||
@@ -132,7 +135,7 @@ module.exports = {
|
||||
cc: [`${config.baseurl}/federation/u/${name}/followers`],
|
||||
published: dayjs(e.createdAt).utc().format(),
|
||||
actor: `${config.baseurl}/federation/u/${name}`,
|
||||
object: e.toAP(name, req.settings.instance_locale)
|
||||
object: e.toAP(name, settings.instance_locale)
|
||||
}))
|
||||
}
|
||||
})
|
||||
|
||||
@@ -11,9 +11,9 @@ const url = require('url')
|
||||
const log = require('../log')
|
||||
|
||||
router.use(cors())
|
||||
function allowFederation (req,res,next) {
|
||||
function allowFederation (req, res, next) {
|
||||
// is federation enabled ?
|
||||
if (req.settings.enable_federation) {
|
||||
if (settingsController.settings.enable_federation) {
|
||||
return next()
|
||||
}
|
||||
log.debug('Federation disabled')
|
||||
@@ -21,19 +21,20 @@ function allowFederation (req,res,next) {
|
||||
}
|
||||
|
||||
router.get('/webfinger', allowFederation, (req, res) => {
|
||||
const settings = settingsController.settings
|
||||
if (!req.query || !req.query.resource || !req.query.resource.includes('acct:')) {
|
||||
log.debug('Bad webfinger request => ', req.query && req.query.resource)
|
||||
return res.status(400).send('Bad request. Please make sure "acct:USER@DOMAIN" is what you are sending as the "resource" query parameter.')
|
||||
}
|
||||
|
||||
const resource = req.query.resource
|
||||
const domain = (new url.URL(req.settings.baseurl)).host
|
||||
const domain = (new url.URL(settings.baseurl)).host
|
||||
const [, name, req_domain] = resource.match(/acct:(.*)@(.*)/)
|
||||
if (domain !== req_domain) {
|
||||
log.warn(`Bad webfinger request, requested domain "${req_domain}" instead of "${domain}"`)
|
||||
return res.status(400).send('Bad request. Please make sure "acct:USER@DOMAIN" is what you are sending as the "resource" query parameter.')
|
||||
}
|
||||
if (name !== req.settings.instance_name) {
|
||||
if (name !== settings.instance_name) {
|
||||
log.warn(`User not found: ${name}`)
|
||||
return res.status(404).send(`No record found for ${name}`)
|
||||
}
|
||||
@@ -45,7 +46,7 @@ router.get('/webfinger', allowFederation, (req, res) => {
|
||||
{
|
||||
rel: 'self',
|
||||
type: 'application/activity+json',
|
||||
href: `${req.settings.baseurl}/federation/u/${name}`
|
||||
href: `${settings.baseurl}/federation/u/${name}`
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -54,17 +55,19 @@ router.get('/webfinger', allowFederation, (req, res) => {
|
||||
})
|
||||
|
||||
router.get('/nodeinfo/:nodeinfo_version', async (req, res) => {
|
||||
const settings = settingsController.settings
|
||||
|
||||
const usersCount = (await User.findAndCountAll()).count
|
||||
const eventsCount = (await Event.findAndCountAll()).count
|
||||
const resourcesCount = (await Resource.findAndCountAll()).count
|
||||
|
||||
const ret = {
|
||||
metadata: {
|
||||
nodeDescription: req.settings.description,
|
||||
nodeName: req.settings.title,
|
||||
nodeLabel: req.settings.instance_place
|
||||
nodeDescription: settings.description,
|
||||
nodeName: settings.title,
|
||||
nodeLabel: settings.instance_place
|
||||
},
|
||||
openRegistrations: settingsController.settings.allow_registration,
|
||||
openRegistrations: settings.allow_registration,
|
||||
protocols: ['activitypub'],
|
||||
services: { inbound: [], outbound: ['rss2.0'] },
|
||||
software: {
|
||||
@@ -88,6 +91,8 @@ router.get('/nodeinfo/:nodeinfo_version', async (req, res) => {
|
||||
})
|
||||
|
||||
router.get('/x-nodeinfo2', async (req, res) => {
|
||||
const settings = settingsController.settings
|
||||
|
||||
const usersCount = (await User.findAndCountAll()).count
|
||||
const eventsCount = (await Event.findAndCountAll()).count
|
||||
const resourcesCount = (await Resource.findAndCountAll()).count
|
||||
@@ -95,8 +100,8 @@ router.get('/x-nodeinfo2', async (req, res) => {
|
||||
const ret = {
|
||||
version: '1.0',
|
||||
server: {
|
||||
baseUrl: req.settings.baseurl,
|
||||
name: req.settings.title,
|
||||
baseUrl: settings.baseurl,
|
||||
name: settings.title,
|
||||
software: 'Gancio',
|
||||
version
|
||||
},
|
||||
@@ -114,21 +119,25 @@ router.get('/x-nodeinfo2', async (req, res) => {
|
||||
})
|
||||
|
||||
router.get('/nodeinfo', (req, res) => {
|
||||
const settings = settingsController.settings
|
||||
|
||||
const ret = {
|
||||
links: [
|
||||
{ href: `${req.settings.baseurl}/.well-known/nodeinfo/2.0`, rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0' },
|
||||
{ href: `${req.settings.baseurl}/.well-known/nodeinfo/2.1`, rel: 'http://nodeinfo.diaspora.software/ns/schema/2.1' }
|
||||
{ href: `${settings.baseurl}/.well-known/nodeinfo/2.0`, rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0' },
|
||||
{ href: `${settings.baseurl}/.well-known/nodeinfo/2.1`, rel: 'http://nodeinfo.diaspora.software/ns/schema/2.1' }
|
||||
]
|
||||
}
|
||||
res.json(ret)
|
||||
})
|
||||
|
||||
router.use('/host-meta', (req, res) => {
|
||||
const settings = settingsController.settings
|
||||
|
||||
log.debug('host-meta')
|
||||
res.type('application/xml')
|
||||
res.send(`<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
||||
<Link rel="lrdd" type="application/xrd+xml" template="${req.settings.baseurl}/.well-known/webfinger?resource={uri}"/>
|
||||
<Link rel="lrdd" type="application/xrd+xml" template="${settings.baseurl}/.well-known/webfinger?resource={uri}"/>
|
||||
</XRD>`)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user