Skip to content

Commit

Permalink
set correct content type for error messages
Browse files Browse the repository at this point in the history
  • Loading branch information
zadam committed Jun 30, 2022
1 parent fac9fef commit 3faae63
Show file tree
Hide file tree
Showing 9 changed files with 71 additions and 27 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 6 additions & 2 deletions src/routes/api/export.js
Expand Up @@ -15,7 +15,9 @@ function exportBranch(req, res) {
const message = `Cannot export branch ${branchId} since it does not exist.`;
log.error(message);

res.status(500).send(message);
res.setHeader("Content-Type", "text/plain")
.status(500)
.send(message);
return;
}

Expand All @@ -41,7 +43,9 @@ function exportBranch(req, res) {

log.error(message + e.stack);

res.status(500).send(message);
res.setHeader("Content-Type", "text/plain")
.status(500)
.send(message);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/routes/api/files.js
Expand Up @@ -48,7 +48,9 @@ function downloadNoteFile(noteId, res, contentDisposition = true) {
const note = becca.getNote(noteId);

if (!note) {
return res.status(404).send(`Note ${noteId} doesn't exist.`);
return res.setHeader("Content-Type", "text/plain")
.status(404)
.send(`Note ${noteId} doesn't exist.`);
}

if (note.isProtected && !protectedSessionService.isProtectedSessionAvailable()) {
Expand Down
8 changes: 5 additions & 3 deletions src/routes/api/image.js
Expand Up @@ -20,20 +20,22 @@ function returnImage(req, res) {
}

/**
* special "image" type. the canvas is actually type application/json
* special "image" type. the canvas is actually type application/json
* to avoid bitrot and enable usage as referenced image the svg is included.
*/
if (image.type === 'canvas') {
const content = image.getContent();
try {
const data = JSON.parse(content);

const svg = data.svg || '<svg />'
res.set('Content-Type', "image/svg+xml");
res.set("Cache-Control", "no-cache, no-store, must-revalidate");
res.send(svg);
} catch(err) {
res.status(500).send("there was an error parsing excalidraw to svg");
res.setHeader("Content-Type", "text/plain")
.status(500)
.send("there was an error parsing excalidraw to svg");
}
} else {
res.set('Content-Type', image.mime);
Expand Down
8 changes: 6 additions & 2 deletions src/routes/api/note_revisions.js
Expand Up @@ -65,11 +65,15 @@ function downloadNoteRevision(req, res) {
const noteRevision = becca.getNoteRevision(req.params.noteRevisionId);

if (noteRevision.noteId !== req.params.noteId) {
return res.status(400).send(`Note revision ${req.params.noteRevisionId} does not belong to note ${req.params.noteId}`);
return res.setHeader("Content-Type", "text/plain")
.status(400)
.send(`Note revision ${req.params.noteRevisionId} does not belong to note ${req.params.noteId}`);
}

if (noteRevision.isProtected && !protectedSessionService.isProtectedSessionAvailable()) {
return res.status(401).send("Protected session not available");
return res.setHeader("Content-Type", "text/plain")
.status(401)
.send("Protected session not available");
}

const filename = getRevisionFilename(noteRevision);
Expand Down
8 changes: 6 additions & 2 deletions src/routes/custom.js
Expand Up @@ -49,7 +49,9 @@ function handleRequest(req, res) {
catch (e) {
log.error(`Custom handler ${note.noteId} failed with ${e.message}`);

res.status(500).send(e.message);
res.setHeader("Content-Type", "text/plain")
.status(500)
.send(e.message);
}
}
else if (attr.name === 'customResourceProvider') {
Expand All @@ -65,7 +67,9 @@ function handleRequest(req, res) {
const message = `No handler matched for custom ${path} request.`;

log.info(message);
res.status(404).send(message);
res.setHeader("Content-Type", "text/plain")
.status(404)
.send(message);
}

function register(router) {
Expand Down
12 changes: 10 additions & 2 deletions src/routes/routes.js
Expand Up @@ -120,6 +120,10 @@ function apiResultHandler(req, res, result) {

function send(res, statusCode, response) {
if (typeof response === 'string') {
if (statusCode >= 400) {
res.setHeader("Content-Type", "text/plain");
}

res.status(statusCode).send(response);

return response.length;
Expand Down Expand Up @@ -167,7 +171,9 @@ function route(method, path, middleware, routeHandler, resultHandler, transactio
.catch(e => {
log.error(`${method} ${path} threw exception: ` + e.stack);

res.status(500).send(e.message);
res.setHeader("Content-Type", "text/plain")
.status(500)
.send(e.message);
});
}
else {
Expand All @@ -180,7 +186,9 @@ function route(method, path, middleware, routeHandler, resultHandler, transactio
catch (e) {
log.error(`${method} ${path} threw exception: ` + e.stack);

res.status(500).send(e.message);
res.setHeader("Content-Type", "text/plain")
.status(500)
.send(e.message);
}
});
}
Expand Down
16 changes: 12 additions & 4 deletions src/services/auth.js
Expand Up @@ -88,17 +88,23 @@ function checkEtapiToken(req, res, next) {
function reject(req, res, message) {
log.info(`${req.method} ${req.path} rejected with 401 ${message}`);

res.status(401).send(message);
res.setHeader("Content-Type", "text/plain")
.status(401)
.send(message);
}

function checkCredentials(req, res, next) {
if (!sqlInit.isDbInitialized()) {
res.status(400).send('Database is not initialized yet.');
res.setHeader("Content-Type", "text/plain")
.status(400)
.send('Database is not initialized yet.');
return;
}

if (!passwordService.isPasswordSet()) {
res.status(400).send('Password has not been set yet. Please set a password and repeat the action');
res.setHeader("Content-Type", "text/plain")
.status(400)
.send('Password has not been set yet. Please set a password and repeat the action');
return;
}

Expand All @@ -109,7 +115,9 @@ function checkCredentials(req, res, next) {
// username is ignored

if (!passwordEncryptionService.verifyPassword(password)) {
res.status(401).send('Incorrect password');
res.setHeader("Content-Type", "text/plain")
.status(401)
.send('Incorrect password');
}
else {
next();
Expand Down
30 changes: 21 additions & 9 deletions src/share/routes.js
Expand Up @@ -39,9 +39,9 @@ function register(router) {
addNoIndexHeader(note, res);

if (note.hasLabel('shareRaw') || ['image', 'file'].includes(note.type)) {
res.setHeader('Content-Type', note.mime);
res.setHeader('Content-Type', note.mime)
.send(note.getContent());

res.send(note.getContent());
return;
}

Expand Down Expand Up @@ -83,7 +83,9 @@ function register(router) {
const note = shaca.getNote(noteId);

if (!note) {
return res.status(404).send(`Note '${noteId}' not found`);
return res.setHeader("Content-Type", "text/plain")
.status(404)
.send(`Note '${noteId}' not found`);
}

addNoIndexHeader(note, res);
Expand All @@ -98,7 +100,9 @@ function register(router) {
const note = shaca.getNote(noteId);

if (!note) {
return res.status(404).send(`Note '${noteId}' not found`);
return res.setHeader("Content-Type", "text/plain")
.status(404)
.send(`Note '${noteId}' not found`);
}

addNoIndexHeader(note, res);
Expand All @@ -122,13 +126,17 @@ function register(router) {
const image = shaca.getNote(req.params.noteId);

if (!image) {
return res.status(404).send(`Note '${req.params.noteId}' not found`);
return res.setHeader('Content-Type', 'text/plain')
.status(404)
.send(`Note '${req.params.noteId}' not found`);
}
else if (!["image", "canvas"].includes(image.type)) {
return res.status(400).send("Requested note is not a shareable image");
return res.setHeader('Content-Type', 'text/plain')
.status(400)
.send("Requested note is not a shareable image");
} else if (image.type === "canvas") {
/**
* special "image" type. the canvas is actually type application/json
* special "image" type. the canvas is actually type application/json
* to avoid bitrot and enable usage as referenced image the svg is included.
*/
const content = image.getContent();
Expand All @@ -141,7 +149,9 @@ function register(router) {
res.set("Cache-Control", "no-cache, no-store, must-revalidate");
res.send(svg);
} catch(err) {
res.status(500).send("there was an error parsing excalidraw to svg");
res.setHeader('Content-Type', 'text/plain')
.status(500)
.send("there was an error parsing excalidraw to svg");
}
} else {
// normal image
Expand All @@ -159,7 +169,9 @@ function register(router) {
const note = shaca.getNote(noteId);

if (!note) {
return res.status(404).send(`Note '${noteId}' not found`);
return res.setHeader('Content-Type', 'text/plain')
.status(404)
.send(`Note '${noteId}' not found`);
}

addNoIndexHeader(note, res);
Expand Down

0 comments on commit 3faae63

Please sign in to comment.