Complete family planning application with: - React frontend with TypeScript - Node.js/Express backend with TypeScript - Python ingestion service for document processing - Planning ingestion service with LLM integration - Shared UI components and type definitions - OAuth integration for calendar synchronization - Comprehensive documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8.8 KiB
✅ Configuration OAuth Google Calendar - RÉSUMÉ COMPLET
🎉 État actuel : OPÉRATIONNEL
✅ Ce qui a été fait
-
✅ Client OAuth Google créé
- Projet:
familyplanner-474915 - Client ID:
645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com - Client Secret:
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 - État: Activé
- Projet:
-
✅ Fichier
.envconfiguré- Credentials Google ajoutées
- URIs de redirection configurées
- Sécurisé via
.gitignore
-
✅ Backend démarré avec succès
Server ready on port 5000 CORS: http://localhost:5173, http://localhost:5174, http://localhost:3000 -
✅ Correction erreur OAuth "response_type missing"
- URL OAuth complète avec tous les paramètres requis
- Fichier
calendar.tscorrigé 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
- Allez sur Google Cloud Console
- Sélectionnez le projet familyplanner-474915
- Menu APIs & Services > OAuth consent screen
- Section Test users
- Cliquez sur ADD USERS
- Ajoutez :
phil.heyraud@gmail.com - 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
cd frontend
npm run dev
3. Tester dans l'interface
- Ouvrez votre navigateur :
http://localhost:5174 - Allez dans Paramètres ou Profil
- Section Agendas connectés
- Cliquez sur "Continuer avec Google"
Ce qui devrait se passer :
- Redirection vers
accounts.google.com - Page de connexion Google (si pas déjà connecté)
- Page de consentement demandant l'accès au calendrier
- Acceptation → Redirection vers l'app
- 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
.envdans.gitignore(secrets non versionnés)- Client secret stocké uniquement dans
.env - 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 :
// 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 :
- Google Cloud Console > OAuth consent screen
- Ajoutez
phil.heyraud@gmail.comen utilisateur de test
Erreur "redirect_uri_mismatch"
Cause : L'URI de redirection ne correspond pas exactement
Solution :
- Vérifiez dans Google Cloud Console > Credentials
- URIs autorisées doivent être exactement :
http://localhost:5000/api/calendar/oauth/callbackhttp://localhost:5174/calendar/oauth/callback
- Pas d'espace, pas de
/à la fin, bon port
Erreur "invalid_client"
Cause : Client ID ou Secret incorrect
Solution :
- Vérifiez
backend/.env:GOOGLE_CLIENT_ID=645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=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 - 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
✅ Checklist complète
Configuration OAuth Google
- Créer projet Google Cloud
- Activer l'API Google Calendar
- Créer credentials OAuth 2.0
- Configurer URIs de redirection
- Copier Client ID et Secret dans
.env - Ajouter utilisateurs de test ⚠️ CRITIQUE
- Tester l'URL OAuth manuellement
Code Backend
- Corriger l'URL OAuth (ajouter
response_type) - Placer
calendar.tsau bon endroit - 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é
.envdans.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 :
- ✅ Tester la connexion Google Calendar depuis votre app
- ⏳ Implémenter la récupération des événements
- ⏳ 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)