backend: enhance room member token handling for external member IDs and validate secrets
This commit is contained in:
parent
2e7cbeb96a
commit
1188255210
@ -132,23 +132,30 @@ export const authorizeRoomMemberTokenGeneration = async (req: Request, res: Resp
|
||||
// Scenario 1: Secret provided (Anonymous access or Member ID)
|
||||
if (secret) {
|
||||
try {
|
||||
const isExternalMemberId = secret.startsWith('ext-');
|
||||
|
||||
if (isExternalMemberId) {
|
||||
// Check if secret is a memberId
|
||||
const roomMemberService = container.get(RoomMemberService);
|
||||
const isMember = await roomMemberService.isRoomMember(roomId, secret);
|
||||
|
||||
if (!isMember) {
|
||||
const error = errorRoomMemberNotFound(roomId, secret);
|
||||
return rejectRequestFromMeetError(res, error);
|
||||
}
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
// Check if secret matches any room access URL secret
|
||||
const isValidSecret = await roomService.isValidRoomSecret(roomId, secret);
|
||||
|
||||
if (isValidSecret) {
|
||||
return next();
|
||||
if (!isValidSecret) {
|
||||
const error = errorInvalidRoomSecret(roomId, secret);
|
||||
return rejectRequestFromMeetError(res, error);
|
||||
}
|
||||
|
||||
// Check if secret is a memberId
|
||||
const roomMemberService = container.get(RoomMemberService);
|
||||
const isMember = await roomMemberService.isRoomMember(roomId, secret);
|
||||
|
||||
if (isMember) {
|
||||
return next();
|
||||
}
|
||||
|
||||
const error = errorInvalidRoomSecret(roomId, secret);
|
||||
return rejectRequestFromMeetError(res, error);
|
||||
return next();
|
||||
} catch (error) {
|
||||
return handleError(res, error, 'checking room secret');
|
||||
}
|
||||
|
||||
@ -472,26 +472,32 @@ export class RoomMemberService {
|
||||
|
||||
if (secret) {
|
||||
// Case 1: Secret provided (Anonymous access or External Member)
|
||||
const isValidSecret = await this.roomService.isValidRoomSecret(roomId, secret);
|
||||
const isExternalMemberId = secret.startsWith('ext-');
|
||||
|
||||
if (isExternalMemberId) {
|
||||
// If secret is a external member ID, fetch the member and assign their role and permissions
|
||||
const member = await this.getRoomMember(roomId, secret);
|
||||
|
||||
if (!member) {
|
||||
throw errorInvalidRoomSecret(roomId, secret);
|
||||
}
|
||||
|
||||
memberId = member.memberId;
|
||||
baseRole = member.baseRole;
|
||||
customPermissions = member.customPermissions;
|
||||
effectivePermissions = member.effectivePermissions;
|
||||
} else {
|
||||
const isValidSecret = await this.roomService.isValidRoomSecret(roomId, secret);
|
||||
|
||||
if (!isValidSecret) {
|
||||
throw errorInvalidRoomSecret(roomId, secret);
|
||||
}
|
||||
|
||||
if (isValidSecret) {
|
||||
// If secret matches anonymous access URL secret, assign role and permissions based on it
|
||||
baseRole = await this.getRoomMemberRoleBySecret(roomId, secret);
|
||||
|
||||
const room = await this.roomService.getMeetRoom(roomId);
|
||||
effectivePermissions = room.roles[baseRole].permissions;
|
||||
} else {
|
||||
// If secret is a memberId, fetch the member and assign their role and permissions
|
||||
const member = await this.getRoomMember(roomId, secret);
|
||||
|
||||
if (member) {
|
||||
memberId = member.memberId;
|
||||
baseRole = member.baseRole;
|
||||
customPermissions = member.customPermissions;
|
||||
effectivePermissions = member.effectivePermissions;
|
||||
} else {
|
||||
throw errorInvalidRoomSecret(roomId, secret);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Case 2: Authenticated user
|
||||
@ -512,14 +518,14 @@ export class RoomMemberService {
|
||||
// If user is a member, fetch their role and permissions
|
||||
const member = await this.getRoomMember(roomId, user.userId);
|
||||
|
||||
if (member) {
|
||||
memberId = user.userId;
|
||||
baseRole = member.baseRole;
|
||||
customPermissions = member.customPermissions;
|
||||
effectivePermissions = member.effectivePermissions;
|
||||
} else {
|
||||
if (!member) {
|
||||
throw errorUnauthorized();
|
||||
}
|
||||
|
||||
memberId = user.userId;
|
||||
baseRole = member.baseRole;
|
||||
customPermissions = member.customPermissions;
|
||||
effectivePermissions = member.effectivePermissions;
|
||||
}
|
||||
}
|
||||
|
||||
@ -533,9 +539,9 @@ export class RoomMemberService {
|
||||
customPermissions,
|
||||
memberId
|
||||
);
|
||||
} else {
|
||||
return this.generateToken(roomId, baseRole, effectivePermissions, customPermissions, memberId);
|
||||
}
|
||||
|
||||
return this.generateToken(roomId, baseRole, effectivePermissions, customPermissions, memberId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user