Files
Classeo/frontend/e2e/global-setup.ts
Mathias STRASSER b823479658 feat: Gestion des sessions utilisateur
Permet aux utilisateurs de visualiser et gérer leurs sessions actives
sur différents appareils, avec la possibilité de révoquer des sessions
à distance en cas de suspicion d'activité non autorisée.

Fonctionnalités :
- Liste des sessions actives avec métadonnées (appareil, navigateur, localisation)
- Identification de la session courante
- Révocation individuelle d'une session
- Révocation de toutes les autres sessions
- Déconnexion avec nettoyage des cookies sur les deux chemins (legacy et actuel)

Sécurité :
- Cache frontend scopé par utilisateur pour éviter les fuites entre comptes
- Validation que le refresh token appartient à l'utilisateur JWT authentifié
- TTL des sessions Redis aligné sur l'expiration du refresh token
- Événements d'audit pour traçabilité (SessionInvalidee, ToutesSessionsInvalidees)

@see Story 1.6 - Gestion des sessions
2026-02-03 10:53:31 +01:00

34 lines
1.1 KiB
TypeScript

import { execSync } from 'child_process';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
/**
* Global setup for E2E tests.
*
* - Resets rate limiter to ensure tests start with clean state
* - Token creation is handled per-browser in test files using beforeAll hooks
*/
async function globalSetup() {
console.warn('🎭 E2E Global setup - tokens are created per browser project');
// Reset rate limiter to prevent failed login tests from blocking other tests
try {
const projectRoot = join(__dirname, '../..');
const composeFile = join(projectRoot, 'compose.yaml');
// Use Symfony cache:pool:clear for more reliable cache clearing
execSync(
`docker compose -f "${composeFile}" exec -T php php bin/console cache:pool:clear cache.rate_limiter --env=dev 2>&1`,
{ encoding: 'utf-8' }
);
console.warn('✅ Rate limiter cache cleared');
} catch (error) {
console.error('⚠️ Failed to reset rate limiter:', error);
}
}
export default globalSetup;