const db = require('../db/database'); const bcrypt = require('bcrypt'); /** * Modèle pour gérer les paramètres */ class Settings { /** * Récupère tous les paramètres * @returns {Object} - Les paramètres */ static async get() { try { return db.get('settings').value() || {}; } catch (error) { console.error('Erreur lors de la récupération des paramètres:', error); throw error; } } /** * Met à jour les paramètres * @param {Object} settings - Les nouveaux paramètres * @returns {Object} - Les paramètres mis à jour */ static async update(settings) { try { // Si le mot de passe est fourni, le hasher if (settings.admin && settings.admin.password) { settings.admin.password = await bcrypt.hash(settings.admin.password, 10); } // Fusion avec les paramètres existants const currentSettings = await this.get(); const updatedSettings = { ...currentSettings, ...settings, updatedAt: new Date() }; await db.set('settings', updatedSettings).write(); return updatedSettings; } catch (error) { console.error('Erreur lors de la mise à jour des paramètres:', error); throw error; } } /** * Vérifie les identifiants de l'administrateur * @param {string} username - Nom d'utilisateur * @param {string} password - Mot de passe * @returns {boolean} - true si les identifiants sont valides */ static async verifyAdminCredentials(username, password) { try { const settings = await this.get(); // Si l'authentification est désactivée if (!settings.admin || !settings.admin.enableAuth) { return true; } // Vérifier le nom d'utilisateur if (!settings.admin.username || settings.admin.username !== username) { return false; } // Vérifier si le mot de passe est hashé if (settings.admin.password && settings.admin.password.startsWith('$2')) { // Mot de passe hashé return await bcrypt.compare(password, settings.admin.password); } else { // Mot de passe en clair (pour la compatibilité avec les anciennes versions) return settings.admin.password === password; } } catch (error) { console.error('Erreur lors de la vérification des identifiants:', error); return false; } } } module.exports = Settings;