feat: page published state + comments localization
This commit is contained in:
@@ -3,37 +3,12 @@ const router = express.Router()
|
||||
const pageHelper = require('../helpers/page')
|
||||
const _ = require('lodash')
|
||||
const CleanCSS = require('clean-css')
|
||||
const moment = require('moment')
|
||||
|
||||
/* global WIKI */
|
||||
|
||||
const tmplCreateRegex = /^[0-9]+(,[0-9]+)?$/
|
||||
|
||||
const getPageEffectivePermissions = (req, page) => {
|
||||
return {
|
||||
comments: {
|
||||
read: WIKI.config.features.featurePageComments ? WIKI.auth.checkAccess(req.user, ['read:comments'], page) : false,
|
||||
write: WIKI.config.features.featurePageComments ? WIKI.auth.checkAccess(req.user, ['write:comments'], page) : false,
|
||||
manage: WIKI.config.features.featurePageComments ? WIKI.auth.checkAccess(req.user, ['manage:comments'], page) : false
|
||||
},
|
||||
history: {
|
||||
read: WIKI.auth.checkAccess(req.user, ['read:history'], page)
|
||||
},
|
||||
source: {
|
||||
read: WIKI.auth.checkAccess(req.user, ['read:source'], page)
|
||||
},
|
||||
pages: {
|
||||
write: WIKI.auth.checkAccess(req.user, ['write:pages'], page),
|
||||
manage: WIKI.auth.checkAccess(req.user, ['manage:pages'], page),
|
||||
delete: WIKI.auth.checkAccess(req.user, ['delete:pages'], page),
|
||||
script: WIKI.auth.checkAccess(req.user, ['write:scripts'], page),
|
||||
style: WIKI.auth.checkAccess(req.user, ['write:styles'], page)
|
||||
},
|
||||
system: {
|
||||
manage: WIKI.auth.checkAccess(req.user, ['manage:system'], page)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Robots.txt
|
||||
*/
|
||||
@@ -137,6 +112,9 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
|
||||
pageArgs.tags = _.get(page, 'tags', [])
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = WIKI.auth.getEffectivePermissions(req, pageArgs)
|
||||
|
||||
const injectCode = {
|
||||
css: WIKI.config.theming.injectCSS,
|
||||
head: WIKI.config.theming.injectHead,
|
||||
@@ -145,7 +123,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
|
||||
if (page) {
|
||||
// -> EDIT MODE
|
||||
if (!WIKI.auth.checkAccess(req.user, ['write:pages', 'manage:pages'], pageArgs)) {
|
||||
if (!(effectivePermissions.pages.write || effectivePermissions.pages.manage)) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.render('unauthorized', { action: 'edit' })
|
||||
}
|
||||
@@ -166,7 +144,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
page.content = Buffer.from(page.content).toString('base64')
|
||||
} else {
|
||||
// -> CREATE MODE
|
||||
if (!WIKI.auth.checkAccess(req.user, ['write:pages'], pageArgs)) {
|
||||
if (!effectivePermissions.pages.write) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.render('unauthorized', { action: 'create' })
|
||||
}
|
||||
@@ -229,9 +207,6 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
}
|
||||
}
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = getPageEffectivePermissions(req, pageArgs)
|
||||
|
||||
res.render('editor', { page, injectCode, effectivePermissions })
|
||||
})
|
||||
|
||||
@@ -262,7 +237,9 @@ router.get(['/h', '/h/*'], async (req, res, next) => {
|
||||
|
||||
pageArgs.tags = _.get(page, 'tags', [])
|
||||
|
||||
if (!WIKI.auth.checkAccess(req.user, ['read:history'], pageArgs)) {
|
||||
const effectivePermissions = WIKI.auth.getEffectivePermissions(req, pageArgs)
|
||||
|
||||
if (!effectivePermissions.history.read) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.render('unauthorized', { action: 'history' })
|
||||
}
|
||||
@@ -271,9 +248,6 @@ router.get(['/h', '/h/*'], async (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = getPageEffectivePermissions(req, pageArgs)
|
||||
|
||||
res.render('history', { page, effectivePermissions })
|
||||
} else {
|
||||
res.redirect(`/${pageArgs.path}`)
|
||||
@@ -346,16 +320,19 @@ router.get(['/s', '/s/*'], async (req, res, next) => {
|
||||
return res.redirect(`/s/${pageArgs.locale}/${pageArgs.path}`)
|
||||
}
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = WIKI.auth.getEffectivePermissions(req, pageArgs)
|
||||
|
||||
_.set(res, 'locals.siteConfig.lang', pageArgs.locale)
|
||||
_.set(res, 'locals.siteConfig.rtl', req.i18n.dir() === 'rtl')
|
||||
|
||||
if (versionId > 0) {
|
||||
if (!WIKI.auth.checkAccess(req.user, ['read:history'], pageArgs)) {
|
||||
if (!effectivePermissions.history.read) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.render('unauthorized', { action: 'sourceVersion' })
|
||||
}
|
||||
} else {
|
||||
if (!WIKI.auth.checkAccess(req.user, ['read:source'], pageArgs)) {
|
||||
if (!effectivePermissions.source.read) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.render('unauthorized', { action: 'source' })
|
||||
}
|
||||
@@ -376,9 +353,6 @@ router.get(['/s', '/s/*'], async (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = getPageEffectivePermissions(req, pageArgs)
|
||||
|
||||
res.render('source', { page, effectivePermissions })
|
||||
}
|
||||
} else {
|
||||
@@ -419,8 +393,11 @@ router.get('/*', async (req, res, next) => {
|
||||
})
|
||||
pageArgs.tags = _.get(page, 'tags', [])
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = WIKI.auth.getEffectivePermissions(req, pageArgs)
|
||||
|
||||
// -> Check User Access
|
||||
if (!WIKI.auth.checkAccess(req.user, ['read:pages'], pageArgs)) {
|
||||
if (!effectivePermissions.pages.read) {
|
||||
if (req.user.id === 2) {
|
||||
res.cookie('loginRedirect', req.path, {
|
||||
maxAge: 15 * 60 * 1000
|
||||
@@ -442,6 +419,21 @@ router.get('/*', async (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
|
||||
// -> Check Publishing State
|
||||
let pageIsPublished = page.isPublished
|
||||
if (pageIsPublished && !_.isEmpty(page.publishStartDate)) {
|
||||
pageIsPublished = moment(page.publishStartDate).isSameOrBefore()
|
||||
}
|
||||
if (pageIsPublished && !_.isEmpty(page.publishEndDate)) {
|
||||
pageIsPublished = moment(page.publishEndDate).isSameOrAfter()
|
||||
}
|
||||
if (!pageIsPublished && !effectivePermissions.pages.write) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
|
||||
return res.status(403).render('unauthorized', {
|
||||
action: 'view'
|
||||
})
|
||||
}
|
||||
|
||||
// -> Build sidebar navigation
|
||||
let sdi = 1
|
||||
const sidebar = (await WIKI.models.navigation.getTree({ cache: true, locale: pageArgs.locale, groups: req.user.groups })).map(n => ({
|
||||
@@ -499,9 +491,6 @@ router.get('/*', async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
// -> Effective Permissions
|
||||
const effectivePermissions = getPageEffectivePermissions(req, pageArgs)
|
||||
|
||||
// -> Render view
|
||||
res.render('page', {
|
||||
page,
|
||||
@@ -516,7 +505,7 @@ router.get('/*', async (req, res, next) => {
|
||||
res.render('welcome', { locale: pageArgs.locale })
|
||||
} else {
|
||||
_.set(res.locals, 'pageMeta.title', 'Page Not Found')
|
||||
if (WIKI.auth.checkAccess(req.user, ['write:pages'], pageArgs)) {
|
||||
if (effectivePermissions.pages.write) {
|
||||
res.status(404).render('new', { path: pageArgs.path, locale: pageArgs.locale })
|
||||
} else {
|
||||
res.status(404).render('notfound', { action: 'view' })
|
||||
|
Reference in New Issue
Block a user