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 { Request, Response } from 'express';
|
||||||
import { LoggerService } from '../services/logger.service.js';
|
import { LoggerService } from '../services/logger.service.js';
|
||||||
import { OpenViduMeetError } from '../models/error.model.js';
|
import { OpenViduMeetError } from '../models/error.model.js';
|
||||||
import { RoomService } from '../services/room.service.js';
|
import { RoomService, ParticipantService } from '../services/index.js';
|
||||||
import { MeetRoomFilters, MeetRoomOptions } from '@typings-ce';
|
import { MeetRoomFilters, MeetRoomOptions, MeetRoomRoleAndPermissions, ParticipantRole } from '@typings-ce';
|
||||||
|
|
||||||
export const createRoom = async (req: Request, res: Response) => {
|
export const createRoom = async (req: Request, res: Response) => {
|
||||||
const logger = container.get(LoggerService);
|
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 logger = container.get(LoggerService);
|
||||||
const roomService = container.get(RoomService);
|
const roomService = container.get(RoomService);
|
||||||
|
const participantService = container.get(ParticipantService);
|
||||||
|
|
||||||
const { roomId } = req.params;
|
const { roomId, secret } = req.params;
|
||||||
const { secret } = req.query as { secret: string };
|
|
||||||
|
|
||||||
try {
|
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);
|
const role = await roomService.getRoomRoleBySecret(roomId, secret);
|
||||||
return res.status(200).json(role);
|
const permissions = participantService.getParticipantPermissions(role, roomId);
|
||||||
|
const roleAndPermissions: MeetRoomRoleAndPermissions = {
|
||||||
|
role,
|
||||||
|
permissions
|
||||||
|
};
|
||||||
|
return res.status(200).json(roleAndPermissions);
|
||||||
} catch (error) {
|
} 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);
|
handleError(res, error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -98,10 +98,6 @@ const RoomRequestOptionsSchema: z.ZodType<MeetRoomOptions> = z.object({
|
|||||||
// .default(null)
|
// .default(null)
|
||||||
});
|
});
|
||||||
|
|
||||||
const GetParticipantRoleSchema = z.object({
|
|
||||||
secret: z.string()
|
|
||||||
});
|
|
||||||
|
|
||||||
const GetRoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
|
const GetRoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
|
||||||
maxItems: z.coerce
|
maxItems: z.coerce
|
||||||
.number()
|
.number()
|
||||||
@ -215,17 +211,6 @@ export const withValidRoomDeleteRequest = (req: Request, res: Response, next: Ne
|
|||||||
next();
|
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 rejectRequest = (res: Response, error: z.ZodError) => {
|
||||||
const errors = error.errors.map((error) => ({
|
const errors = error.errors.map((error) => ({
|
||||||
field: error.path.join('.'),
|
field: error.path.join('.'),
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import {
|
|||||||
tokenAndRoleValidator,
|
tokenAndRoleValidator,
|
||||||
apiKeyValidator,
|
apiKeyValidator,
|
||||||
participantTokenValidator,
|
participantTokenValidator,
|
||||||
validateGetParticipantRoleRequest,
|
|
||||||
withValidRoomFiltersRequest,
|
withValidRoomFiltersRequest,
|
||||||
withValidRoomOptions,
|
withValidRoomOptions,
|
||||||
configureCreateRoomAuth,
|
configureCreateRoomAuth,
|
||||||
@ -63,4 +62,6 @@ internalRoomRouter.put(
|
|||||||
roomCtrl.updateRoomPreferences
|
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