backend: Update validation error messages and add room ID validation middleware

This commit is contained in:
Carlos Santos 2025-04-07 18:11:45 +02:00
parent 990f23f7b2
commit 546e17f1e5
6 changed files with 20 additions and 7 deletions

View File

@ -17,7 +17,7 @@ export const validateLoginRequest = (req: Request, res: Response, next: NextFunc
return res.status(422).json({ return res.status(422).json({
error: 'Unprocessable Entity', error: 'Unprocessable Entity',
message: 'Invalid request body', message: 'Invalid request',
details: errors details: errors
}); });
} }

View File

@ -44,7 +44,7 @@ const rejectRequest = (res: Response, error: z.ZodError) => {
return res.status(422).json({ return res.status(422).json({
error: 'Unprocessable Entity', error: 'Unprocessable Entity',
message: 'Invalid request body', message: 'Invalid request',
details: errors details: errors
}); });
}; };

View File

@ -75,7 +75,7 @@ const rejectRequest = (res: Response, error: z.ZodError) => {
return res.status(422).json({ return res.status(422).json({
error: 'Unprocessable Entity', error: 'Unprocessable Entity',
message: 'Invalid request body', message: 'Invalid request',
details: errors details: errors
}); });
}; };

View File

@ -110,7 +110,7 @@ const rejectRequest = (res: Response, error: z.ZodError) => {
return res.status(422).json({ return res.status(422).json({
error: 'Unprocessable Entity', error: 'Unprocessable Entity',
message: 'Invalid request body', message: 'Invalid request',
details: errors details: errors
}); });
}; };

View File

@ -101,7 +101,7 @@ const BulkDeleteRoomsSchema = z.object({
return arg; return arg;
}, },
z.array(nonEmptySanitizedString('recordingId')).default([]) z.array(nonEmptySanitizedString('roomId')).default([])
) )
}); });
@ -142,6 +142,17 @@ export const withValidRoomPreferences = (req: Request, res: Response, next: Next
next(); next();
}; };
export const withValidRoomId = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = nonEmptySanitizedString('roomId').safeParse(req.params.roomId);
if (!success) {
return rejectRequest(res, error);
}
req.params.roomId = data;
next();
};
export const withValidRoomBulkDeleteRequest = (req: Request, res: Response, next: NextFunction) => { export const withValidRoomBulkDeleteRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = BulkDeleteRoomsSchema.safeParse(req.query); const { success, error, data } = BulkDeleteRoomsSchema.safeParse(req.query);
@ -172,7 +183,7 @@ const rejectRequest = (res: Response, error: z.ZodError) => {
return res.status(422).json({ return res.status(422).json({
error: 'Unprocessable Entity', error: 'Unprocessable Entity',
message: 'Invalid request body', message: 'Invalid request',
details: errors details: errors
}); });
}; };

View File

@ -12,7 +12,8 @@ import {
configureCreateRoomAuth, configureCreateRoomAuth,
configureRoomAuthorization, configureRoomAuthorization,
withValidRoomPreferences, withValidRoomPreferences,
withValidRoomBulkDeleteRequest withValidRoomBulkDeleteRequest,
withValidRoomId
} from '../middlewares/index.js'; } from '../middlewares/index.js';
import { UserRole } from '@typings-ce'; import { UserRole } from '@typings-ce';
@ -39,6 +40,7 @@ roomRouter.get(
'/:roomId', '/:roomId',
withAuth(apiKeyValidator, tokenAndRoleValidator(UserRole.ADMIN), participantTokenValidator), withAuth(apiKeyValidator, tokenAndRoleValidator(UserRole.ADMIN), participantTokenValidator),
configureRoomAuthorization, configureRoomAuthorization,
withValidRoomId,
roomCtrl.getRoom roomCtrl.getRoom
); );
roomRouter.delete('/:roomId', withAuth(apiKeyValidator, tokenAndRoleValidator(UserRole.ADMIN)), roomCtrl.deleteRoom); roomRouter.delete('/:roomId', withAuth(apiKeyValidator, tokenAndRoleValidator(UserRole.ADMIN)), roomCtrl.deleteRoom);