1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-09 12:12:35 +01:00

Merge pull request #1189 from greysilly7/dev/bodyparser

This commit is contained in:
Madeline 2024-08-22 09:58:08 +10:00 committed by GitHub
commit 08fc90a879
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -20,6 +20,19 @@ import bodyParser, { OptionsJson } from "body-parser";
import { NextFunction, Request, Response } from "express"; import { NextFunction, Request, Response } from "express";
import { HTTPError } from "lambert-server"; 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) { export function BodyParser(opts?: OptionsJson) {
const jsonParser = bodyParser.json(opts); const jsonParser = bodyParser.json(opts);
@ -29,8 +42,15 @@ export function BodyParser(opts?: OptionsJson) {
jsonParser(req, res, (err) => { jsonParser(req, res, (err) => {
if (err) { if (err) {
// TODO: different errors for body parser (request size limit, wrong body type, invalid body, ...) const [message, status] = errorMessages[err.type] || [
return next(new HTTPError("Invalid Body", 400)); "Invalid Body",
400,
];
const errorMessage =
message.includes("charset") || message.includes("encoding")
? `${message} "${err.charset || err.encoding}"`
: message;
return next(new HTTPError(errorMessage, status));
} }
next(); next();
}); });