summaryrefslogtreecommitdiff
path: root/lib/response.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/response.js')
-rwxr-xr-xlib/response.js94
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,