mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-25 11:16:31 -05:00
Fix and refactor extracting content using metaMarked directly might lead in invalid object
This commit is contained in:
parent
ac2b100d35
commit
c1b5e74cf9
2 changed files with 34 additions and 68 deletions
|
@ -236,33 +236,17 @@ module.exports = function (sequelize, DataTypes) {
|
|||
});
|
||||
},
|
||||
parseNoteInfo: function (body) {
|
||||
var meta = null;
|
||||
try {
|
||||
var obj = metaMarked(body);
|
||||
body = obj.markdown;
|
||||
meta = obj.meta;
|
||||
} catch (err) {
|
||||
//na
|
||||
}
|
||||
if (!meta) meta = {};
|
||||
var $ = cheerio.load(md.render(body));
|
||||
var parsed = Note.extractMeta(body);
|
||||
var $ = cheerio.load(md.render(parsed.markdown));
|
||||
return {
|
||||
title: Note.extractNoteTitle(meta, $),
|
||||
tags: Note.extractNoteTags(meta, $)
|
||||
title: Note.extractNoteTitle(parsed.meta, $),
|
||||
tags: Note.extractNoteTags(parsed.meta, $)
|
||||
};
|
||||
},
|
||||
parseNoteTitle: function (body) {
|
||||
var meta = null;
|
||||
try {
|
||||
var obj = metaMarked(body);
|
||||
body = obj.markdown;
|
||||
meta = obj.meta;
|
||||
} catch (err) {
|
||||
//na
|
||||
}
|
||||
if (!meta) meta = {};
|
||||
var $ = cheerio.load(md.render(body));
|
||||
return Note.extractNoteTitle(meta, $);
|
||||
var parsed = Note.extractMeta(body);
|
||||
var $ = cheerio.load(md.render(parsed.markdown));
|
||||
return Note.extractNoteTitle(parsed.meta, $);
|
||||
},
|
||||
extractNoteTitle: function (meta, $) {
|
||||
var title = "";
|
||||
|
@ -320,6 +304,19 @@ module.exports = function (sequelize, DataTypes) {
|
|||
}
|
||||
return tags;
|
||||
},
|
||||
extractMeta: function (content) {
|
||||
try {
|
||||
var obj = metaMarked(content);
|
||||
if (!obj.markdown) obj.markdown = "";
|
||||
if (!obj.meta) obj.meta = {};
|
||||
} catch (err) {
|
||||
var obj = {
|
||||
markdown: content,
|
||||
meta: {}
|
||||
};
|
||||
}
|
||||
return obj;
|
||||
},
|
||||
parseMeta: function (meta) {
|
||||
var _meta = {};
|
||||
if (meta) {
|
||||
|
|
|
@ -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');
|
||||
|
@ -76,13 +75,8 @@ function showIndex(req, res, next) {
|
|||
|
||||
function responseHackMD(res, note) {
|
||||
var body = note.content;
|
||||
var meta = null;
|
||||
try {
|
||||
meta = models.Note.parseMeta(metaMarked(body).meta);
|
||||
} catch(err) {
|
||||
//na
|
||||
}
|
||||
if (!meta) meta = {};
|
||||
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({
|
||||
|
@ -192,16 +186,9 @@ function showPublishNote(req, res, next) {
|
|||
return response.errorNotFound(res);
|
||||
}
|
||||
var body = 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 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);
|
||||
|
@ -266,16 +253,9 @@ function actionDownload(req, res, note) {
|
|||
|
||||
function actionInfo(req, res, note) {
|
||||
var body = 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 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);
|
||||
|
@ -298,18 +278,14 @@ function actionInfo(req, res, note) {
|
|||
|
||||
function actionPDF(req, res, note) {
|
||||
var body = note.content;
|
||||
try {
|
||||
body = metaMarked(body).markdown;
|
||||
} catch(err) {
|
||||
//na
|
||||
}
|
||||
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
|
||||
|
@ -580,16 +556,9 @@ function showPublishSlide(req, res, next) {
|
|||
return response.errorNotFound(res);
|
||||
}
|
||||
var body = 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 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);
|
||||
|
@ -603,7 +572,7 @@ function showPublishSlide(req, res, next) {
|
|||
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,
|
||||
|
|
Loading…
Reference in a new issue