diff --git a/meet-ce/backend/src/middlewares/request-validators/room-member-validator.middleware.ts b/meet-ce/backend/src/middlewares/request-validators/room-member-validator.middleware.ts new file mode 100644 index 00000000..764bead6 --- /dev/null +++ b/meet-ce/backend/src/middlewares/request-validators/room-member-validator.middleware.ts @@ -0,0 +1,79 @@ +import { MeetRoomMemberTokenMetadata } from '@openvidu-meet/typings'; +import { NextFunction, Request, Response } from 'express'; +import { rejectUnprocessableRequest } from '../../models/error.model.js'; +import { + BulkDeleteRoomMembersReqSchema, + RoomMemberFiltersSchema, + RoomMemberOptionsSchema, + RoomMemberTokenMetadataSchema, + RoomMemberTokenOptionsSchema, + UpdateRoomMemberReqSchema +} from '../../models/zod-schemas/room-member.schema.js'; + +export const validateCreateRoomMemberReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = RoomMemberOptionsSchema.safeParse(req.body); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.body = data; + next(); +}; + +export const validateGetRoomMembersReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = RoomMemberFiltersSchema.safeParse(req.query); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.query = { + ...data, + maxItems: data.maxItems?.toString() + }; + next(); +}; + +export const validateBulkDeleteRoomMembersReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = BulkDeleteRoomMembersReqSchema.safeParse(req.query); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.query = data; + next(); +}; + +export const validateUpdateRoomMemberReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = UpdateRoomMemberReqSchema.safeParse(req.body); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.body = data; + next(); +}; + +export const validateCreateRoomMemberTokenReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = RoomMemberTokenOptionsSchema.safeParse(req.body); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.body = data; + next(); +}; + +export const validateRoomMemberTokenMetadata = (metadata: unknown): MeetRoomMemberTokenMetadata => { + const { success, error, data } = RoomMemberTokenMetadataSchema.safeParse(metadata); + + if (!success) { + throw new Error(`Invalid metadata: ${error.message}`); + } + + return data; +}; diff --git a/meet-ce/backend/src/middlewares/request-validators/room-validator.middleware.ts b/meet-ce/backend/src/middlewares/request-validators/room-validator.middleware.ts index b70011e0..36bc90f7 100644 --- a/meet-ce/backend/src/middlewares/request-validators/room-validator.middleware.ts +++ b/meet-ce/backend/src/middlewares/request-validators/room-validator.middleware.ts @@ -1,15 +1,14 @@ -import { MeetRoomMemberTokenMetadata } from '@openvidu-meet/typings'; import { NextFunction, Request, Response } from 'express'; import { rejectUnprocessableRequest } from '../../models/error.model.js'; import { BulkDeleteRoomsReqSchema, DeleteRoomReqSchema, - RoomFiltersSchema, nonEmptySanitizedRoomId, - RoomMemberTokenMetadataSchema, - RoomMemberTokenOptionsSchema, + RoomFiltersSchema, RoomOptionsSchema, + UpdateRoomAnonymousReqSchema, UpdateRoomConfigReqSchema, + UpdateRoomRolesReqSchema, UpdateRoomStatusReqSchema } from '../../models/zod-schemas/room.schema.js'; @@ -102,8 +101,8 @@ export const validateUpdateRoomStatusReq = (req: Request, res: Response, next: N next(); }; -export const validateCreateRoomMemberTokenReq = (req: Request, res: Response, next: NextFunction) => { - const { success, error, data } = RoomMemberTokenOptionsSchema.safeParse(req.body); +export const validateUpdateRoomRolesReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = UpdateRoomRolesReqSchema.safeParse(req.body); if (!success) { return rejectUnprocessableRequest(res, error); @@ -113,12 +112,13 @@ export const validateCreateRoomMemberTokenReq = (req: Request, res: Response, ne next(); }; -export const validateRoomMemberTokenMetadata = (metadata: unknown): MeetRoomMemberTokenMetadata => { - const { success, error, data } = RoomMemberTokenMetadataSchema.safeParse(metadata); +export const validateUpdateRoomAnonymousReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = UpdateRoomAnonymousReqSchema.safeParse(req.body); if (!success) { - throw new Error(`Invalid metadata: ${error.message}`); + return rejectUnprocessableRequest(res, error); } - return data; + req.body = data; + next(); }; diff --git a/meet-ce/backend/src/middlewares/request-validators/user-validator.middleware.ts b/meet-ce/backend/src/middlewares/request-validators/user-validator.middleware.ts index 429d623f..2be53e2f 100644 --- a/meet-ce/backend/src/middlewares/request-validators/user-validator.middleware.ts +++ b/meet-ce/backend/src/middlewares/request-validators/user-validator.middleware.ts @@ -1,6 +1,47 @@ import { NextFunction, Request, Response } from 'express'; import { rejectUnprocessableRequest } from '../../models/error.model.js'; -import { ChangePasswordReqSchema } from '../../models/zod-schemas/user.schema.js'; +import { + BulkDeleteUsersReqSchema, + ChangePasswordReqSchema, + CreateUserReqSchema, + UserFiltersSchema +} from '../../models/zod-schemas/user.schema.js'; + +export const validateCreateUserReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = CreateUserReqSchema.safeParse(req.body); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.body = data; + next(); +}; + +export const validateGetUsersReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = UserFiltersSchema.safeParse(req.query); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.query = { + ...data, + maxItems: data.maxItems?.toString() + }; + next(); +}; + +export const validateBulkDeleteUsersReq = (req: Request, res: Response, next: NextFunction) => { + const { success, error, data } = BulkDeleteUsersReqSchema.safeParse(req.query); + + if (!success) { + return rejectUnprocessableRequest(res, error); + } + + req.query = data; + next(); +}; export const validateChangePasswordReq = (req: Request, res: Response, next: NextFunction) => { const { success, error, data } = ChangePasswordReqSchema.safeParse(req.body);