You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.2 KiB

const Middleware = require('libflitter/middleware/Middleware')
/*
* PageRoute Middleware
* -------------------------------------------------------------
* Put some description here!
*/
class PageRoute extends Middleware {
static get services() {
return [...super.services, 'models']
}
/*
* Run the middleware test.
* This method is required by all Flitter middleware.
* It should either call the next function in the stack,
* or it should handle the response accordingly.
*/
async test(req, res, next, args = {}){
const Page = this.models.get('api:Page')
const PageId = req.form.PageId ? req.form.PageId : req.params.PageId
if ( !PageId ) return res.status(400).message(`Missing PageId.`).api({})
const level = args.level ? args.level : 'view'
const page = await Page.findOne({UUID: PageId})
if ( !page ) return res.status(404).message(`Unable to find page with that id.`).api({})
if ( !(await page.is_accessible_by(req.user, level)) ) return req.security.deny()
if ( !req.form ) req.form = {}
req.form.page = page
/*
* Call the next function in the stack.
*/
next()
}
}
module.exports = exports = PageRoute