backend: Implement room roles and permissions endpoints
This commit is contained in:
parent
cc2dc83401
commit
743d3d514d
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@ -98,10 +98,6 @@ const RoomRequestOptionsSchema: z.ZodType<MeetRoomOptions> = z.object({
|
||||
// .default(null)
|
||||
});
|
||||
|
||||
const GetParticipantRoleSchema = z.object({
|
||||
secret: z.string()
|
||||
});
|
||||
|
||||
const GetRoomFiltersSchema: z.ZodType<MeetRoomFilters> = 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('.'),
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user