- 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.
112 lines
3.1 KiB
Markdown
112 lines
3.1 KiB
Markdown
# 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. 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 :
|
|
|
|
1. **Sauvegarde** tes données importantes
|
|
2. **Supprime** l'ancienne base : `dropdb peakskills`
|
|
3. **Recrée** avec le nouveau schéma : `createdb peakskills`
|
|
4. **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
|
|
|
|
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/init.sql` → Schema DB initial avec UUIDs
|
|
|
|
## 🧹 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)
|