274 lines
12 KiB
Bash
Executable File
274 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
###############################################################################
|
|
# Script de vérification de la configuration de connexion
|
|
# Vérifie que tout est en place pour que la connexion fonctionne
|
|
###############################################################################
|
|
|
|
set -e
|
|
|
|
# Couleurs
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ Vérification de la configuration de connexion ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
# Charger les variables d'environnement
|
|
if [ -f ".env" ]; then
|
|
export $(cat .env | grep -v '^#' | xargs 2>/dev/null)
|
|
else
|
|
echo -e "${RED}[ERREUR]${NC} Fichier .env non trouvé"
|
|
exit 1
|
|
fi
|
|
|
|
# Extraire les informations de connexion
|
|
DB_USER=$(echo $DATABASE_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
|
DB_PASS=$(echo $DATABASE_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
|
DB_HOST=$(echo $DATABASE_URL | sed -n 's/.*@\([^:]*\):.*/\1/p')
|
|
DB_PORT=$(echo $DATABASE_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
|
DB_NAME=$(echo $DATABASE_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
|
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " 1. VÉRIFICATION JWT_SECRET"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
if [ -z "$JWT_SECRET" ]; then
|
|
echo -e "${RED}[ERREUR]${NC} JWT_SECRET n'est pas définie dans .env"
|
|
echo -e "${YELLOW}[ACTION]${NC} Ajoutez JWT_SECRET dans .env:"
|
|
echo " JWT_SECRET=$(openssl rand -base64 32)"
|
|
JWT_OK=false
|
|
else
|
|
echo -e "${GREEN}[OK]${NC} JWT_SECRET est définie"
|
|
SECRET_LENGTH=${#JWT_SECRET}
|
|
echo " Longueur: $SECRET_LENGTH caractères"
|
|
if [ $SECRET_LENGTH -lt 32 ]; then
|
|
echo -e "${YELLOW}[WARN]${NC} JWT_SECRET est trop courte (recommandé: 32+ caractères)"
|
|
JWT_OK=false
|
|
else
|
|
JWT_OK=true
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " 2. VÉRIFICATION DE L'UTILISATEUR DANS LA BASE DE DONNÉES"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Vérifier l'utilisateur
|
|
USER_INFO=$(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME -se "SELECT username, email, role, isActive, loginMethod, LENGTH(password) as pwd_len FROM users WHERE username='adminServFormation';" 2>/dev/null)
|
|
|
|
if [ -z "$USER_INFO" ]; then
|
|
echo -e "${RED}[ERREUR]${NC} Utilisateur 'adminServFormation' n'existe pas"
|
|
echo -e "${YELLOW}[ACTION]${NC} Exécutez: ./create-admin.sh"
|
|
USER_OK=false
|
|
else
|
|
echo -e "${GREEN}[OK]${NC} Utilisateur 'adminServFormation' existe"
|
|
echo ""
|
|
echo "Détails de l'utilisateur:"
|
|
|
|
# Parser les informations
|
|
IFS=$'\t' read -r username email role isActive loginMethod pwd_len <<< "$USER_INFO"
|
|
|
|
echo " Username: $username"
|
|
echo " Email: $email"
|
|
echo " Role: $role"
|
|
echo " Active: $isActive"
|
|
echo " Login Method: $loginMethod"
|
|
echo " Password length: $pwd_len caractères"
|
|
|
|
# Vérifications
|
|
if [ "$isActive" != "1" ]; then
|
|
echo -e "${RED}[ERREUR]${NC} L'utilisateur est désactivé (isActive = 0)"
|
|
USER_OK=false
|
|
elif [ -z "$pwd_len" ] || [ "$pwd_len" = "0" ]; then
|
|
echo -e "${RED}[ERREUR]${NC} Le mot de passe est vide"
|
|
USER_OK=false
|
|
elif [ "$role" != "admin" ]; then
|
|
echo -e "${YELLOW}[WARN]${NC} L'utilisateur n'a pas le rôle admin"
|
|
USER_OK=true
|
|
else
|
|
USER_OK=true
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " 3. VÉRIFICATION DU SERVICE"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
SERVICE_OK=false
|
|
|
|
if command -v systemctl &> /dev/null; then
|
|
if systemctl list-unit-files | grep -q "formation-manager"; then
|
|
if systemctl is-active --quiet formation-manager; then
|
|
echo -e "${GREEN}[OK]${NC} Service formation-manager est actif"
|
|
SERVICE_OK=true
|
|
|
|
# Vérifier les logs récents
|
|
echo ""
|
|
echo "Dernières lignes des logs:"
|
|
echo "---"
|
|
sudo journalctl -u formation-manager -n 5 --no-pager 2>/dev/null | tail -5
|
|
echo "---"
|
|
else
|
|
echo -e "${RED}[ERREUR]${NC} Service formation-manager n'est pas actif"
|
|
echo -e "${YELLOW}[ACTION]${NC} Démarrez le service: sudo systemctl start formation-manager"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}[INFO]${NC} Service systemd 'formation-manager' n'existe pas"
|
|
echo "L'application doit être démarrée manuellement"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " 4. VÉRIFICATION DE L'APPLICATION"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
if command -v curl &> /dev/null; then
|
|
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 2>/dev/null || echo "000")
|
|
|
|
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "302" ]; then
|
|
echo -e "${GREEN}[OK]${NC} Application répond (HTTP $HTTP_CODE)"
|
|
APP_OK=true
|
|
else
|
|
echo -e "${RED}[ERREUR]${NC} Application ne répond pas (HTTP $HTTP_CODE)"
|
|
echo -e "${YELLOW}[ACTION]${NC} Vérifiez que l'application est démarrée"
|
|
APP_OK=false
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " 5. TEST DE CONNEXION (SIMULATION)"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Vérifier bcryptjs
|
|
if [ -d "node_modules/bcryptjs" ]; then
|
|
echo -e "${GREEN}[OK]${NC} bcryptjs est installé"
|
|
|
|
# Tester le hash du mot de passe
|
|
echo ""
|
|
echo "Test de vérification du mot de passe..."
|
|
|
|
STORED_HASH=$(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME -se "SELECT password FROM users WHERE username='adminServFormation';" 2>/dev/null)
|
|
|
|
if [ -n "$STORED_HASH" ]; then
|
|
# Utiliser Node.js pour vérifier le hash
|
|
HASH_VALID=$(node -e "
|
|
const bcrypt = require('bcryptjs');
|
|
const hash = '$STORED_HASH';
|
|
const password = 'Itinova69!';
|
|
bcrypt.compare(password, hash, (err, result) => {
|
|
if (err) {
|
|
console.log('ERROR');
|
|
} else {
|
|
console.log(result ? 'VALID' : 'INVALID');
|
|
}
|
|
});
|
|
" 2>/dev/null)
|
|
|
|
if [ "$HASH_VALID" = "VALID" ]; then
|
|
echo -e "${GREEN}[OK]${NC} Le hash du mot de passe est valide pour 'Itinova69!'"
|
|
HASH_OK=true
|
|
elif [ "$HASH_VALID" = "INVALID" ]; then
|
|
echo -e "${RED}[ERREUR]${NC} Le hash du mot de passe ne correspond pas à 'Itinova69!'"
|
|
echo -e "${YELLOW}[ACTION]${NC} Réexécutez: ./create-admin.sh"
|
|
HASH_OK=false
|
|
else
|
|
echo -e "${YELLOW}[WARN]${NC} Impossible de vérifier le hash (erreur Node.js)"
|
|
HASH_OK=false
|
|
fi
|
|
fi
|
|
else
|
|
echo -e "${RED}[ERREUR]${NC} bcryptjs n'est pas installé"
|
|
echo -e "${YELLOW}[ACTION]${NC} Exécutez: pnpm install"
|
|
fi
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " RÉSUMÉ"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
ALL_OK=true
|
|
|
|
if [ "$JWT_OK" = true ]; then
|
|
echo -e "${GREEN}✓${NC} JWT_SECRET configuré correctement"
|
|
else
|
|
echo -e "${RED}✗${NC} JWT_SECRET manquant ou invalide"
|
|
ALL_OK=false
|
|
fi
|
|
|
|
if [ "$USER_OK" = true ]; then
|
|
echo -e "${GREEN}✓${NC} Utilisateur adminServFormation configuré correctement"
|
|
else
|
|
echo -e "${RED}✗${NC} Problème avec l'utilisateur adminServFormation"
|
|
ALL_OK=false
|
|
fi
|
|
|
|
if [ "$HASH_OK" = true ]; then
|
|
echo -e "${GREEN}✓${NC} Hash du mot de passe valide"
|
|
else
|
|
echo -e "${RED}✗${NC} Problème avec le hash du mot de passe"
|
|
ALL_OK=false
|
|
fi
|
|
|
|
if [ "$SERVICE_OK" = true ] || [ "$APP_OK" = true ]; then
|
|
echo -e "${GREEN}✓${NC} Application en cours d'exécution"
|
|
else
|
|
echo -e "${RED}✗${NC} Application non démarrée"
|
|
ALL_OK=false
|
|
fi
|
|
|
|
echo ""
|
|
|
|
if [ "$ALL_OK" = true ]; then
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ Tout est configuré correctement! ✅ ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
echo "🔑 Vous devriez pouvoir vous connecter avec:"
|
|
echo " Identifiant: adminServFormation"
|
|
echo " Mot de passe: Itinova69!"
|
|
echo ""
|
|
echo "Si la connexion échoue toujours, vérifiez les logs:"
|
|
echo " sudo journalctl -u formation-manager -f"
|
|
else
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ Des problèmes ont été détectés ⚠️ ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
echo "Actions recommandées:"
|
|
echo ""
|
|
|
|
if [ "$JWT_OK" != true ]; then
|
|
echo "1. Ajouter JWT_SECRET dans .env:"
|
|
echo " echo \"JWT_SECRET=\$(openssl rand -base64 32)\" >> .env"
|
|
echo ""
|
|
fi
|
|
|
|
if [ "$USER_OK" != true ] || [ "$HASH_OK" != true ]; then
|
|
echo "2. Réinitialiser l'utilisateur admin:"
|
|
echo " ./create-admin.sh"
|
|
echo ""
|
|
fi
|
|
|
|
if [ "$SERVICE_OK" != true ] && [ "$APP_OK" != true ]; then
|
|
echo "3. Redémarrer l'application:"
|
|
echo " sudo systemctl restart formation-manager"
|
|
echo ""
|
|
fi
|
|
fi
|