0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-24 16:22:44 +00:00

Add new access type (raw) and simplify adding other types in the future. Add functionality for raw access to skip splitting Style data from Brew Content.

This commit is contained in:
G.Ambatte
2021-06-19 15:50:48 +12:00
parent 4638c3e1d9
commit 68ed6019f6

View File

@@ -11,9 +11,11 @@ const sanitizeFilename = require('sanitize-filename');
const asyncHandler = require('express-async-handler');
const dedent = require('dedent-tabs').default;
const brewAccessTypes = ['edit', 'share', 'raw'];
//Get the brew object from the HB database or Google Drive
const getBrewFromId = asyncHandler(async (id, accessType)=>{
if(accessType !== 'edit' && accessType !== 'share')
if(!brewAccessTypes.includes(accessType))
throw ('Invalid Access Type when getting brew');
let brew;
if(id.length > 12) {
@@ -27,6 +29,10 @@ const getBrewFromId = asyncHandler(async (id, accessType)=>{
brew = sanitizeBrew(brew, accessType === 'edit' ? false : true);
//Split brew.text into text and style
//unless the Access Type is RAW, in which case return immediately
if(accessType == 'raw') {
return brew;
}
if(brew.text.startsWith('```css')) {
const index = brew.text.indexOf('```\n\n');
brew.style = brew.text.slice(7, index - 1);
@@ -37,7 +43,7 @@ const getBrewFromId = asyncHandler(async (id, accessType)=>{
/* Any CSS here will apply to your document! */
.myExampleClass {
color: black;
color: black;
}`;
}
return brew;
@@ -110,10 +116,10 @@ app.get('/robots.txt', (req, res)=>{
//Source page
app.get('/source/:id', asyncHandler(async (req, res)=>{
const brew = await getBrewFromId(req.params.id, 'share');
const brew = await getBrewFromId(req.params.id, 'raw');
const replaceStrings = { '&': '&amp;', '<': '&lt;', '>': '&gt;' };
let text = `\`\`\`css\n${brew.style}\n\`\`\`\n\n${brew.text}`;
let text = brew.text;
for (const replaceStr in replaceStrings) {
text = text.replaceAll(replaceStr, replaceStrings[replaceStr]);
}
@@ -123,7 +129,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, 'share');
const brew = await getBrewFromId(req.params.id, 'raw');
const prefix = 'HB - ';
let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', '');
@@ -132,8 +138,8 @@ app.get('/download/:id', asyncHandler(async (req, res)=>{
'Cache-Control' : 'no-cache',
'Content-Type' : 'text/plain',
'Content-Disposition' : `attachment; filename="${fileName}.txt"`
});
let text = `\`\`\`css\n${brew.style}\n\`\`\`\n\n${brew.text}`;
});
const text = brew.text;
res.status(200).send(text);
}));