mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-18 01:10:14 +01:00
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
|
|
import { logger } from '@librechat/data-schemas';
|
||
|
|
import type { Request, Response, NextFunction } from 'express';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Middleware to handle JSON parsing errors from express.json()
|
||
|
|
* Prevents user input from being reflected in error messages (XSS prevention)
|
||
|
|
*
|
||
|
|
* This middleware should be placed immediately after express.json() middleware.
|
||
|
|
*
|
||
|
|
* @param err - Error object from express.json()
|
||
|
|
* @param req - Express request object
|
||
|
|
* @param res - Express response object
|
||
|
|
* @param next - Express next function
|
||
|
|
*
|
||
|
|
* @example
|
||
|
|
* app.use(express.json({ limit: '3mb' }));
|
||
|
|
* app.use(handleJsonParseError);
|
||
|
|
*/
|
||
|
|
export function handleJsonParseError(
|
||
|
|
err: Error & { status?: number; body?: unknown },
|
||
|
|
req: Request,
|
||
|
|
res: Response,
|
||
|
|
next: NextFunction,
|
||
|
|
): void {
|
||
|
|
if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
|
||
|
|
logger.warn('[JSON Parse Error] Invalid JSON received', {
|
||
|
|
path: req.path,
|
||
|
|
method: req.method,
|
||
|
|
ip: req.ip,
|
||
|
|
});
|
||
|
|
|
||
|
|
res.status(400).json({
|
||
|
|
error: 'Invalid JSON format',
|
||
|
|
message: 'The request body contains malformed JSON',
|
||
|
|
});
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
next(err);
|
||
|
|
}
|