#!/bin/bash # Script de déploiement de la correction api_tokens.py # Basé sur le plan approuvé set -e echo "🚀 RPA Vision V3 - Déploiement Correction Authentification" 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 deploy_fix.sh" exit 1 fi # ============================================================================ # ÉTAPE 1 : Sauvegarde du Code Actuel # ============================================================================ echo "📦 ÉTAPE 1/5 : Sauvegarde du code production actuel" echo "---------------------------------------------------" BACKUP_DIR="/opt/rpa_vision_v3/core/security.backup_$(date +%Y%m%d_%H%M%S)" echo "Création de la sauvegarde dans: $BACKUP_DIR" if [ -d /opt/rpa_vision_v3/core/security ]; then cp -r /opt/rpa_vision_v3/core/security "$BACKUP_DIR" echo "✅ Sauvegarde créée avec succès" else echo "❌ Répertoire /opt/rpa_vision_v3/core/security introuvable!" exit 1 fi echo "" # ============================================================================ # ÉTAPE 2 : Déploiement du Code Mis à Jour # ============================================================================ echo "📂 ÉTAPE 2/5 : Déploiement du code mis à jour" echo "----------------------------------------------" SOURCE_FILE="/home/dom/ai/rpa_vision_v3/core/security/api_tokens.py" DEST_FILE="/opt/rpa_vision_v3/core/security/api_tokens.py" if [ ! -f "$SOURCE_FILE" ]; then echo "❌ Fichier source introuvable: $SOURCE_FILE" exit 1 fi echo "Copie de $SOURCE_FILE" echo " vers $DEST_FILE" cp "$SOURCE_FILE" "$DEST_FILE" echo "✅ Fichier copié" # Correction des permissions echo "Correction des permissions..." chown rpa:rpa "$DEST_FILE" chmod 644 "$DEST_FILE" echo "✅ Permissions configurées (rpa:rpa, 644)" echo "" # ============================================================================ # ÉTAPE 3 : Redémarrage des Services # ============================================================================ echo "🔄 ÉTAPE 3/5 : Redémarrage des services" echo "---------------------------------------" echo "Rechargement de la configuration systemd..." systemctl daemon-reload echo "✅ Configuration rechargée" echo "" SERVICES=( "rpa-vision-v3-api.service" "rpa-vision-v3-worker.service" "rpa-vision-v3-dashboard.service" ) echo "Redémarrage des services..." for service in "${SERVICES[@]}"; do echo -n " → $service... " if systemctl restart "$service" 2>/dev/null; then echo "✅" else echo "❌ ERREUR" echo "" echo "Erreur lors du redémarrage de $service" echo "Voir les logs: sudo journalctl -u $service -n 50" exit 1 fi done echo "" echo "⏳ Attente du démarrage complet (5 secondes)..." sleep 5 echo "" # Vérifier le statut des services echo "Vérification du statut des services:" for service in "${SERVICES[@]}"; do status=$(systemctl is-active "$service" 2>/dev/null || echo "failed") if [ "$status" = "active" ]; then echo " ✅ $service: $status" else echo " ❌ $service: $status" echo " Logs: sudo journalctl -u $service -n 20" fi done echo "" # ============================================================================ # ÉTAPE 4 : Vérification des Logs # ============================================================================ echo "📋 ÉTAPE 4/5 : Vérification du chargement des tokens" echo "----------------------------------------------------" echo "Recherche de 'TokenManager initialized' dans les logs..." TOKEN_LOG=$(journalctl -u rpa-vision-v3-api -n 100 --no-pager | grep -i "tokenmanager initialized" | tail -1) if [ -n "$TOKEN_LOG" ]; then echo "$TOKEN_LOG" if echo "$TOKEN_LOG" | grep -q "2 admin tokens, 2 read-only tokens"; then echo "✅ SUCCÈS : TokenManager a chargé 2 admin tokens et 2 read-only tokens" elif echo "$TOKEN_LOG" | grep -q "0 admin tokens"; then echo "❌ ÉCHEC : TokenManager affiche 0 admin tokens" echo " Le code n'a peut-être pas été mis à jour correctement" echo "" echo "Vérification du fichier déployé:" grep -n "prod_admin_token" "$DEST_FILE" | head -2 else echo "⚠️ AVERTISSEMENT : Nombre de tokens inattendu" echo "$TOKEN_LOG" fi else echo "❌ Aucune ligne 'TokenManager initialized' trouvée dans les logs" echo " Le service ne s'est peut-être pas démarré correctement" echo "" echo "Dernières lignes des logs:" journalctl -u rpa-vision-v3-api -n 10 --no-pager fi echo "" # ============================================================================ # ÉTAPE 5 : Test de l'API # ============================================================================ echo "🌐 ÉTAPE 5/5 : Test de l'authentification API" echo "---------------------------------------------" echo "Test 1: Requête sans authentification (devrait retourner unauthorized)" RESPONSE_NO_AUTH=$(curl -s http://localhost:8000/api/traces/status 2>/dev/null || echo '{"error":"connection_failed"}') echo " Réponse: $RESPONSE_NO_AUTH" if echo "$RESPONSE_NO_AUTH" | grep -q "unauthorized"; then echo " ✅ Comportement correct (unauthorized sans token)" else echo " ⚠️ Réponse inattendue" fi echo "" echo "Test 2: Requête avec token admin" ADMIN_TOKEN="73cf0db73f9a5064e79afebba96c85338be65cc2060b9c1d42c3ea5dd7d4e490" RESPONSE_WITH_AUTH=$(curl -s -H "Authorization: Bearer $ADMIN_TOKEN" http://localhost:8000/api/traces/status 2>/dev/null || echo '{"error":"connection_failed"}') echo " Réponse: $RESPONSE_WITH_AUTH" if echo "$RESPONSE_WITH_AUTH" | grep -q '"status"'; then echo " ✅ SUCCÈS : Authentification fonctionnelle!" echo "" echo "════════════════════════════════════════════════════════════" echo "✅ DÉPLOIEMENT RÉUSSI - Authentification Opérationnelle" echo "════════════════════════════════════════════════════════════" elif echo "$RESPONSE_WITH_AUTH" | grep -q "unauthorized"; then echo " ❌ ÉCHEC : Authentification retourne toujours unauthorized" echo "" echo "════════════════════════════════════════════════════════════" echo "❌ DÉPLOIEMENT INCOMPLET - Investigation Nécessaire" echo "════════════════════════════════════════════════════════════" echo "" echo "💡 Actions de débogage:" echo " 1. Vérifier les logs: sudo journalctl -u rpa-vision-v3-api -n 100" echo " 2. Vérifier le code déployé: grep -n 'prod_admin_token' $DEST_FILE" echo " 3. Restaurer si nécessaire: sudo cp -r $BACKUP_DIR /opt/rpa_vision_v3/core/security" else echo " ⚠️ Réponse inattendue: $RESPONSE_WITH_AUTH" fi echo "" # ============================================================================ # RÉSUMÉ # ============================================================================ echo "📊 RÉSUMÉ DU DÉPLOIEMENT" echo "========================" echo "" echo "Sauvegarde: $BACKUP_DIR" echo "Code déployé: $DEST_FILE" echo "" echo "Services:" for service in "${SERVICES[@]}"; do status=$(systemctl is-active "$service" 2>/dev/null || echo "failed") echo " - $service: $status" done echo "" if echo "$RESPONSE_WITH_AUTH" | grep -q '"status"'; then echo "✅ Statut Global: SUCCÈS" echo "" echo "🎯 Prochaines étapes:" echo " 1. Mettre à jour .env.local: bash fix_tokens_dev.sh" echo " 2. Tester l'agent: cd agent_v0 && ./run.sh" echo " 3. Vérifier l'upload: ls -lh /opt/rpa_vision_v3/data/training/sessions/" else echo "⚠️ Statut Global: ATTENTION REQUISE" echo "" echo "💡 Si le problème persiste, restaurer la sauvegarde:" echo " sudo cp -r $BACKUP_DIR /opt/rpa_vision_v3/core/security" echo " sudo systemctl restart rpa-vision-v3-*.service" fi echo ""