This commit is contained in:
Joris Bertomeu
2025-08-19 16:34:19 +02:00
commit 5c6da90f98
33 changed files with 8066 additions and 0 deletions

85
src/models/settings.js Normal file
View File

@@ -0,0 +1,85 @@
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;