From 25c36425be52c95590bca5c482358ca97d5489df Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Tue, 30 Nov 2021 23:05:08 -0600 Subject: [PATCH] Update code based on feedback --- server.js | 21 ++++++++++++--------- server/homebrew.api.js | 32 +++++++++++++++++++++++++++----- server/utils/brew.js | 41 ----------------------------------------- 3 files changed, 39 insertions(+), 55 deletions(-) delete mode 100644 server/utils/brew.js diff --git a/server.js b/server.js index b16703024..468d8f5bf 100644 --- a/server.js +++ b/server.js @@ -3,7 +3,6 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); const express = require('express'); const yaml = require('js-yaml'); -const brewUtils = require('./server/utils/brew'); const app = express(); const homebrewApi = require('./server/homebrew.api.js'); @@ -12,7 +11,7 @@ const serveCompressedStaticAssets = require('./server/static-assets.mv.js'); const sanitizeFilename = require('sanitize-filename'); const asyncHandler = require('express-async-handler'); -const brewAccessTypes = ['edit', 'share', 'raw', 'view']; +const brewAccessTypes = ['edit', 'share', 'raw']; //Get the brew object from the HB database or Google Drive const getBrewFromId = asyncHandler(async (id, accessType)=>{ @@ -51,8 +50,13 @@ const splitTextStyleAndMetadata = (brew)=>{ brew.text = brew.text.replaceAll('\r\n', '\n'); if(brew.text.startsWith('```metadata')) { const index = brew.text.indexOf('```\n\n'); - const metadata = brew.text.slice(12, index - 1); - Object.assign(brew, yaml.load(metadata)); + const metadataSection = brew.text.slice(12, index - 1); + const metadata = yaml.load(metadataSection); + brew.title = metadata.title; + brew.description = metadata.description; + brew.tags = metadata.tags; + brew.systems = metadata.systems; + brew.renderer = metadata.renderer; brew.text = brew.text.slice(index + 5); } if(brew.text.startsWith('```css')) { @@ -167,10 +171,10 @@ app.get('/faq', async (req, res, next)=>{ //Source page app.get('/source/:id', asyncHandler(async (req, res)=>{ - const brew = await getBrewFromId(req.params.id, 'view'); + const brew = await getBrewFromId(req.params.id, 'raw'); const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - let text = brewUtils.mergeBrewText(brew, { style: true, metadata: true, fullMetadata: true }); + let text = brew.text; for (const replaceStr in replaceStrings) { text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); } @@ -180,7 +184,7 @@ app.get('/source/:id', asyncHandler(async (req, res)=>{ //Download brew source page app.get('/download/:id', asyncHandler(async (req, res)=>{ - const brew = await getBrewFromId(req.params.id, 'view'); + const brew = await getBrewFromId(req.params.id, 'raw'); const prefix = 'HB - '; let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', ''); @@ -190,8 +194,7 @@ app.get('/download/:id', asyncHandler(async (req, res)=>{ 'Content-Type' : 'text/plain', 'Content-Disposition' : `attachment; filename="${fileName}.txt"` }); - const text = brewUtils.mergeBrewText(brew, { style: true, metadata: true, fullMetadata: true }); - res.status(200).send(text); + res.status(200).send(brew.text); })); //User Page diff --git a/server/homebrew.api.js b/server/homebrew.api.js index bde18e36a..3ecf2246a 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -4,7 +4,7 @@ const router = require('express').Router(); const zlib = require('zlib'); const GoogleActions = require('./googleActions.js'); const Markdown = require('../shared/naturalcrit/markdown.js'); -const brewUtils = require('./utils/brew'); +const yaml = require("js-yaml"); // const getTopBrews = (cb) => { // HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) { @@ -12,6 +12,28 @@ const brewUtils = require('./utils/brew'); // }); // }; +const mergeBrewText = (brew)=>{ + let text = brew.text; + if(brew.style !== undefined) { + text = `\`\`\`css\n` + + `${brew.style || ''}\n` + + `\`\`\`\n\n` + + `${text}`; + } + const metadata = { + title : brew.title, + description : brew.description, + tags : brew.tags, + systems : brew.systems, + renderer : brew.renderer + }; + text = `\`\`\`metadata\n` + + `${yaml.dump(metadata)}\n` + + `\`\`\`\n\n` + + `${text}`; + return text; +}; + const MAX_TITLE_LENGTH = 100; const getGoodBrewTitle = (text)=>{ @@ -37,7 +59,7 @@ const newBrew = (req, res)=>{ } brew.authors = (req.account) ? [req.account.username] : []; - brew.text = brewUtils.mergeBrewText(brew, { style: true }); + brew.text = mergeBrewText(brew); delete brew.editId; delete brew.shareId; @@ -66,7 +88,7 @@ const updateBrew = (req, res)=>{ .then((brew)=>{ const updateBrew = excludePropsFromUpdate(req.body); brew = _.merge(brew, updateBrew); - brew.text = brewUtils.mergeBrewText(brew, { style: true }); + brew.text = mergeBrewText(brew); // Compress brew text to binary before saving brew.textBin = zlib.deflateRawSync(brew.text); @@ -134,7 +156,7 @@ const newGoogleBrew = async (req, res, next)=>{ } brew.authors = (req.account) ? [req.account.username] : []; - brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true }); + brew.text = mergeBrewText(brew); delete brew.editId; delete brew.shareId; @@ -156,7 +178,7 @@ const updateGoogleBrew = async (req, res, next)=>{ try { oAuth2Client = GoogleActions.authCheck(req.account, res); } catch (err) { return res.status(err.status).send(err.message); } const brew = excludePropsFromUpdate(req.body); - brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true }); + brew.text = mergeBrewText(brew); try { const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew); diff --git a/server/utils/brew.js b/server/utils/brew.js deleted file mode 100644 index 0387fdde6..000000000 --- a/server/utils/brew.js +++ /dev/null @@ -1,41 +0,0 @@ -const yaml = require('js-yaml'); - -module.exports = { - mergeBrewText : (brew, { style, metadata, fullMetadata })=>{ - let text = brew.text; - if(style) { - text = `\`\`\`css\n` + - `${brew.style || ''}\n` + - `\`\`\`\n\n` + - `${text}`; - } - if(metadata) { - let metadata = { - title : brew.title, - description : brew.description, - tags : brew.tags, - systems : brew.systems, - renderer : brew.renderer, - authors : brew.authors, - published : brew.published - }; - if(fullMetadata) { - metadata = { - ...metadata, - shareId : brew.shareId, - pageCount : brew.pageCount, - createdAt : brew.createdAt, - updatedAt : brew.updatedAt, - lastViewed : brew.lastViewed, - views : brew.views, - version : brew.version - }; - } - text = `\`\`\`metadata\n` + - `${yaml.dump(metadata)}\n` + - `\`\`\`\n\n` + - `${text}`; - } - return text; - } -}; \ No newline at end of file