# Migration vers UUIDs pour la sécurité ## 🎯 Objectif Remplacer les user IDs séquentiels (1, 2, 3...) par des UUIDs pour éviter les attaques d'énumération. ## ⚠️ Important Cette migration doit être effectuée quand l'application n'est pas en production ou pendant une maintenance. ## 📋 Étapes à suivre ### Scenario A : Nouvelle installation (recommandé) ```bash # 1. Supprimer l'ancienne DB si elle existe dropdb peakskills # 2. Créer une nouvelle DB avec le nouveau schema UUID createdb peakskills psql -h localhost -U peakskills_user -d peakskills -f scripts/init.sql # 3. Migrer les données skills npm run migrate-skills # 4. Démarrer l'app npm run dev ``` ### Scenario B : Migration base existante ```bash # 1. Se connecter à PostgreSQL psql -h localhost -U peakskills_user -d peakskills # 2. Exécuter le script de migration \i scripts/migrate-to-uuid.sql # 3. Vérifier la migration SELECT id, uuid_id, first_name, last_name FROM users LIMIT 5; # 4. Redémarrer l'app npm run dev ``` ### 4. Nettoyer les anciennes sessions - Tous les utilisateurs devront se reconnecter (car les cookies utilisent maintenant des UUIDs) - C'est normal et nécessaire pour la sécurité ## 🔒 Sécurité apportée **Avant :** - Cookie: `peakSkills_userId=2` - Facilement hackable: essayer 1, 3, 4, 5... **Après :** - Cookie: `peakSkills_userId=a1b2c3d4-e5f6-7890-abcd-ef1234567890` - Impossible à deviner: UUID v4 avec 2^122 possibilités ## 🚀 Tests à effectuer 1. **Login nouveau utilisateur** - Créer un compte → doit générer un UUID - Vérifier le cookie dans le navigateur 2. **Utilisateur existant** - Se reconnecter → doit utiliser l'UUID existant - Vérifier que les données sont préservées 3. **Actions d'évaluation** - Modifier une skill → doit fonctionner avec UUID - Vérifier que les données sont sauvées ## 📊 Migration status - ✅ **Code application complètement adapté aux UUIDs** - ✅ Nouvelles méthodes `*Uuid()` dans EvaluationService - ✅ Toutes les APIs modifiées (`/api/auth`, `/api/evaluations`, `/api/evaluations/skills`) - ✅ Functions SSR adaptées (server-auth.ts) - ✅ Middleware mis à jour - ✅ Types AuthService corrigés - ⏳ **À faire : Exécuter la migration DB** - ⏳ **À faire : Tester en développement** - ⏳ **À faire : Nettoyer le code legacy une fois validé** ## 🔧 Fichiers modifiés ### Services - `services/evaluation-service.ts` → Méthodes `*Uuid()` ajoutées - `lib/server-auth.ts` → `getUserUuidFromCookie()` et adaptations - `lib/auth-utils.ts` → Types de retour UUID ### APIs - `app/api/auth/route.ts` → Cookies UUID - `app/api/evaluations/route.ts` → `getUserByUuid()` - `app/api/evaluations/skills/route.ts` → Toutes méthodes `*Uuid()` ### Infrastructure - `middleware.ts` → Variables UUID - `scripts/migrate-to-uuid.sql` → Schema DB migration (pour existants) - `scripts/init.sql` → Schema DB initial avec UUIDs (pour nouvelles installs) ## 🧹 Nettoyage futur Une fois la migration validée, supprimer : - Méthodes `upsertUser()` et `getUserById()` legacy - Colonnes `id` et `user_id` dans les tables (garder seulement UUIDs)