Files
peakskills/MIGRATION_UUID.md
Julien Froidefond a4b680b092 refactor: update database setup and remove skills migration API
- 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.
2025-08-21 15:21:36 +02:00

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 :

  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.tsgetUserUuidFromCookie() et adaptations
  • lib/auth-utils.ts → Types de retour UUID

APIs

  • app/api/auth/route.ts → Cookies UUID
  • app/api/evaluations/route.tsgetUserByUuid()
  • 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)