Checkpoint: Correction de l'authentification locale : utilisation de sdk.createSessionToken() au lieu de jsonwebtoken pour compatibilité avec le système OAuth

This commit is contained in:
Manus Sandbox
2025-11-23 08:50:35 -05:00
parent ccb1484839
commit 645f6f6b5f
12 changed files with 2984 additions and 12 deletions

273
verify-login.sh Executable file
View File

@@ -0,0 +1,273 @@
#!/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