From 1b448835cd71684f8daf69e4ca0b4a8fcbbce3df Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Sun, 23 Jun 2024 10:32:13 +0200 Subject: [PATCH] fix: duplicate validation --- apps/server/src/api-data/db/db.router.ts | 3 ++- apps/server/src/api-data/db/db.validation.ts | 24 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/apps/server/src/api-data/db/db.router.ts b/apps/server/src/api-data/db/db.router.ts index 4b5ee0d9a..c70462f60 100644 --- a/apps/server/src/api-data/db/db.router.ts +++ b/apps/server/src/api-data/db/db.router.ts @@ -18,6 +18,7 @@ import { validatePatchProject, validateFilenameBody, validateFilenameParam, + validateNewFilenameBody, } from './db.validation.js'; export const router = express.Router(); @@ -31,7 +32,7 @@ router.post('/new', validateFilenameBody, validateNewProject, createProjectFile) router.get('/all', listProjects); router.post('/load', validateFilenameBody, loadProject); -router.post('/:filename/duplicate', validateFilenameParam, validateFilenameBody, duplicateProjectFile); +router.post('/:filename/duplicate', validateFilenameParam, validateNewFilenameBody, duplicateProjectFile); router.put('/:filename/rename', validateFilenameParam, validateFilenameBody, renameProjectFile); router.delete('/:filename', validateFilenameParam, deleteProjectFile); diff --git a/apps/server/src/api-data/db/db.validation.ts b/apps/server/src/api-data/db/db.validation.ts index 18cf4fb80..019c7f96b 100644 --- a/apps/server/src/api-data/db/db.validation.ts +++ b/apps/server/src/api-data/db/db.validation.ts @@ -41,6 +41,30 @@ export const validatePatchProject = [ }, ]; +/** + * @description Validates request with newFilename in the body. + */ +export const validateNewFilenameBody = [ + body('newFilename') + .exists() + .isString() + .trim() + .customSanitizer((input: string) => sanitize(input)) + .withMessage('Failed to sanitize the filename') + .notEmpty() + .withMessage('Filename was empty or contained only invalid characters') + .customSanitizer((input: string) => ensureJsonExtension(input)), + + (req: Request, res: Response, next: NextFunction) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ errors: errors.array() }); + } + + next(); + }, +]; + /** * @description Validates request with filename in the body. */