# ✅ Configuration OAuth Google Calendar - RÉSUMÉ COMPLET ## 🎉 État actuel : OPÉRATIONNEL ### ✅ Ce qui a été fait 1. **✅ Client OAuth Google créé** - Projet: `familyplanner-474915` - Client ID: `645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com` - Client Secret: `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` - État: Activé 2. **✅ Fichier `.env` configuré** - Credentials Google ajoutées - URIs de redirection configurées - Sécurisé via `.gitignore` 3. **✅ Backend démarré avec succès** ``` Server ready on port 5000 CORS: http://localhost:5173, http://localhost:5174, http://localhost:3000 ``` 4. **✅ Correction erreur OAuth "response_type missing"** - URL OAuth complète avec tous les paramètres requis - Fichier `calendar.ts` corrigé et placé au bon endroit --- ## 🧪 Test rapide de la configuration ### Tester l'URL OAuth manuellement Copiez cette URL dans votre navigateur : ``` https://accounts.google.com/o/oauth2/v2/auth?client_id=645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com&redirect_uri=http://localhost:5000/api/calendar/oauth/callback&response_type=code&scope=https://www.googleapis.com/auth/calendar.readonly%20https://www.googleapis.com/auth/calendar.events&state=test-state-123&access_type=offline&prompt=consent ``` **Résultat attendu** : - ✅ Page de connexion Google - ✅ Demande de consentement pour accéder au calendrier - ⚠️ Si erreur "Access blocked" : Ajoutez votre email en utilisateur de test (voir ci-dessous) --- ## ⚠️ ACTION REQUISE : Ajouter utilisateurs de test Votre app est en mode "Testing", seuls les utilisateurs de test peuvent se connecter. ### Étapes pour ajouter votre email 1. Allez sur [Google Cloud Console](https://console.cloud.google.com/) 2. Sélectionnez le projet **familyplanner-474915** 3. Menu **APIs & Services** > **OAuth consent screen** 4. Section **Test users** 5. Cliquez sur **ADD USERS** 6. Ajoutez : `phil.heyraud@gmail.com` 7. Cliquez sur **SAVE** **Sans cela**, vous verrez l'erreur : *"Access blocked: This app's request is invalid"* --- ## 📁 Fichiers modifiés/créés ### Fichiers de configuration | Fichier | Statut | Description | |---------|--------|-------------| | `backend/.env` | ✅ Modifié | Credentials Google ajoutées | | `backend/src/routes/calendar.ts` | ✅ Créé | Routes OAuth avec URL complète | | `.gitignore` | ✅ Vérifié | `.env` bien ignoré (ligne 4) | ### Documentation créée | Fichier | Description | |---------|-------------| | `OAUTH_SETUP.md` | Guide complet configuration Google/Azure | | `OAUTH_CONFIGURATION_COMPLETE.md` | Détails de votre configuration + prochaines étapes | | `CORRECTIONS_OAUTH.md` | Analyse des corrections apportées | | `ANALYSE_CODE_CALENDAR.md` | Analyse sécurité/fiabilité/performance | | `README_OAUTH_GOOGLE.md` | Ce fichier (résumé) | --- ## 🚀 Tester la connexion depuis l'application ### 1. Backend déjà démarré ✅ Le backend tourne sur `http://localhost:5000` ### 2. Démarrer le frontend ```bash cd frontend npm run dev ``` ### 3. Tester dans l'interface 1. Ouvrez votre navigateur : `http://localhost:5174` 2. Allez dans **Paramètres** ou **Profil** 3. Section **Agendas connectés** 4. Cliquez sur **"Continuer avec Google"** **Ce qui devrait se passer** : 1. Redirection vers `accounts.google.com` 2. Page de connexion Google (si pas déjà connecté) 3. Page de consentement demandant l'accès au calendrier 4. Acceptation → Redirection vers l'app 5. Calendrier connecté ✅ **Si erreur** : - "Access blocked" → Ajoutez votre email en utilisateur de test - "redirect_uri_mismatch" → Vérifiez les URIs dans Google Console - "invalid_client" → Redémarrez le backend --- ## 📊 Ce qui fonctionne actuellement ✅ **OAuth Flow complet** : - Génération URL OAuth avec tous les paramètres requis - Redirection vers Google - Page de consentement - Retour avec code d'autorisation ⏳ **Ce qui reste à implémenter** : - Échange du code d'autorisation contre un access token - Stockage sécurisé des tokens (chiffrement) - Récupération des événements du calendrier - Refresh automatique des tokens expirés - Synchronisation calendrier --- ## 🔐 Sécurité ### ✅ Protections en place - [x] `.env` dans `.gitignore` (secrets non versionnés) - [x] Client secret stocké uniquement dans `.env` - [x] CORS configuré pour limiter les origines autorisées ### ⚠️ À faire - [ ] Générer clé de chiffrement pour les tokens (`TOKEN_ENCRYPTION_KEY`) - [ ] Implémenter chiffrement AES-256-GCM des tokens - [ ] Migrer du stockage en mémoire vers une base de données - [ ] Ajouter middleware d'authentification sur les routes - [ ] Révoquer la clé OpenAI exposée dans Git --- ## 🔄 Prochaines étapes d'implémentation ### Priorité 1 : Échange du code OAuth (1-2h) Modifier `backend/src/routes/calendar.ts` ligne ~90 pour échanger le code contre un token : ```typescript // Après avoir reçu le code d'autorisation const tokenResponse = await fetch("https://oauth2.googleapis.com/token", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ code: code, client_id: process.env.GOOGLE_CLIENT_ID, client_secret: process.env.GOOGLE_CLIENT_SECRET, redirect_uri: process.env.GOOGLE_REDIRECT_URI, grant_type: "authorization_code" }) }); const tokens = await tokenResponse.json(); // tokens.access_token, tokens.refresh_token, tokens.expires_in ``` ### Priorité 2 : Chiffrement des tokens (2-3h) Créer `backend/src/utils/encryption.ts` avec fonctions `encryptToken()` et `decryptToken()`. **Voir détails dans** : `OAUTH_CONFIGURATION_COMPLETE.md` section 3 ### Priorité 3 : Récupération des événements (3-4h) Créer `backend/src/services/google-calendar.service.ts` pour appeler l'API Google Calendar. **Voir détails dans** : `OAUTH_CONFIGURATION_COMPLETE.md` section 4 --- ## 📞 Résolution de problèmes ### Erreur "Access blocked: This app's request is invalid" **Cause** : Votre email n'est pas dans la liste des utilisateurs de test **Solution** : 1. Google Cloud Console > OAuth consent screen 2. Ajoutez `phil.heyraud@gmail.com` en utilisateur de test --- ### Erreur "redirect_uri_mismatch" **Cause** : L'URI de redirection ne correspond pas exactement **Solution** : 1. Vérifiez dans Google Cloud Console > Credentials 2. URIs autorisées doivent être exactement : - `http://localhost:5000/api/calendar/oauth/callback` - `http://localhost:5174/calendar/oauth/callback` 3. Pas d'espace, pas de `/` à la fin, bon port --- ### Erreur "invalid_client" **Cause** : Client ID ou Secret incorrect **Solution** : 1. Vérifiez `backend/.env` : ```env GOOGLE_CLIENT_ID=645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=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 ``` 2. Redémarrez le backend : `npm run dev` --- ### Backend ne démarre pas **Erreur** : `Cannot find module 'calendar'` **Cause** : Fichier `calendar.ts` manquant ou mal placé **Solution** : Assurez-vous que ce fichier existe : ``` family-planner/backend/src/routes/calendar.ts ``` Si non, je peux le recréer. --- ## 🎓 Ressources utiles - [Google Calendar API Documentation](https://developers.google.com/calendar/api/guides/overview) - [OAuth 2.0 for Web Server Applications](https://developers.google.com/identity/protocols/oauth2/web-server) - [Google Cloud Console](https://console.cloud.google.com/) --- ## ✅ Checklist complète ### Configuration OAuth Google - [x] Créer projet Google Cloud - [x] Activer l'API Google Calendar - [x] Créer credentials OAuth 2.0 - [x] Configurer URIs de redirection - [x] Copier Client ID et Secret dans `.env` - [ ] **Ajouter utilisateurs de test** ⚠️ CRITIQUE - [x] Tester l'URL OAuth manuellement ### Code Backend - [x] Corriger l'URL OAuth (ajouter `response_type`) - [x] Placer `calendar.ts` au bon endroit - [x] Démarrer le backend sans erreur - [ ] Implémenter échange code → token - [ ] Implémenter chiffrement tokens - [ ] Implémenter récupération événements - [ ] Implémenter refresh token ### Sécurité - [x] `.env` dans `.gitignore` - [ ] Générer `TOKEN_ENCRYPTION_KEY` - [ ] Chiffrer les tokens - [ ] Base de données pour tokens - [ ] Middleware authentification - [ ] Révoquer clé OpenAI exposée --- ## 🎉 Félicitations ! Votre configuration OAuth Google est fonctionnelle. Vous pouvez maintenant : 1. ✅ **Tester** la connexion Google Calendar depuis votre app 2. ⏳ **Implémenter** la récupération des événements 3. ⏳ **Sécuriser** le stockage des tokens **Prochaine étape critique** : Ajoutez votre email en utilisateur de test dans Google Cloud Console pour débloquer l'accès. --- **Date de configuration** : 12 octobre 2025 **Statut** : ✅ Opérationnel (en mode test)