diff --git a/backend/src/controllers/room.controller.ts b/backend/src/controllers/room.controller.ts index 01a8f68..786804f 100644 --- a/backend/src/controllers/room.controller.ts +++ b/backend/src/controllers/room.controller.ts @@ -2,8 +2,8 @@ import { container } from '../config/dependency-injector.config.js'; import { Request, Response } from 'express'; import { LoggerService } from '../services/logger.service.js'; import { OpenViduMeetError } from '../models/error.model.js'; -import { RoomService } from '../services/room.service.js'; -import { MeetRoomFilters, MeetRoomOptions } from '@typings-ce'; +import { RoomService, ParticipantService } from '../services/index.js'; +import { MeetRoomFilters, MeetRoomOptions, MeetRoomRoleAndPermissions, ParticipantRole } from '@typings-ce'; export const createRoom = async (req: Request, res: Response) => { const logger = container.get(LoggerService); @@ -111,20 +111,47 @@ export const bulkDeleteRooms = async (req: Request, res: Response) => { } }; -export const getParticipantRole = async (req: Request, res: Response) => { +export const getRoomRolesAndPermissions = async (req: Request, res: Response) => { + const logger = container.get(LoggerService); + const participantService = container.get(ParticipantService); + const { roomId } = req.params; + + logger.verbose(`Getting roles and associated permissions for room '${roomId}'`); + const moderatorPermissions = participantService.getParticipantPermissions(ParticipantRole.MODERATOR, roomId); + const publisherPermissions = participantService.getParticipantPermissions(ParticipantRole.PUBLISHER, roomId); + + const rolesAndPermissions = [ + { + role: ParticipantRole.MODERATOR, + permissions: moderatorPermissions + }, + { + role: ParticipantRole.PUBLISHER, + permissions: publisherPermissions + } + ]; + res.status(200).json(rolesAndPermissions); +}; + +export const getRoomRoleAndPermissions = async (req: Request, res: Response) => { const logger = container.get(LoggerService); const roomService = container.get(RoomService); + const participantService = container.get(ParticipantService); - const { roomId } = req.params; - const { secret } = req.query as { secret: string }; + const { roomId, secret } = req.params; try { - logger.verbose(`Getting participant role for room '${roomId}'`); + logger.verbose(`Getting room role and associated permissions for room '${roomId}' and secret '${secret}'`); - const role = await roomService.getRoomSecretRole(roomId, secret); - return res.status(200).json(role); + const role = await roomService.getRoomRoleBySecret(roomId, secret); + const permissions = participantService.getParticipantPermissions(role, roomId); + const roleAndPermissions: MeetRoomRoleAndPermissions = { + role, + permissions + }; + return res.status(200).json(roleAndPermissions); } catch (error) { - logger.error(`Error getting participant role for room '${roomId}'`); + logger.error(`Error getting room role and permissions for room '${roomId}' and secret '${secret}'`); handleError(res, error); } }; diff --git a/backend/src/middlewares/request-validators/room-validator.middleware.ts b/backend/src/middlewares/request-validators/room-validator.middleware.ts index 19b3784..56a798f 100644 --- a/backend/src/middlewares/request-validators/room-validator.middleware.ts +++ b/backend/src/middlewares/request-validators/room-validator.middleware.ts @@ -98,10 +98,6 @@ const RoomRequestOptionsSchema: z.ZodType = z.object({ // .default(null) }); -const GetParticipantRoleSchema = z.object({ - secret: z.string() -}); - const GetRoomFiltersSchema: z.ZodType = z.object({ maxItems: z.coerce .number() @@ -215,17 +211,6 @@ export const withValidRoomDeleteRequest = (req: Request, res: Response, next: Ne next(); }; -export const validateGetParticipantRoleRequest = (req: Request, res: Response, next: NextFunction) => { - const { success, error, data } = GetParticipantRoleSchema.safeParse(req.query); - - if (!success) { - return rejectRequest(res, error); - } - - req.query = data; - next(); -}; - const rejectRequest = (res: Response, error: z.ZodError) => { const errors = error.errors.map((error) => ({ field: error.path.join('.'), diff --git a/backend/src/routes/room.routes.ts b/backend/src/routes/room.routes.ts index beb4387..54a1bb3 100644 --- a/backend/src/routes/room.routes.ts +++ b/backend/src/routes/room.routes.ts @@ -6,7 +6,6 @@ import { tokenAndRoleValidator, apiKeyValidator, participantTokenValidator, - validateGetParticipantRoleRequest, withValidRoomFiltersRequest, withValidRoomOptions, configureCreateRoomAuth, @@ -63,4 +62,6 @@ internalRoomRouter.put( roomCtrl.updateRoomPreferences ); -internalRoomRouter.get('/:roomId/participant-role', validateGetParticipantRoleRequest, roomCtrl.getParticipantRole); +// Roles and permissions +internalRoomRouter.get('/:roomId/roles', roomCtrl.getRoomRolesAndPermissions); +internalRoomRouter.get('/:roomId/roles/:secret', roomCtrl.getRoomRoleAndPermissions);