summaryrefslogtreecommitdiff
path: root/lib/web
diff options
context:
space:
mode:
authorDavid Mehren2019-10-27 14:59:44 +0100
committerDavid Mehren2019-10-27 15:23:38 +0100
commitdee62ce571cc3e33f60499e3ed9cfa4cc5c2f0da (patch)
tree91737e438aa868598b8044b8357ecddaee3e2810 /lib/web
parent181d5646cfbde303cf3335c5dea51232d874b0f1 (diff)
Move showNote to note controller
Signed-off-by: David Mehren <dmehren1@gmail.com>
Diffstat (limited to 'lib/web')
-rw-r--r--lib/web/note/controller.js122
-rw-r--r--lib/web/note/router.js2
2 files changed, 19 insertions, 105 deletions
diff --git a/lib/web/note/controller.js b/lib/web/note/controller.js
index d6bbe0e7..726d3577 100644
--- a/lib/web/note/controller.js
+++ b/lib/web/note/controller.js
@@ -8,7 +8,17 @@ const errors = require('../../errors')
const noteUtil = require('./util')
const noteActions = require('./actions')
-
+exports.showNote = function (req, res, next) {
+ noteUtil.findNote(req, res, function (note) {
+ // force to use note id
+ const noteId = req.params.noteId
+ const id = models.Note.encodeNoteId(note.id)
+ if ((note.alias && noteId !== note.alias) || (!note.alias && noteId !== id)) {
+ return res.redirect(config.serverURL + '/' + (note.alias || id))
+ }
+ return responseCodiMD(res, note)
+ })
+}
exports.createFromPOST = function (req, res, next) {
let body = ''
@@ -83,115 +93,19 @@ exports.downloadMarkdown = function (req, res, note) {
res.send(body)
}
-function getInfo (req, res, note) {
+function responseCodiMD (res, note) {
const body = note.content
const extracted = models.Note.extractMeta(body)
- const markdown = extracted.markdown
const meta = models.Note.parseMeta(extracted.meta)
- const createtime = note.createdAt
- const updatetime = note.lastchangeAt
- const title = models.Note.decodeTitle(note.title)
- const data = {
- title: meta.title || title,
- description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null),
- viewcount: note.viewcount,
- createtime: createtime,
- updatetime: updatetime
- }
+ let title = models.Note.decodeTitle(note.title)
+ title = models.Note.generateWebTitle(meta.title || title)
+ const opengraph = models.Note.parseOpengraph(meta, title)
res.set({
- 'Access-Control-Allow-Origin': '*', // allow CORS as API
- 'Access-Control-Allow-Headers': 'Range',
- 'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
'Cache-Control': 'private', // only cache by client
'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
})
- res.send(data)
-}
-
-function createPDF (req, res, note) {
- const url = config.serverURL || 'http://' + req.get('host')
- const body = note.content
- const extracted = models.Note.extractMeta(body)
- let content = extracted.markdown
- const title = models.Note.decodeTitle(note.title)
-
- if (!fs.existsSync(config.tmpPath)) {
- fs.mkdirSync(config.tmpPath)
- }
- const path = config.tmpPath + '/' + Date.now() + '.pdf'
- content = content.replace(/\]\(\//g, '](' + url + '/')
- markdownpdf().from.string(content).to(path, function () {
- if (!fs.existsSync(path)) {
- logger.error('PDF seems to not be generated as expected. File doesn\'t exist: ' + path)
- return errors.errorInternalError(res)
- }
- const stream = fs.createReadStream(path)
- let filename = title
- // Be careful of special characters
- filename = encodeURIComponent(filename)
- // Ideally this should strip them
- res.setHeader('Content-disposition', 'attachment; filename="' + filename + '.pdf"')
- res.setHeader('Cache-Control', 'private')
- res.setHeader('Content-Type', 'application/pdf; charset=UTF-8')
- res.setHeader('X-Robots-Tag', 'noindex, nofollow') // prevent crawling
- stream.pipe(res)
- fs.unlinkSync(path)
+ res.render('codimd.ejs', {
+ title: title,
+ opengraph: opengraph
})
}
-
-function createGist (req, res, note) {
- const data = {
- client_id: config.github.clientID,
- redirect_uri: config.serverURL + '/auth/github/callback/' + models.Note.encodeNoteId(note.id) + '/gist',
- scope: 'gist',
- state: shortId.generate()
- }
- const query = querystring.stringify(data)
- res.redirect('https://github.com/login/oauth/authorize?' + query)
-}
-
-function getRevision (req, res, note) {
- const actionId = req.params.actionId
- if (actionId) {
- const time = moment(parseInt(actionId))
- if (time.isValid()) {
- models.Revision.getPatchedNoteRevisionByTime(note, time, function (err, content) {
- if (err) {
- logger.error(err)
- return errors.errorInternalError(res)
- }
- if (!content) {
- return errors.errorNotFound(res)
- }
- res.set({
- 'Access-Control-Allow-Origin': '*', // allow CORS as API
- 'Access-Control-Allow-Headers': 'Range',
- 'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
- 'Cache-Control': 'private', // only cache by client
- 'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
- })
- res.send(content)
- })
- } else {
- return errors.errorNotFound(res)
- }
- } else {
- models.Revision.getNoteRevisions(note, function (err, data) {
- if (err) {
- logger.error(err)
- return errors.errorInternalError(res)
- }
- const out = {
- revision: data
- }
- res.set({
- 'Access-Control-Allow-Origin': '*', // allow CORS as API
- 'Access-Control-Allow-Headers': 'Range',
- 'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
- 'Cache-Control': 'private', // only cache by client
- 'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
- })
- res.send(out)
- })
- }
-}
diff --git a/lib/web/note/router.js b/lib/web/note/router.js
index 39da4c2c..e4f867b2 100644
--- a/lib/web/note/router.js
+++ b/lib/web/note/router.js
@@ -26,7 +26,7 @@ router.get('/p/:shortid', slide.showPublishSlide)
// publish slide actions
router.get('/p/:shortid/:action', slide.publishSlideActions)
// get note by id
-router.get('/:noteId', response.showNote)
+router.get('/:noteId', noteController.showNote)
// note actions
router.get('/:noteId/:action', noteController.doAction)
// note actions with action id