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:
20
server.js
20
server.js
@@ -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 = { '&': '&', '<': '<', '>': '>' };
|
||||
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);
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user