Remove expired old token condition when refreshing participant token
This commit is contained in:
parent
f5d874d06d
commit
26b1750377
@ -1,8 +0,0 @@
|
|||||||
description: Conflict — Current token is still valid
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '../../schemas/error.yaml'
|
|
||||||
example:
|
|
||||||
error: Participant Error
|
|
||||||
message: 'Participant token is still valid'
|
|
||||||
@ -50,8 +50,6 @@
|
|||||||
$ref: '../../components/responses/forbidden-error.yaml'
|
$ref: '../../components/responses/forbidden-error.yaml'
|
||||||
'404':
|
'404':
|
||||||
$ref: '../../components/responses/internal/error-room-participant-not-found.yaml'
|
$ref: '../../components/responses/internal/error-room-participant-not-found.yaml'
|
||||||
'409':
|
|
||||||
$ref: '../../components/responses/internal/error-participant-token-still-valid.yaml'
|
|
||||||
'422':
|
'422':
|
||||||
$ref: '../../components/responses/validation-error.yaml'
|
$ref: '../../components/responses/validation-error.yaml'
|
||||||
'500':
|
'500':
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import INTERNAL_CONFIG from '../config/internal-config.js';
|
|||||||
import {
|
import {
|
||||||
errorInvalidParticipantToken,
|
errorInvalidParticipantToken,
|
||||||
errorParticipantTokenNotPresent,
|
errorParticipantTokenNotPresent,
|
||||||
errorParticipantTokenStillValid,
|
|
||||||
handleError,
|
handleError,
|
||||||
rejectRequestFromMeetError
|
rejectRequestFromMeetError
|
||||||
} from '../models/error.model.js';
|
} from '../models/error.model.js';
|
||||||
@ -57,29 +56,17 @@ export const generateParticipantToken = async (req: Request, res: Response) => {
|
|||||||
export const refreshParticipantToken = async (req: Request, res: Response) => {
|
export const refreshParticipantToken = async (req: Request, res: Response) => {
|
||||||
const logger = container.get(LoggerService);
|
const logger = container.get(LoggerService);
|
||||||
|
|
||||||
// Check if there is a previous token and if it is expired
|
// Check if there is a previous token
|
||||||
const previousToken = req.cookies[INTERNAL_CONFIG.PARTICIPANT_TOKEN_COOKIE_NAME];
|
const previousToken = req.cookies[INTERNAL_CONFIG.PARTICIPANT_TOKEN_COOKIE_NAME];
|
||||||
|
|
||||||
// If there is no previous token, we cannot refresh it
|
|
||||||
if (!previousToken) {
|
if (!previousToken) {
|
||||||
logger.verbose('No previous participant token found. Cannot refresh.');
|
logger.verbose('No previous participant token found. Cannot refresh.');
|
||||||
const error = errorParticipantTokenNotPresent();
|
const error = errorParticipantTokenNotPresent();
|
||||||
return rejectRequestFromMeetError(res, error);
|
return rejectRequestFromMeetError(res, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
const tokenService = container.get(TokenService);
|
|
||||||
|
|
||||||
// If the previous token is still valid, we do not need to refresh it
|
|
||||||
try {
|
|
||||||
await tokenService.verifyToken(previousToken);
|
|
||||||
logger.verbose('Previous participant token is valid. No need to refresh');
|
|
||||||
const error = errorParticipantTokenStillValid();
|
|
||||||
return rejectRequestFromMeetError(res, error);
|
|
||||||
} catch (error) {
|
|
||||||
// Previous token is expired, we can proceed to refresh it
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract roles from the previous token
|
// Extract roles from the previous token
|
||||||
|
const tokenService = container.get(TokenService);
|
||||||
const participantService = container.get(ParticipantService);
|
const participantService = container.get(ParticipantService);
|
||||||
let currentRoles: { role: ParticipantRole; permissions: OpenViduMeetPermissions }[] = [];
|
let currentRoles: { role: ParticipantRole; permissions: OpenViduMeetPermissions }[] = [];
|
||||||
|
|
||||||
|
|||||||
@ -230,10 +230,6 @@ export const errorParticipantAlreadyExists = (participantIdentity: string, roomI
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const errorParticipantTokenStillValid = (): OpenViduMeetError => {
|
|
||||||
return new OpenViduMeetError('Participant Error', 'Participant token is still valid', 409);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const errorParticipantTokenNotPresent = (): OpenViduMeetError => {
|
export const errorParticipantTokenNotPresent = (): OpenViduMeetError => {
|
||||||
return new OpenViduMeetError('Participant', 'No participant token provided', 400);
|
return new OpenViduMeetError('Participant', 'No participant token provided', 400);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -119,20 +119,6 @@ describe('Participant API Tests', () => {
|
|||||||
);
|
);
|
||||||
expect(response.status).toBe(404);
|
expect(response.status).toBe(404);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fail with 409 when participant token is still valid', async () => {
|
|
||||||
const newRoomData = await setupSingleRoom(true);
|
|
||||||
const response = await refreshParticipantToken(
|
|
||||||
{
|
|
||||||
roomId: newRoomData.room.roomId,
|
|
||||||
secret: newRoomData.moderatorSecret,
|
|
||||||
participantName
|
|
||||||
},
|
|
||||||
newRoomData.moderatorCookie
|
|
||||||
);
|
|
||||||
expect(response.status).toBe(409);
|
|
||||||
expect(response.body.message).toBe('Participant token is still valid');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Refresh Participant Token Validation Tests', () => {
|
describe('Refresh Participant Token Validation Tests', () => {
|
||||||
|
|||||||
@ -56,13 +56,6 @@ export const httpInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, ne
|
|||||||
}),
|
}),
|
||||||
catchError((error: HttpErrorResponse) => {
|
catchError((error: HttpErrorResponse) => {
|
||||||
if (error.url?.includes('/token/refresh')) {
|
if (error.url?.includes('/token/refresh')) {
|
||||||
if (error.status === 409) {
|
|
||||||
console.log('Participant token is still valid');
|
|
||||||
// This means that the unauthorized error was due to an expired access token
|
|
||||||
// Refresh the access token and try again
|
|
||||||
return refreshAccessToken(firstError);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.error('Error refreshing participant token');
|
console.error('Error refreshing participant token');
|
||||||
throw firstError;
|
throw firstError;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -77,7 +77,6 @@ export class ParticipantService {
|
|||||||
livekit: decodedToken.video,
|
livekit: decodedToken.video,
|
||||||
openvidu: openviduPermissions
|
openvidu: openviduPermissions
|
||||||
};
|
};
|
||||||
console.warn('PARTICIPANT PERMISSIONS', this.permissions);
|
|
||||||
|
|
||||||
// Update feature configuration
|
// Update feature configuration
|
||||||
this.featureConfService.setParticipantRole(this.role);
|
this.featureConfService.setParticipantRole(this.role);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user