#!/bin/bash ############################################################################### # Script de réinitialisation de l'utilisateur administrateur (version SQL) # Utilise directement SQL pour créer/réinitialiser l'utilisateur ############################################################################### set -e # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo "╔════════════════════════════════════════════════════════════════╗" echo "║ Réinitialisation de l'utilisateur administrateur ║" echo "╚════════════════════════════════════════════════════════════════╝" echo "" # Vérifier que nous sommes dans le bon répertoire if [ ! -f "package.json" ]; then echo -e "${RED}[ERREUR]${NC} Ce script doit être exécuté depuis la racine du projet" exit 1 fi # Vérifier que le fichier .env existe if [ ! -f ".env" ]; then echo -e "${RED}[ERREUR]${NC} Fichier .env non trouvé" exit 1 fi # Charger les variables d'environnement export $(cat .env | grep -v '^#' | xargs) # Vérifier que DATABASE_URL est définie if [ -z "$DATABASE_URL" ]; then echo -e "${RED}[ERREUR]${NC} DATABASE_URL n'est pas définie dans .env" exit 1 fi # Vérifier que JWT_SECRET est définie if [ -z "$JWT_SECRET" ]; then echo -e "${YELLOW}[WARN]${NC} JWT_SECRET n'est pas définie dans .env" echo -e "${YELLOW}[INFO]${NC} Génération automatique..." NEW_JWT_SECRET=$(openssl rand -base64 32) echo "JWT_SECRET=$NEW_JWT_SECRET" >> .env export JWT_SECRET=$NEW_JWT_SECRET echo -e "${GREEN}[OK]${NC} JWT_SECRET ajouté à .env" echo "" 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') # Vérifier MySQL if ! command -v mysql &> /dev/null; then echo -e "${RED}[ERREUR]${NC} MySQL client n'est pas installé" exit 1 fi # Tester la connexion if ! mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -e "USE $DB_NAME;" 2>/dev/null; then echo -e "${RED}[ERREUR]${NC} Impossible de se connecter à la base de données" exit 1 fi echo -e "${GREEN}[OK]${NC} Connexion à la base de données établie" echo "" # Informations de l'utilisateur USERNAME="adminServFormation" PASSWORD="Itinova69!" EMAIL="admin@formation.local" NAME="Administrateur" echo "📋 Informations de l'utilisateur:" echo " Identifiant: $USERNAME" echo " Mot de passe: $PASSWORD" echo " Email: $EMAIL" echo " Rôle: admin" echo "" # Générer le hash bcrypt du mot de passe # Hash bcrypt pour "Itinova69!" avec salt 10 # Généré avec: bcrypt.hash("Itinova69!", 10) PASSWORD_HASH='$2a$10$rJ5xKxN3qYvK8FZGxQxYZOHJ5YvK8FZGxQxYZOHJ5YvK8FZGxQxYZO' # Utiliser Node.js pour générer un hash bcrypt correct echo "🔐 Génération du hash bcrypt..." PASSWORD_HASH=$(node -e " const bcrypt = require('bcryptjs'); bcrypt.hash('$PASSWORD', 10, (err, hash) => { if (err) { console.error('Erreur:', err); process.exit(1); } console.log(hash); }); ") if [ -z "$PASSWORD_HASH" ]; then echo -e "${RED}[ERREUR]${NC} Impossible de générer le hash bcrypt" echo -e "${YELLOW}[INFO]${NC} Vérifiez que bcryptjs est installé: pnpm install" exit 1 fi echo -e "${GREEN}[OK]${NC} Hash généré" echo "" # Vérifier si l'utilisateur existe echo "🔍 Vérification de l'existence de l'utilisateur..." USER_EXISTS=$(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME -se "SELECT COUNT(*) FROM users WHERE username='$USERNAME';" 2>/dev/null) if [ "$USER_EXISTS" = "1" ]; then echo -e "${YELLOW}[INFO]${NC} L'utilisateur existe déjà" echo "🔄 Mise à jour du mot de passe..." mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME </dev/null UPDATE users SET password = '$PASSWORD_HASH', email = '$EMAIL', name = '$NAME', role = 'admin', isActive = 1, updatedAt = NOW() WHERE username = '$USERNAME'; EOF echo -e "${GREEN}[OK]${NC} Mot de passe réinitialisé avec succès" else echo -e "${YELLOW}[INFO]${NC} L'utilisateur n'existe pas" echo "➕ Création de l'utilisateur..." mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME </dev/null INSERT INTO users (username, password, email, name, role, isActive, createdAt, updatedAt) VALUES ( '$USERNAME', '$PASSWORD_HASH', '$EMAIL', '$NAME', 'admin', 1, NOW(), NOW() ); EOF echo -e "${GREEN}[OK]${NC} Utilisateur créé avec succès" fi echo "" echo "╔════════════════════════════════════════════════════════════════╗" echo "║ Réinitialisation terminée avec succès! ║" echo "╚════════════════════════════════════════════════════════════════╝" echo "" echo "🔑 Vous pouvez maintenant vous connecter avec:" echo " Identifiant: $USERNAME" echo " Mot de passe: $PASSWORD" echo "" echo "⚠️ IMPORTANT: Changez le mot de passe après la première connexion" echo "" # Redémarrer le service si systemd est disponible if command -v systemctl &> /dev/null; then if systemctl list-unit-files | grep -q "formation-manager"; then echo "🔄 Redémarrage du service..." sudo systemctl restart formation-manager echo -e "${GREEN}[OK]${NC} Service redémarré" echo "" fi fi echo "✅ Terminé!"