#!/bin/bash # Script de synchronisation du mot de passe de chiffrement # entre l'agent (.env.local) et le serveur (/etc/rpa_vision_v3/rpa_vision_v3.env) set -e echo "🔐 RPA Vision V3 - Synchronisation Mot de Passe Chiffrement" echo "============================================================" echo "" # Vérifier qu'on est bien root ou avec sudo if [ "$EUID" -ne 0 ]; then echo "❌ Ce script doit être exécuté avec sudo" echo "Usage: sudo bash sync_encryption_password.sh" exit 1 fi # Fichiers DEV_ENV="/home/dom/ai/rpa_vision_v3/.env.local" PROD_ENV="/etc/rpa_vision_v3/rpa_vision_v3.env" echo "📂 Fichiers concernés:" echo " - Agent (dev): $DEV_ENV" echo " - Serveur (prod): $PROD_ENV" echo "" # Lire le mot de passe de l'agent echo "🔍 Lecture du mot de passe actuel de l'agent..." AGENT_PASSWORD=$(grep "^ENCRYPTION_PASSWORD=" "$DEV_ENV" | cut -d'=' -f2) if [ -z "$AGENT_PASSWORD" ]; then echo "❌ ENCRYPTION_PASSWORD non trouvé dans $DEV_ENV" exit 1 fi echo " Agent utilise: ${AGENT_PASSWORD:0:20}..." echo "" # Lire le mot de passe du serveur echo "🔍 Lecture du mot de passe actuel du serveur..." if [ -f "$PROD_ENV" ]; then SERVER_PASSWORD=$(grep "^ENCRYPTION_PASSWORD=" "$PROD_ENV" 2>/dev/null | cut -d'=' -f2 || echo "") if [ -z "$SERVER_PASSWORD" ]; then echo " ⚠️ ENCRYPTION_PASSWORD non défini dans le fichier serveur" else echo " Serveur utilise: ${SERVER_PASSWORD:0:20}..." fi else echo " ❌ Fichier $PROD_ENV introuvable" exit 1 fi echo "" # Comparer les mots de passe if [ "$AGENT_PASSWORD" = "$SERVER_PASSWORD" ]; then echo "✅ Les mots de passe sont déjà identiques!" echo "" echo "Pas d'action nécessaire." exit 0 fi # Créer une sauvegarde echo "💾 Création d'une sauvegarde..." BACKUP_FILE="${PROD_ENV}.backup_$(date +%Y%m%d_%H%M%S)" cp "$PROD_ENV" "$BACKUP_FILE" echo " ✓ Sauvegarde: $BACKUP_FILE" echo "" # Mettre à jour le fichier serveur echo "🔄 Synchronisation du mot de passe..." TEMP_FILE=$(mktemp) # Si ENCRYPTION_PASSWORD existe déjà, le remplacer, sinon l'ajouter if grep -q "^ENCRYPTION_PASSWORD=" "$PROD_ENV"; then # Remplacer la ligne existante while IFS= read -r line; do if [[ $line =~ ^ENCRYPTION_PASSWORD= ]]; then echo "ENCRYPTION_PASSWORD=$AGENT_PASSWORD" else echo "$line" fi done < "$PROD_ENV" > "$TEMP_FILE" else # Ajouter la ligne cat "$PROD_ENV" > "$TEMP_FILE" echo "" >> "$TEMP_FILE" echo "# Mot de passe de chiffrement (synchronisé avec agent)" >> "$TEMP_FILE" echo "ENCRYPTION_PASSWORD=$AGENT_PASSWORD" >> "$TEMP_FILE" fi # Remplacer le fichier original mv "$TEMP_FILE" "$PROD_ENV" # Restaurer les permissions chown root:rpa "$PROD_ENV" chmod 640 "$PROD_ENV" echo " ✓ Mot de passe synchronisé" echo "" # Redémarrer les services echo "🔄 Redémarrage des services..." systemctl restart rpa-vision-v3-api.service systemctl restart rpa-vision-v3-worker.service echo " ✓ Services redémarrés" echo "" # Attendre que les services démarrent echo "⏳ Attente du démarrage (3 secondes)..." sleep 3 echo "" # Vérifier le statut echo "📊 Statut des services:" for service in rpa-vision-v3-api rpa-vision-v3-worker; do status=$(systemctl is-active $service 2>/dev/null || echo "failed") if [ "$status" = "active" ]; then echo " ✅ $service: $status" else echo " ❌ $service: $status" fi done echo "" echo "✅ SYNCHRONISATION TERMINÉE" echo "" echo "📝 Vérification:" echo " Agent: ${AGENT_PASSWORD:0:20}..." echo " Serveur: ${AGENT_PASSWORD:0:20}..." echo "" echo "🎯 Prochaines étapes:" echo " 1. Tester l'agent: cd agent_v0 && ./run.sh" echo " 2. Vérifier l'upload: ls -lht /opt/rpa_vision_v3/data/training/sessions/" echo "" echo "💾 En cas de problème, restaurer:" echo " sudo cp $BACKUP_FILE $PROD_ENV" echo " sudo systemctl restart rpa-vision-v3-*.service"