Files
formation-manager-itinova/reset-admin-sql.sh

181 lines
6.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 <<EOF 2>/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 <<EOF 2>/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é!"