backend: add room member and user endpoints

This commit is contained in:
juancarmore 2025-12-05 15:29:31 +01:00
parent 5d874f57f5
commit b709ad320a
4 changed files with 145 additions and 34 deletions

View File

@ -2,7 +2,7 @@ import bodyParser from 'body-parser';
import { Router } from 'express';
import * as meetingCtrl from '../controllers/meeting.controller.js';
import { roomMemberTokenValidator, withAuth } from '../middlewares/auth.middleware.js';
import { withModeratorPermissions } from '../middlewares/participant.middleware.js';
import { withModeratorPermissions } from '../middlewares/room-member.middleware.js';
import { validateUpdateParticipantRoleReq } from '../middlewares/request-validators/meeting-validator.middleware.js';
import { withValidRoomId } from '../middlewares/request-validators/room-validator.middleware.js';

View File

@ -32,21 +32,33 @@ recordingRouter.use(bodyParser.json());
// Recording Routes
recordingRouter.get(
'/',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
withCanRetrieveRecordingsPermission,
validateGetRecordingsReq,
recordingCtrl.getRecordings
);
recordingRouter.delete(
'/',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
validateBulkDeleteRecordingsReq,
withCanDeleteRecordingsPermission,
recordingCtrl.bulkDeleteRecordings
);
recordingRouter.get(
'/download',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
validateBulkDeleteRecordingsReq,
withCanRetrieveRecordingsPermission,
recordingCtrl.downloadRecordingsZip
@ -60,7 +72,11 @@ recordingRouter.get(
);
recordingRouter.delete(
'/:recordingId',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
withValidRecordingId,
withCanDeleteRecordingsPermission,
recordingCtrl.deleteRecording
@ -74,7 +90,11 @@ recordingRouter.get(
);
recordingRouter.get(
'/:recordingId/url',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
validateGetRecordingUrlReq,
withCanRetrieveRecordingsPermission,
recordingCtrl.getRecordingUrl

View File

@ -1,22 +1,30 @@
import { MeetUserRole } from '@openvidu-meet/typings';
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as roomMemberCtrl from '../controllers/room-member.controller.js';
import * as roomCtrl from '../controllers/room.controller.js';
import {
allowAnonymous,
apiKeyValidator,
roomMemberTokenValidator,
tokenAndRoleValidator,
withAuth
} from '../middlewares/auth.middleware.js';
import { configureRoomMemberTokenAuth } from '../middlewares/participant.middleware.js';
import { configureRoomMemberTokenAuth } from '../middlewares/room-member.middleware.js';
import {
validateBulkDeleteRoomMembersReq,
validateCreateRoomMemberReq,
validateCreateRoomMemberTokenReq,
validateGetRoomMembersReq,
validateUpdateRoomMemberReq
} from '../middlewares/request-validators/room-member-validator.middleware.js';
import {
validateBulkDeleteRoomsReq,
validateCreateRoomMemberTokenReq,
validateCreateRoomReq,
validateDeleteRoomReq,
validateGetRoomsReq,
validateUpdateRoomAnonymousReq,
validateUpdateRoomConfigReq,
validateUpdateRoomRolesReq,
validateUpdateRoomStatusReq,
withValidRoomId
} from '../middlewares/request-validators/room-validator.middleware.js';
@ -29,47 +37,55 @@ roomRouter.use(bodyParser.json());
// Room Routes
roomRouter.post(
'/',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
validateCreateRoomReq,
roomCtrl.createRoom
);
roomRouter.get(
'/',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER)),
validateGetRoomsReq,
roomCtrl.getRooms
);
roomRouter.delete(
'/',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
validateBulkDeleteRoomsReq,
roomCtrl.bulkDeleteRooms
);
roomRouter.get(
'/:roomId',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
withValidRoomId,
configureRoomAuthorization,
roomCtrl.getRoom
);
roomRouter.delete(
'/:roomId',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
validateDeleteRoomReq,
roomCtrl.deleteRoom
);
roomRouter.get(
'/:roomId/config',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN), roomMemberTokenValidator),
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
withValidRoomId,
configureRoomAuthorization,
roomCtrl.getRoomConfig
);
roomRouter.put(
'/:roomId/config',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateUpdateRoomConfigReq,
roomCtrl.updateRoomConfig
@ -77,11 +93,72 @@ roomRouter.put(
roomRouter.put(
'/:roomId/status',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN)),
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateUpdateRoomStatusReq,
roomCtrl.updateRoomStatus
);
roomRouter.put(
'/:roomId/roles',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateUpdateRoomRolesReq,
roomCtrl.updateRoomRoles
);
roomRouter.put(
'/:roomId/anonymous',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateUpdateRoomAnonymousReq,
roomCtrl.updateRoomAnonymous
);
// Room Member Routes
roomRouter.post(
'/:roomId/members',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateCreateRoomMemberReq,
roomMemberCtrl.createRoomMember
);
roomRouter.get(
'/:roomId/members',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER), roomMemberTokenValidator),
withValidRoomId,
validateGetRoomMembersReq,
roomMemberCtrl.getRoomMembers
);
roomRouter.delete(
'/:roomId/members',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateBulkDeleteRoomMembersReq,
roomMemberCtrl.bulkDeleteRoomMembers
);
roomRouter.get(
'/:roomId/members/:memberId',
withAuth(
apiKeyValidator,
tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER),
roomMemberTokenValidator
),
withValidRoomId,
roomMemberCtrl.getRoomMemberTokenInfo
);
roomRouter.put(
'/:roomId/members/:memberId',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
validateUpdateRoomMemberReq,
roomMemberCtrl.updateRoomMember
);
roomRouter.delete(
'/:roomId/members/:memberId',
withAuth(apiKeyValidator, tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withValidRoomId,
roomMemberCtrl.deleteRoomMember
);
// Internal room routes
export const internalRoomRouter: Router = Router();
@ -89,21 +166,9 @@ internalRoomRouter.use(bodyParser.urlencoded({ extended: true }));
internalRoomRouter.use(bodyParser.json());
internalRoomRouter.post(
'/:roomId/token',
'/:roomId/members/token',
withValidRoomId,
validateCreateRoomMemberTokenReq,
configureRoomMemberTokenAuth,
roomCtrl.generateRoomMemberToken
);
internalRoomRouter.get(
'/:roomId/roles',
withAuth(allowAnonymous),
withValidRoomId,
roomCtrl.getRoomMemberRolesAndPermissions
);
internalRoomRouter.get(
'/:roomId/roles/:secret',
withAuth(allowAnonymous),
withValidRoomId,
roomCtrl.getRoomMemberRoleAndPermissions
roomMemberCtrl.generateRoomMemberToken
);

View File

@ -3,17 +3,43 @@ import bodyParser from 'body-parser';
import { Router } from 'express';
import * as userCtrl from '../controllers/user.controller.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/auth.middleware.js';
import { validateChangePasswordReq } from '../middlewares/request-validators/user-validator.middleware.js';
import {
validateBulkDeleteUsersReq,
validateChangePasswordReq,
validateCreateUserReq,
validateGetUsersReq
} from '../middlewares/request-validators/user-validator.middleware.js';
export const userRouter: Router = Router();
userRouter.use(bodyParser.urlencoded({ extended: true }));
userRouter.use(bodyParser.json());
// Users Routes
userRouter.get('/profile', withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)), userCtrl.getProfile);
userRouter.post('/', withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN)), validateCreateUserReq, userCtrl.createUser);
userRouter.get(
'/',
withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
validateGetUsersReq,
userCtrl.getUsers
);
userRouter.delete(
'/',
withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN)),
validateBulkDeleteUsersReq,
userCtrl.bulkDeleteUser
);
userRouter.get(
'/me',
withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER)),
userCtrl.getProfile
);
userRouter.post(
'/change-password',
withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)),
withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER, MeetUserRole.ROOM_MEMBER)),
validateChangePasswordReq,
userCtrl.changePassword
);
userRouter.get('/:userId', withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN, MeetUserRole.USER)), userCtrl.getUser);
userRouter.delete('/:userId', withAuth(tokenAndRoleValidator(MeetUserRole.ADMIN)), userCtrl.deleteUser);