# Système d'Authentification par Mot de Passe

## Résumé des modifications

J'ai implémenté un système d'authentification par mot de passe en complément du système OTP existant. Voici les principales modifications :

## 🔧 Nouveaux endpoints API

### `/api/auth/signin-password` (POST)
- Permet la connexion avec email/mot de passe
- Retourne une session et définit un cookie httpOnly `access_token`
- Effectue les mêmes vérifications de sécurité que le système OTP (staff/revocation)

### `/api/auth/password-update` (POST)
- Met à jour le mot de passe d'un utilisateur connecté
- Marque l'utilisateur comme ayant un mot de passe (`user_metadata.hasPassword = true`)
- Exige un mot de passe d'au moins 12 caractères

### `/api/auth/password-status` (GET)
- Récupère le statut du mot de passe pour un utilisateur connecté
- Retourne `{ hasPassword: boolean }`

## 🎨 Interface utilisateur

### Page de sécurité (`/compte/securite`)
- ✅ La card de changement de mot de passe est maintenant **fonctionnelle**
- ✅ Utilise les endpoints API sécurisés au lieu de Supabase directement
- ✅ Affiche le statut du mot de passe (défini/non défini)
- ⚠️ Section 2FA temporairement désactivée comme demandé

### Page de connexion (`/signin`)
- ✅ **Nouveau toggle** pour choisir entre "Code par e-mail" et "Mot de passe"
- ✅ Mode mot de passe : champs email + password
- ✅ Mode OTP : comportement existant inchangé
- ✅ Interface cohérente avec le design existant

## 🔐 Sécurité

- Les mots de passe sont gérés par Supabase Auth (chiffrement automatique)
- Les mêmes vérifications de révocation s'appliquent aux deux modes d'auth
- Les cookies `access_token` httpOnly maintiennent la sécurité de session
- Minimum 12 caractères pour les mots de passe

## 📋 Utilisation

### Pour les utilisateurs
1. **Définir un mot de passe** : Aller sur `/compte/securite` → section "Mot de passe (facultatif)"
2. **Se connecter** : Sur `/signin`, choisir "Mot de passe" au lieu de "Code par e-mail"

### Pour les développeurs
- Les endpoints existants n'ont pas été modifiés
- Le middleware et la gestion des sessions restent identiques
- Les métadonnées utilisateur incluent maintenant `hasPassword: true` quand applicable

## ✅ Tests à effectuer

1. [ ] Créer un mot de passe depuis la page de sécurité
2. [ ] Vérifier que le statut "Mot de passe défini" s'affiche
3. [ ] Se connecter avec email/mot de passe
4. [ ] Vérifier que l'ancien système OTP fonctionne toujours
5. [ ] Tester avec un utilisateur staff
6. [ ] Tester avec un utilisateur révoqué

## 🚀 Prochaines étapes suggérées

1. **Réinitialisation de mot de passe** : Endpoint pour changer un mot de passe oublié
2. **2FA** : Réactiver et intégrer la double authentification
3. **Politique de mot de passe** : Ajouter des règles de complexité configurables
4. **Audit** : Logger les tentatives de connexion par mot de passe

---

Le système est maintenant **prêt à utiliser** avec les deux modes d'authentification fonctionnels ! 🎉