backend: Improve getRoomSecretRole method to compare secret with query param "secret"

This commit is contained in:
juancarmore 2025-03-21 01:58:29 +01:00
parent 13618af109
commit 8ecc62ba46

View File

@ -8,7 +8,6 @@ import { OpenViduMeetRoom, OpenViduMeetRoomOptions, ParticipantRole } from '@typ
import { OpenViduRoomHelper } from '../helpers/room.helper.js'; import { OpenViduRoomHelper } from '../helpers/room.helper.js';
import { SystemEventService } from './system-event.service.js'; import { SystemEventService } from './system-event.service.js';
import { TaskSchedulerService } from './task-scheduler.service.js'; import { TaskSchedulerService } from './task-scheduler.service.js';
import { ParticipantService } from './participant.service.js';
import { errorParticipantUnauthorized } from '../models/error.model.js'; import { errorParticipantUnauthorized } from '../models/error.model.js';
/** /**
@ -159,17 +158,29 @@ export class RoomService {
*/ */
async getRoomSecretRole(roomName: string, secret: string): Promise<ParticipantRole> { async getRoomSecretRole(roomName: string, secret: string): Promise<ParticipantRole> {
const room = await this.getOpenViduRoom(roomName); const room = await this.getOpenViduRoom(roomName);
const { moderatorRoomUrl, publisherRoomUrl } = room;
if (room.moderatorRoomUrl.includes(secret)) { const extractSecret = (urlString: string, type: string): string => {
const url = new URL(urlString);
const secret = url.searchParams.get('secret');
if (!secret) throw new Error(`${type} secret not found`);
return secret;
};
const publisherSecret = extractSecret(publisherRoomUrl, 'Publisher');
const moderatorSecret = extractSecret(moderatorRoomUrl, 'Moderator');
switch (secret) {
case moderatorSecret:
return ParticipantRole.MODERATOR; return ParticipantRole.MODERATOR;
} case publisherSecret:
if (room.publisherRoomUrl.includes(secret)) {
return ParticipantRole.PUBLISHER; return ParticipantRole.PUBLISHER;
} default:
throw errorParticipantUnauthorized(roomName); throw errorParticipantUnauthorized(roomName);
} }
}
/** /**
* Sends a signal to participants in a specified room. * Sends a signal to participants in a specified room.