- Changed migration commands in DATABASE_SETUP.md to use `pnpm run sync-skills` and `pnpm run sync-teams`. - Removed the skills migration API endpoint in route.ts, streamlining the migration process. - Updated MIGRATION_UUID.md to reflect changes in migration steps and removed the old skills migration script. - Added new sync scripts for skills and teams in package.json. - Cleaned up init.sql by removing old teams data insertion and adjusted comments for clarity.
3.1 KiB
3.1 KiB
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é)
# 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. Synchroniser les données skills et teams
pnpm run sync-skills
pnpm run sync-teams
# 4. Démarrer l'app
npm run dev
Scenario B : Migration base existante
⚠️ Script de migration supprimé
Le script migrate-to-uuid.sql a été supprimé. Pour migrer une base existante :
- Sauvegarde tes données importantes
- Supprime l'ancienne base :
dropdb peakskills - Recrée avec le nouveau schéma :
createdb peakskills - Utilise le Scenario A ci-dessus
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
-
Login nouveau utilisateur
- Créer un compte → doit générer un UUID
- Vérifier le cookie dans le navigateur
-
Utilisateur existant
- Se reconnecter → doit utiliser l'UUID existant
- Vérifier que les données sont préservées
-
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éeslib/server-auth.ts→getUserUuidFromCookie()et adaptationslib/auth-utils.ts→ Types de retour UUID
APIs
app/api/auth/route.ts→ Cookies UUIDapp/api/evaluations/route.ts→getUserByUuid()app/api/evaluations/skills/route.ts→ Toutes méthodes*Uuid()
Infrastructure
middleware.ts→ Variables UUIDscripts/init.sql→ Schema DB initial avec UUIDs
🧹 Nettoyage futur
Une fois la migration validée, supprimer :
- Méthodes
upsertUser()etgetUserById()legacy - Colonnes
idetuser_iddans les tables (garder seulement UUIDs)