refactor: project cleanup + onboarding page
This commit is contained in:
@@ -34,7 +34,7 @@ const bruteforce = new ExpressBrute(EBstore, {
|
||||
* Login form
|
||||
*/
|
||||
router.get('/login', function (req, res, next) {
|
||||
res.render('pages/login')
|
||||
res.render('main/login')
|
||||
})
|
||||
|
||||
router.post('/login', bruteforce.prevent, function (req, res, next) {
|
||||
|
@@ -1,316 +1,11 @@
|
||||
'use strict'
|
||||
|
||||
/* global entries, git, lang, winston */
|
||||
|
||||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const _ = require('lodash')
|
||||
|
||||
const entryHelper = require('../helpers/entry')
|
||||
|
||||
// ==========================================
|
||||
// EDIT MODE
|
||||
// ==========================================
|
||||
|
||||
/**
|
||||
* Edit document in Markdown
|
||||
*/
|
||||
router.get('/edit/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.render('error-forbidden')
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/edit', ''))
|
||||
|
||||
entries.fetchOriginal(safePath, {
|
||||
parseMarkdown: false,
|
||||
parseMeta: true,
|
||||
parseTree: false,
|
||||
includeMarkdown: true,
|
||||
includeParentInfo: false,
|
||||
cache: false
|
||||
}).then((pageData) => {
|
||||
if (pageData) {
|
||||
res.render('pages/edit', { pageData })
|
||||
} else {
|
||||
throw new Error(lang.t('errors:invalidpath'))
|
||||
}
|
||||
return true
|
||||
}).catch((err) => {
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
router.put('/edit/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: lang.t('errors:forbidden')
|
||||
})
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/edit', ''))
|
||||
|
||||
entries.update(safePath, req.body.markdown, req.user).then(() => {
|
||||
return res.json({
|
||||
ok: true
|
||||
}) || true
|
||||
}).catch((err) => {
|
||||
res.json({
|
||||
ok: false,
|
||||
error: err.message
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
// ==========================================
|
||||
// CREATE MODE
|
||||
// ==========================================
|
||||
|
||||
router.get('/create/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.render('error-forbidden')
|
||||
}
|
||||
|
||||
if (_.some(['create', 'edit', 'account', 'source', 'history', 'mk', 'all'], (e) => { return _.startsWith(req.path, '/create/' + e) })) {
|
||||
return res.render('error', {
|
||||
message: lang.t('errors:reservedname'),
|
||||
error: {}
|
||||
})
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/create', ''))
|
||||
|
||||
entries.exists(safePath).then((docExists) => {
|
||||
if (!docExists) {
|
||||
return entries.getStarter(safePath).then((contents) => {
|
||||
let pageData = {
|
||||
markdown: contents,
|
||||
meta: {
|
||||
title: _.startCase(safePath),
|
||||
path: safePath
|
||||
}
|
||||
}
|
||||
res.render('pages/create', { pageData })
|
||||
|
||||
return true
|
||||
}).catch((err) => {
|
||||
winston.warn(err)
|
||||
throw new Error(lang.t('errors:starterfailed'))
|
||||
})
|
||||
} else {
|
||||
throw new Error(lang.t('errors:alreadyexists'))
|
||||
}
|
||||
}).catch((err) => {
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
router.put('/create/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: lang.t('errors:forbidden')
|
||||
})
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/create', ''))
|
||||
|
||||
entries.create(safePath, req.body.markdown, req.user).then(() => {
|
||||
return res.json({
|
||||
ok: true
|
||||
}) || true
|
||||
}).catch((err) => {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: err.message
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
// ==========================================
|
||||
// LIST ALL PAGES
|
||||
// ==========================================
|
||||
|
||||
/**
|
||||
* View tree view of all pages
|
||||
*/
|
||||
router.use((req, res, next) => {
|
||||
if (_.endsWith(req.url, '/all')) {
|
||||
res.render('pages/all')
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
// ==========================================
|
||||
// VIEW MODE
|
||||
// ==========================================
|
||||
|
||||
/**
|
||||
* View source of a document
|
||||
*/
|
||||
router.get('/source/*', (req, res, next) => {
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/source', ''))
|
||||
|
||||
entries.fetchOriginal(safePath, {
|
||||
parseMarkdown: false,
|
||||
parseMeta: true,
|
||||
parseTree: false,
|
||||
includeMarkdown: true,
|
||||
includeParentInfo: false,
|
||||
cache: false
|
||||
}).then((pageData) => {
|
||||
if (pageData) {
|
||||
res.render('pages/source', { pageData })
|
||||
} else {
|
||||
throw new Error(lang.t('errors:invalidpath'))
|
||||
}
|
||||
return true
|
||||
}).catch((err) => {
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* View history of a document
|
||||
*/
|
||||
router.get('/hist/*', (req, res, next) => {
|
||||
let safePath = entryHelper.parsePath(_.replace(req.path, '/hist', ''))
|
||||
|
||||
entries.getHistory(safePath).then((pageData) => {
|
||||
if (pageData) {
|
||||
res.render('pages/history', { pageData })
|
||||
} else {
|
||||
throw new Error(lang.t('errors:invalidpath'))
|
||||
}
|
||||
return true
|
||||
}).catch((err) => {
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* View history of a document
|
||||
*/
|
||||
router.post('/hist', (req, res, next) => {
|
||||
let commit = req.body.commit
|
||||
let safePath = entryHelper.parsePath(req.body.path)
|
||||
|
||||
if (!/^[a-f0-9]{40}$/.test(commit)) {
|
||||
return res.status(400).json({ ok: false, error: 'Invalid commit' })
|
||||
}
|
||||
|
||||
git.getHistoryDiff(safePath, commit).then((diff) => {
|
||||
res.json({ ok: true, diff })
|
||||
return true
|
||||
}).catch((err) => {
|
||||
res.status(500).json({ ok: false, error: err.message })
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* View document
|
||||
*/
|
||||
router.get('/*', (req, res, next) => {
|
||||
let safePath = entryHelper.parsePath(req.path)
|
||||
|
||||
entries.fetch(safePath).then((pageData) => {
|
||||
if (pageData) {
|
||||
res.render('pages/view', { pageData })
|
||||
} else {
|
||||
res.render('error-notexist', {
|
||||
newpath: safePath
|
||||
})
|
||||
}
|
||||
return true
|
||||
}).error((err) => {
|
||||
if (safePath === 'home') {
|
||||
res.render('pages/welcome')
|
||||
} else {
|
||||
res.render('error-notexist', {
|
||||
message: err.message,
|
||||
newpath: safePath
|
||||
})
|
||||
}
|
||||
return true
|
||||
}).catch((err) => {
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* Move document
|
||||
*/
|
||||
router.put('/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: lang.t('errors:forbidden')
|
||||
})
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(req.path)
|
||||
|
||||
if (_.isEmpty(req.body.move)) {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: lang.t('errors:invalidaction')
|
||||
})
|
||||
}
|
||||
|
||||
let safeNewPath = entryHelper.parsePath(req.body.move)
|
||||
|
||||
entries.move(safePath, safeNewPath, req.user).then(() => {
|
||||
res.json({
|
||||
ok: true
|
||||
})
|
||||
}).catch((err) => {
|
||||
res.json({
|
||||
ok: false,
|
||||
error: err.message
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* Delete document
|
||||
*/
|
||||
router.delete('/*', (req, res, next) => {
|
||||
if (!res.locals.rights.write) {
|
||||
return res.json({
|
||||
ok: false,
|
||||
error: lang.t('errors:forbidden')
|
||||
})
|
||||
}
|
||||
|
||||
let safePath = entryHelper.parsePath(req.path)
|
||||
|
||||
entries.remove(safePath, req.user).then(() => {
|
||||
res.json({
|
||||
ok: true
|
||||
})
|
||||
}).catch((err) => {
|
||||
res.json({
|
||||
ok: false,
|
||||
error: err.message
|
||||
})
|
||||
})
|
||||
res.render('main/welcome')
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
|
Reference in New Issue
Block a user