summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2024-08-22 09:58:08 +1000
committerGitHub <noreply@github.com>2024-08-22 09:58:08 +1000
commit08fc90a8794719007a7a7ee73984819f7d74f37c (patch)
tree2c8d0a6d3c790685bdc63586b7d6034f78511973 /src/api
parentMerge pull request #1184 from DEVTomatoCake/fix/widget.json-channel-ordering-... (diff)
parentfeat (bodyparser): do proper errors (diff)
downloadserver-ts-08fc90a8794719007a7a7ee73984819f7d74f37c.tar.xz
Merge pull request #1189 from greysilly7/dev/bodyparser
Diffstat (limited to 'src/api')
-rw-r--r--src/api/middlewares/BodyParser.ts24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/api/middlewares/BodyParser.ts b/src/api/middlewares/BodyParser.ts

index ac8e04325..34433aeb2 100644 --- a/src/api/middlewares/BodyParser.ts +++ b/src/api/middlewares/BodyParser.ts
@@ -20,6 +20,19 @@ import bodyParser, { OptionsJson } from "body-parser"; import { NextFunction, Request, Response } from "express"; import { HTTPError } from "lambert-server"; +const errorMessages: { [key: string]: [string, number] } = { + "entity.too.large": ["Request body too large", 413], + "entity.parse.failed": ["Invalid JSON body", 400], + "entity.verify.failed": ["Entity verification failed", 403], + "request.aborted": ["Request aborted", 400], + "request.size.invalid": ["Request size did not match content length", 400], + "stream.encoding.set": ["Stream encoding should not be set", 500], + "stream.not.readable": ["Stream is not readable", 500], + "parameters.too.many": ["Too many parameters", 413], + "charset.unsupported": ["Unsupported charset", 415], + "encoding.unsupported": ["Unsupported content encoding", 415], +}; + export function BodyParser(opts?: OptionsJson) { const jsonParser = bodyParser.json(opts); @@ -29,8 +42,15 @@ export function BodyParser(opts?: OptionsJson) { jsonParser(req, res, (err) => { if (err) { - // TODO: different errors for body parser (request size limit, wrong body type, invalid body, ...) - return next(new HTTPError("Invalid Body", 400)); + const [message, status] = errorMessages[err.type] || [ + "Invalid Body", + 400, + ]; + const errorMessage = + message.includes("charset") || message.includes("encoding") + ? `${message} "${err.charset || err.encoding}"` + : message; + return next(new HTTPError(errorMessage, status)); } next(); });