diff options
Diffstat (limited to 'lib/response.js')
-rwxr-xr-x | lib/response.js | 94 |
1 files changed, 37 insertions, 57 deletions
diff --git a/lib/response.js b/lib/response.js index f0f49181..cedee3de 100755 --- a/lib/response.js +++ b/lib/response.js @@ -6,7 +6,6 @@ var markdownpdf = require("markdown-pdf"); var LZString = require('lz-string'); var S = require('string'); var shortId = require('shortid'); -var metaMarked = require('meta-marked'); var querystring = require('querystring'); var request = require('request'); var moment = require('moment'); @@ -60,6 +59,7 @@ function showIndex(req, res, next) { res.render(config.indexpath, { url: config.serverurl, useCDN: config.usecdn, + allowAnonymous: config.allowanonymous, facebook: config.facebook, twitter: config.twitter, github: config.github, @@ -75,14 +75,9 @@ function showIndex(req, res, next) { } function responseHackMD(res, note) { - var body = LZString.decompressFromBase64(note.content); - var meta = null; - try { - meta = models.Note.parseMeta(metaMarked(body).meta); - } catch(err) { - //na - } - if (!meta) meta = {}; + var body = note.content; + var extracted = models.Note.extractMeta(body); + var meta = models.Note.parseMeta(extracted.meta); var title = models.Note.decodeTitle(note.title); title = models.Note.generateWebTitle(meta.title || title); res.set({ @@ -93,6 +88,7 @@ function responseHackMD(res, note) { url: config.serverurl, title: title, useCDN: config.usecdn, + allowAnonymous: config.allowanonymous, facebook: config.facebook, twitter: config.twitter, github: config.github, @@ -108,9 +104,12 @@ function newNote(req, res, next) { var owner = null; if (req.isAuthenticated()) { owner = req.user.id; + } else if (!config.allowanonymous) { + return response.errorForbidden(res); } models.Note.create({ - ownerId: owner + ownerId: owner, + alias: req.alias ? req.alias : null }).then(function (note) { return res.redirect(config.serverurl + "/" + LZString.compressToBase64(note.id)); }).catch(function (err) { @@ -131,6 +130,7 @@ function checkViewPermission(req, note) { } function findNote(req, res, callback, include) { + var noteId = req.params.noteId; var id = req.params.noteId || req.params.shortid; models.Note.parseNoteId(id, function (err, _id) { models.Note.findOne({ @@ -140,7 +140,12 @@ function findNote(req, res, callback, include) { include: include || null }).then(function (note) { if (!note) { - return response.errorNotFound(res); + if (config.allowfreeurl && noteId) { + req.alias = noteId; + return newNote(req, res); + } else { + return response.errorNotFound(res); + } } if (!checkViewPermission(req, note)) { return response.errorForbidden(res); @@ -182,17 +187,10 @@ function showPublishNote(req, res, next) { if (!note) { return response.errorNotFound(res); } - var body = LZString.decompressFromBase64(note.content); - var meta = null; - var markdown = null; - try { - var obj = metaMarked(body); - markdown = obj.markdown; - meta = models.Note.parseMeta(obj.meta); - } catch(err) { - //na - } - if (!meta) meta = {}; + var body = note.content; + var extracted = models.Note.extractMeta(body); + markdown = extracted.markdown; + meta = models.Note.parseMeta(extracted.meta); var createtime = note.createdAt; var updatetime = note.lastchangeAt; var title = models.Note.decodeTitle(note.title); @@ -200,7 +198,7 @@ function showPublishNote(req, res, next) { var origin = config.serverurl; var data = { title: title, - description: meta.description || markdown ? models.Note.generateDescription(markdown) : null, + description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null), viewcount: note.viewcount, createtime: createtime, updatetime: updatetime, @@ -239,7 +237,7 @@ function actionSlide(req, res, note) { } function actionDownload(req, res, note) { - var body = LZString.decompressFromBase64(note.content); + var body = note.content; var title = models.Note.decodeTitle(note.title); var filename = title; filename = encodeURIComponent(filename); @@ -256,23 +254,16 @@ function actionDownload(req, res, note) { } function actionInfo(req, res, note) { - var body = LZString.decompressFromBase64(note.content); - var meta = null; - var markdown = null; - try { - var obj = metaMarked(body); - markdown = obj.markdown; - meta = models.Note.parseMeta(obj.meta); - } catch(err) { - //na - } - if (!meta) meta = {}; + var body = note.content; + var extracted = models.Note.extractMeta(body); + var markdown = extracted.markdown; + var meta = models.Note.parseMeta(extracted.meta); var createtime = note.createdAt; var updatetime = note.lastchangeAt; var title = models.Note.decodeTitle(note.title); var data = { title: meta.title || title, - description: meta.description || markdown ? models.Note.generateDescription(markdown) : null, + description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null), viewcount: note.viewcount, createtime: createtime, updatetime: updatetime @@ -288,19 +279,15 @@ function actionInfo(req, res, note) { } function actionPDF(req, res, note) { - var body = LZString.decompressFromBase64(note.content); - try { - body = metaMarked(body).markdown; - } catch(err) { - //na - } + var body = note.content; + var extracted = models.Note.extractMeta(body); var title = models.Note.decodeTitle(note.title); if (!fs.existsSync(config.tmppath)) { fs.mkdirSync(config.tmppath); } var path = config.tmppath + '/' + Date.now() + '.pdf'; - markdownpdf().from.string(body).to(path, function () { + markdownpdf().from.string(extracted.markdown).to(path, function () { var stream = fs.createReadStream(path); var filename = title; // Be careful of special characters @@ -470,7 +457,7 @@ function githubActionGist(req, res, note) { if (!error && httpResponse.statusCode == 200) { var access_token = body.access_token; if (access_token) { - var content = LZString.decompressFromBase64(note.content); + var content = note.content; var title = models.Note.decodeTitle(note.title); var filename = title.replace('/', ' ') + '.md'; var gist = { @@ -570,17 +557,10 @@ function showPublishSlide(req, res, next) { if (!note) { return response.errorNotFound(res); } - var body = LZString.decompressFromBase64(note.content); - var meta = null; - var markdown = null; - try { - var obj = metaMarked(body); - markdown = obj.markdown; - meta = models.Note.parseMeta(obj.meta); - } catch(err) { - //na - } - if (!meta) meta = {}; + var body = note.content; + var extracted = models.Note.extractMeta(body); + markdown = extracted.markdown; + meta = models.Note.parseMeta(extracted.meta); var createtime = note.createdAt; var updatetime = note.lastchangeAt; var title = models.Note.decodeTitle(note.title); @@ -588,13 +568,13 @@ function showPublishSlide(req, res, next) { var origin = config.serverurl; var data = { title: title, - description: meta.description || markdown ? models.Note.generateDescription(markdown) : null, + description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null), viewcount: note.viewcount, createtime: createtime, updatetime: updatetime, url: origin, body: markdown, - meta: JSON.stringify(obj.meta || {}), + meta: JSON.stringify(extracted.meta), useCDN: config.usecdn, owner: note.owner ? note.owner.id : null, ownerprofile: note.owner ? models.User.getProfile(note.owner) : null, |