85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
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; |