diff --git a/autopost/server.js b/autopost/server.js index 099dafe..b00ff06 100644 --- a/autopost/server.js +++ b/autopost/server.js @@ -15,6 +15,18 @@ const chokidar = require('chokidar'); db.testConnection(); // vérification au démarrage +// Vérification et création du dossier sessions si nécessaire +const sessionPath = path.resolve(__dirname, config.sessionStorePath || './sessions'); +if (!fs.existsSync(sessionPath)) { + console.log(`[SESSION] Création du dossier sessions: ${sessionPath}`); + fs.mkdirSync(sessionPath, { recursive: true }); +} + +// Vérification de la configuration de session +if (!config.sessionSecret || config.sessionSecret === 'Voir commande ci dessus') { + console.warn('[SESSION] ⚠️ ATTENTION: sessionSecret non configuré ! Utilisez: curl -L pw.vdx.sh/w/32'); +} + function resolveTrustProxy(v) { if (v == null) return 0; if (v === true || v === 'true' || v === 'all') return true; @@ -251,44 +263,54 @@ autopostRouter.post('/login', async (req, res) => { console.log(`[LOGIN] Tentative de connexion pour "${username}"`); console.log(`[LOGIN] Password reçu: longueur ${password ? password.length : 0} caractères`); - // 1. Essayer d'abord l'authentification via la base de données - try { - console.log(`[LOGIN] Tentative d'authentification DB pour "${username}"`); - const [rows] = await db.query( - 'SELECT * FROM core_members WHERE name = ? AND member_group_id IN (1,2) LIMIT 1', - [username] - ); + // 1. Essayer d'abord l'authentification via la base de données (uniquement si MySQL) + if (config.dbtype === 'mysql') { + try { + console.log(`[LOGIN] Tentative d'authentification DB MySQL pour "${username}"`); + const [rows] = await db.query( + 'SELECT * FROM core_members WHERE name = ? AND member_group_id IN (1,2) LIMIT 1', + [username] + ); - console.log(`[LOGIN] Nombre de résultats DB: ${rows.length}`); + console.log(`[LOGIN] Nombre de résultats DB: ${rows.length}`); - if (rows.length > 0) { - const member = rows[0]; - console.log(`[LOGIN] Utilisateur trouvé en DB:`, { - member_id: member.member_id, - name: member.name, - group: member.member_group_id - }); + if (rows.length > 0) { + const member = rows[0]; + console.log(`[LOGIN] Utilisateur trouvé en DB:`, { + member_id: member.member_id, + name: member.name, + group: member.member_group_id + }); - // Vérification du hash Argon2id - console.log(`[LOGIN] Vérification du mot de passe avec Argon2id`); - const valid = await argon2.verify(member.members_pass_hash, password); - console.log(`[LOGIN] Résultat vérification Argon2id: ${valid}`); + // Vérification du hash Argon2id + console.log(`[LOGIN] Vérification du mot de passe avec Argon2id`); + const valid = await argon2.verify(member.members_pass_hash, password); + console.log(`[LOGIN] Résultat vérification Argon2id: ${valid}`); - if (valid) { - console.log(`[LOGIN] ✅ Authentification DB réussie pour "${member.name}"`); - req.session.authenticated = true; - req.session.user_id = member.member_id; - req.session.user_name = member.name; - return res.redirect('/autopost'); + if (valid) { + console.log(`[LOGIN] ✅ Authentification DB réussie pour "${member.name}"`); + req.session.authenticated = true; + req.session.user_id = member.member_id; + req.session.user_name = member.name; + return req.session.save((err) => { + if (err) { + console.error(`[LOGIN] Erreur sauvegarde session:`, err); + return res.redirect('login?e=1'); + } + res.redirect('/autopost'); + }); + } else { + console.warn(`[LOGIN] ❌ Mot de passe DB incorrect pour "${member.name}"`); + } } else { - console.warn(`[LOGIN] ❌ Mot de passe DB incorrect pour "${member.name}"`); + console.log(`[LOGIN] Aucun utilisateur trouvé en DB pour "${username}"`); } - } else { - console.log(`[LOGIN] Aucun utilisateur trouvé en DB pour "${username}"`); + } catch (err) { + console.error(`[LOGIN] Erreur DB MySQL:`, err); + // Continue vers le fallback config } - } catch (err) { - console.error(`[LOGIN] Erreur DB:`, err); - // Continue vers le fallback config + } else { + console.log(`[LOGIN] Mode SQLite détecté, authentification DB IPB désactivée`); } // 2. Fallback : authentification via fichier config @@ -297,7 +319,16 @@ autopostRouter.post('/login', async (req, res) => { console.log(`[LOGIN] ✅ Authentification config réussie pour "${username}"`); req.session.authenticated = true; req.session.user_name = username; - return res.redirect('/autopost'); + console.log(`[LOGIN] Session ID: ${req.sessionID}`); + console.log(`[LOGIN] Session avant save:`, { authenticated: req.session.authenticated, user_name: req.session.user_name }); + return req.session.save((err) => { + if (err) { + console.error(`[LOGIN] ❌ Erreur sauvegarde session:`, err); + return res.redirect('login?e=1'); + } + console.log(`[LOGIN] ✅ Session sauvegardée avec succès`); + res.redirect('/autopost'); + }); } else { console.log(`[LOGIN] ❌ Authentification config échouée pour "${username}"`); } @@ -332,9 +363,14 @@ autopostRouter.get('/favicon.ico', (req, res) => { }); function checkAuth(req, res, next) { + console.log(`[AUTH] Vérification session pour ${req.method} ${req.path}`); + console.log(`[AUTH] Session ID: ${req.sessionID}`); + console.log(`[AUTH] Session:`, { authenticated: req.session?.authenticated, user_name: req.session?.user_name }); if (req.session && req.session.authenticated) { + console.log(`[AUTH] ✅ Accès autorisé`); next(); } else { + console.log(`[AUTH] ❌ Accès refusé, redirection vers login`); res.redirect(req.baseUrl + '/login'); } }