From f9d1f21011375132b4c32aee270dab28ffdfb9b8 Mon Sep 17 00:00:00 2001 From: Manus Sandbox Date: Sun, 23 Nov 2025 10:10:13 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Version=20finale=20avec=20authent?= =?UTF-8?q?ification=20locale=20corrig=C3=A9e=20:=20utilisation=20de=20sdk?= =?UTF-8?q?.createSessionToken()=20et=20configuration=20SameSite=3DLax=20p?= =?UTF-8?q?our=20compatibilit=C3=A9=20HTTP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.production.template | 68 +++++++++++++++ UPDATE.md | 184 +++++++++++++++++++++++++++++++++++++++ setup-env.sh | 159 +++++++++++++++++++++++++++++++++ todo.md | 6 ++ 4 files changed, 417 insertions(+) create mode 100644 .env.production.template create mode 100644 UPDATE.md create mode 100755 setup-env.sh diff --git a/.env.production.template b/.env.production.template new file mode 100644 index 0000000..c80416b --- /dev/null +++ b/.env.production.template @@ -0,0 +1,68 @@ +# ============================================================================ +# CONFIGURATION DE PRODUCTION - Formation Manager Itinova +# ============================================================================ + +# ---------------------------------------------------------------------------- +# Base de données +# ---------------------------------------------------------------------------- +DATABASE_URL=mysql://utilisateur:motdepasse@localhost:3306/formation_manager + +# ---------------------------------------------------------------------------- +# Sécurité - JWT +# ---------------------------------------------------------------------------- +# Générez un secret aléatoire avec: openssl rand -base64 32 +JWT_SECRET=CHANGEZ_MOI_SECRET_ALEATOIRE_32_CARACTERES + +# ---------------------------------------------------------------------------- +# Application +# ---------------------------------------------------------------------------- +PORT=3000 +NODE_ENV=production + +# Titre de l'application +VITE_APP_TITLE=Gestion des Formations Manager Itinova + +# Logo de l'application (chemin relatif dans public/) +VITE_APP_LOGO=/logo-itinova.png + +# ---------------------------------------------------------------------------- +# OAuth Manus (pour connexion OAuth - optionnel si vous utilisez uniquement local) +# ---------------------------------------------------------------------------- +# Si vous n'utilisez PAS l'authentification Manus OAuth, vous pouvez laisser +# ces valeurs par défaut ou les commenter + +VITE_APP_ID=formation-manager-itinova +OAUTH_SERVER_URL=https://api.manus.im +VITE_OAUTH_PORTAL_URL=https://portal.manus.im +OWNER_OPEN_ID=local-owner +OWNER_NAME=Administrateur + +# ---------------------------------------------------------------------------- +# SMTP - Configuration email (pour envoi d'emails) +# ---------------------------------------------------------------------------- +# Laissez vide si vous n'utilisez pas l'envoi d'emails pour le moment +SMTP_HOST= +SMTP_PORT= +SMTP_USER= +SMTP_PASS= +SMTP_FROM= + +# ---------------------------------------------------------------------------- +# Resend API (alternative à SMTP) +# ---------------------------------------------------------------------------- +# Si vous utilisez Resend pour l'envoi d'emails +RESEND_API_KEY= + +# ---------------------------------------------------------------------------- +# Analytics (optionnel) +# ---------------------------------------------------------------------------- +VITE_ANALYTICS_ENDPOINT= +VITE_ANALYTICS_WEBSITE_ID= + +# ---------------------------------------------------------------------------- +# API Forge Manus (pour fonctionnalités avancées - optionnel) +# ---------------------------------------------------------------------------- +BUILT_IN_FORGE_API_URL= +BUILT_IN_FORGE_API_KEY= +VITE_FRONTEND_FORGE_API_KEY= +VITE_FRONTEND_FORGE_API_URL= diff --git a/UPDATE.md b/UPDATE.md new file mode 100644 index 0000000..e0eb20a --- /dev/null +++ b/UPDATE.md @@ -0,0 +1,184 @@ +# Guide de mise à jour sur VPS + +## Problème résolu dans cette version + +Cette mise à jour corrige le problème de redirection vers `portal.manus.im` après une connexion locale réussie. + +**Cause** : Incompatibilité entre les bibliothèques JWT utilisées pour créer et vérifier les tokens de session. + +**Solution** : Utilisation de la même méthode de signature (`sdk.createSessionToken()`) que le système OAuth. + +--- + +## Procédure de mise à jour + +### 1. Sauvegarder la configuration actuelle + +```bash +# Sauvegarder le fichier .env +cp /var/www/formation-manager-itinova/.env /var/www/formation-manager-itinova/.env.backup + +# Sauvegarder la base de données (optionnel mais recommandé) +mysqldump -u votre_utilisateur -p formation_manager > backup_$(date +%Y%m%d_%H%M%S).sql +``` + +### 2. Arrêter le service + +```bash +sudo systemctl stop formation-manager +``` + +### 3. Extraire la nouvelle version + +```bash +# Aller dans le répertoire parent +cd /var/www + +# Sauvegarder l'ancienne version +mv formation-manager-itinova formation-manager-itinova.old + +# Extraire la nouvelle archive +tar -xzf formation-manager-itinova-final-fixed.tar.gz + +# Restaurer le fichier .env +cp formation-manager-itinova.old/.env formation-manager-itinova/.env + +# Définir les bonnes permissions +chown -R www-data:www-data formation-manager-itinova +``` + +### 4. Installer les dépendances + +```bash +cd formation-manager-itinova +pnpm install +``` + +### 5. Appliquer les migrations de base de données + +```bash +pnpm db:push +``` + +### 6. Compiler l'application + +```bash +pnpm build +``` + +### 7. Redémarrer le service + +```bash +sudo systemctl start formation-manager +sudo systemctl status formation-manager +``` + +### 8. Vérifier les logs + +```bash +# Voir les logs en temps réel +sudo journalctl -u formation-manager -f + +# Voir les dernières lignes +sudo journalctl -u formation-manager -n 50 +``` + +--- + +## Vérification que la mise à jour a fonctionné + +### Test de connexion locale + +1. Ouvrir votre navigateur et aller sur votre site +2. Cliquer sur "Connexion Locale" +3. Entrer : + - **Identifiant** : adminServFormation + - **Mot de passe** : Itinova69! +4. Cliquer sur "Se connecter" + +**Résultat attendu** : Vous devez être redirigé vers le tableau de bord (`/admin`) et rester connecté, sans être redirigé vers `portal.manus.im`. + +### Vérifier le cookie de session + +Ouvrir les outils de développement du navigateur (F12) : +1. Aller dans l'onglet "Application" (Chrome) ou "Stockage" (Firefox) +2. Regarder les cookies +3. Vous devez voir un cookie nommé `manus-session` avec une valeur JWT + +### Vérifier que l'API fonctionne + +Ouvrir la console du navigateur (F12) et taper : + +```javascript +fetch('/api/trpc/auth.me', { + credentials: 'include' +}).then(r => r.json()).then(console.log) +``` + +**Résultat attendu** : Vous devez voir vos informations utilisateur, pas une erreur d'authentification. + +--- + +## En cas de problème + +### Le service ne démarre pas + +```bash +# Vérifier les erreurs +sudo journalctl -u formation-manager -n 100 + +# Vérifier que les dépendances sont installées +cd /var/www/formation-manager-itinova +pnpm install +``` + +### Toujours redirigé vers portal.manus.im + +1. Vérifier que vous avez bien extrait la **nouvelle** archive +2. Vérifier que le service a bien redémarré : + ```bash + sudo systemctl restart formation-manager + ``` +3. Vider le cache du navigateur et supprimer les cookies +4. Vérifier les logs du serveur : + ```bash + sudo journalctl -u formation-manager -f + ``` + +### L'utilisateur admin n'existe pas + +```bash +cd /var/www/formation-manager-itinova +./create-admin.sh +``` + +--- + +## Rollback (retour à l'ancienne version) + +Si la mise à jour pose problème : + +```bash +# Arrêter le service +sudo systemctl stop formation-manager + +# Restaurer l'ancienne version +cd /var/www +rm -rf formation-manager-itinova +mv formation-manager-itinova.old formation-manager-itinova + +# Redémarrer +sudo systemctl start formation-manager +``` + +--- + +## Support + +Si vous rencontrez des problèmes après avoir suivi ce guide : + +1. Vérifiez les logs : `sudo journalctl -u formation-manager -n 100` +2. Exécutez le script de diagnostic : `./diagnose.sh` +3. Exécutez le script de vérification : `./verify-login.sh` + +Ces scripts vous donneront des informations détaillées sur la configuration et les problèmes éventuels. diff --git a/setup-env.sh b/setup-env.sh new file mode 100755 index 0000000..c0a1abc --- /dev/null +++ b/setup-env.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +############################################################################### +# Script de configuration du fichier .env pour production +############################################################################### + +set -e + +# Couleurs +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +echo "╔════════════════════════════════════════════════════════════════╗" +echo "║ Configuration du fichier .env pour production ║" +echo "╚════════════════════════════════════════════════════════════════╝" +echo "" + +# Vérifier si .env existe déjà +if [ -f ".env" ]; then + echo -e "${YELLOW}[WARN]${NC} Le fichier .env existe déjà" + read -p "Voulez-vous le remplacer? (y/N) " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Configuration annulée" + exit 0 + fi + # Sauvegarder l'ancien + cp .env .env.backup.$(date +%Y%m%d_%H%M%S) + echo -e "${GREEN}[OK]${NC} Ancien fichier sauvegardé" +fi + +echo "Ce script va créer un fichier .env avec les paramètres minimaux requis." +echo "" + +# Demander DATABASE_URL +echo "═══════════════════════════════════════════════════════════════" +echo " 1. Configuration de la base de données" +echo "═══════════════════════════════════════════════════════════════" +echo "" +read -p "Hôte MySQL (défaut: localhost): " DB_HOST +DB_HOST=${DB_HOST:-localhost} + +read -p "Port MySQL (défaut: 3306): " DB_PORT +DB_PORT=${DB_PORT:-3306} + +read -p "Nom de la base de données (défaut: formation_manager): " DB_NAME +DB_NAME=${DB_NAME:-formation_manager} + +read -p "Utilisateur MySQL: " DB_USER +read -sp "Mot de passe MySQL: " DB_PASS +echo "" + +DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}" + +echo "" +echo "═══════════════════════════════════════════════════════════════" +echo " 2. Génération du JWT_SECRET" +echo "═══════════════════════════════════════════════════════════════" +echo "" + +JWT_SECRET=$(openssl rand -base64 32) +echo -e "${GREEN}[OK]${NC} JWT_SECRET généré: ${JWT_SECRET:0:20}..." + +echo "" +echo "═══════════════════════════════════════════════════════════════" +echo " 3. Configuration de l'application" +echo "═══════════════════════════════════════════════════════════════" +echo "" + +read -p "Port de l'application (défaut: 3000): " PORT +PORT=${PORT:-3000} + +read -p "Titre de l'application (défaut: Gestion des Formations Manager Itinova): " APP_TITLE +APP_TITLE=${APP_TITLE:-Gestion des Formations Manager Itinova} + +# Créer le fichier .env +cat > .env << EOF +# ============================================================================ +# CONFIGURATION DE PRODUCTION - Formation Manager Itinova +# Généré le $(date) +# ============================================================================ + +# ---------------------------------------------------------------------------- +# Base de données +# ---------------------------------------------------------------------------- +DATABASE_URL=${DATABASE_URL} + +# ---------------------------------------------------------------------------- +# Sécurité - JWT +# ---------------------------------------------------------------------------- +JWT_SECRET=${JWT_SECRET} + +# ---------------------------------------------------------------------------- +# Application +# ---------------------------------------------------------------------------- +PORT=${PORT} +NODE_ENV=production + +# Titre de l'application +VITE_APP_TITLE=${APP_TITLE} + +# Logo de l'application +VITE_APP_LOGO=/logo-itinova.png + +# ---------------------------------------------------------------------------- +# OAuth Manus (configuration minimale pour éviter les erreurs) +# ---------------------------------------------------------------------------- +VITE_APP_ID=formation-manager-itinova +OAUTH_SERVER_URL=https://api.manus.im +VITE_OAUTH_PORTAL_URL=https://portal.manus.im +OWNER_OPEN_ID=local-owner +OWNER_NAME=Administrateur + +# ---------------------------------------------------------------------------- +# SMTP - Configuration email (optionnel) +# ---------------------------------------------------------------------------- +# Laissez vide si vous n'utilisez pas l'envoi d'emails +SMTP_HOST= +SMTP_PORT= +SMTP_USER= +SMTP_PASS= +SMTP_FROM= + +# ---------------------------------------------------------------------------- +# Analytics (optionnel) +# ---------------------------------------------------------------------------- +VITE_ANALYTICS_ENDPOINT= +VITE_ANALYTICS_WEBSITE_ID= + +# ---------------------------------------------------------------------------- +# API Forge Manus (optionnel) +# ---------------------------------------------------------------------------- +BUILT_IN_FORGE_API_URL= +BUILT_IN_FORGE_API_KEY= +VITE_FRONTEND_FORGE_API_KEY= +VITE_FRONTEND_FORGE_API_URL= +EOF + +echo "" +echo "╔════════════════════════════════════════════════════════════════╗" +echo "║ Fichier .env créé avec succès! ║" +echo "╚════════════════════════════════════════════════════════════════╝" +echo "" +echo "📄 Fichier créé: $(pwd)/.env" +echo "" +echo "⚠️ IMPORTANT:" +echo " 1. Le fichier .env contient des informations sensibles" +echo " 2. Ne le partagez jamais publiquement" +echo " 3. Assurez-vous qu'il n'est pas accessible via le web" +echo "" +echo "🔄 Prochaines étapes:" +echo " 1. Vérifiez la configuration: cat .env" +echo " 2. Appliquez les migrations: pnpm db:push" +echo " 3. Compilez l'application: pnpm build" +echo " 4. Redémarrez le service: sudo systemctl restart formation-manager" +echo "" diff --git a/todo.md b/todo.md index a20719c..11f2066 100644 --- a/todo.md +++ b/todo.md @@ -453,3 +453,9 @@ - [x] Analyser pourquoi la page de choix ne s'affiche pas au lancement - [x] Corriger la redirection automatique - [x] Tester l'affichage de la page de choix + +## Sauvegarde complète avec corrections authentification + +- [x] Appliquer toutes les corrections d'authentification locale +- [x] Créer un checkpoint final +- [ ] Créer un package de déploiement complet