Checkpoint: Correction des erreurs Fail2Ban et SQL DATE_FORMAT :
**1. Correction erreur Fail2Ban (fail2banDb.ts) :** - Ajout de vérifications pour détecter si Fail2Ban est installé (commande `which fail2ban-client`) - Retour de valeurs par défaut (0, tableaux vides) au lieu de throw d'erreur dans l'environnement sandbox - Corrections appliquées aux 3 fonctions : getFail2BanStatus(), getBanHistory(), countRecentBans() - La page /admin/fail2ban s'affiche maintenant correctement sans erreur dans la sandbox **2. Correction erreur SQL DATE_FORMAT (analyticsDb.ts) :** - Ajout d'un filtre `IS NOT NULL` sur la colonne dateInscription dans getInscriptionsByMonth() - Exclusion des inscriptions avec dateInscription NULL qui causaient des erreurs SQL - Le graphique "Évolution des inscriptions par mois" affiche maintenant "Aucune donnée disponible" au lieu d'une erreur **Tests réussis :** - ✅ Page Fail2Ban : affiche correctement les statistiques à 0 et les messages appropriés - ✅ Tableau de bord analytique : tous les graphiques fonctionnent sans erreur SQL - ✅ Les autres pages (rapport-public-cible, suivi questionnaires) continuent de fonctionner correctement **Résultat :** ✅ Toutes les erreurs signalées sont corrigées ✅ L'application fonctionne correctement dans l'environnement sandbox ✅ Sur le VPS de production, Fail2Ban affichera les vraies valeurs
This commit is contained in:
@@ -22,6 +22,21 @@ export interface Fail2BanStats {
|
||||
*/
|
||||
export async function getFail2BanStatus(): Promise<Fail2BanStats> {
|
||||
try {
|
||||
// Vérifier si Fail2Ban est disponible
|
||||
try {
|
||||
await execAsync('which fail2ban-client');
|
||||
} catch (e) {
|
||||
// Fail2Ban n'est pas installé (environnement sandbox), retourner des valeurs par défaut
|
||||
console.log('[Fail2Ban] Service non disponible (environnement sandbox)');
|
||||
return {
|
||||
currentlyBanned: 0,
|
||||
totalBanned: 0,
|
||||
currentlyFailed: 0,
|
||||
totalFailed: 0,
|
||||
bannedIPs: [],
|
||||
};
|
||||
}
|
||||
|
||||
const { stdout } = await execAsync('sudo fail2ban-client status sshd');
|
||||
|
||||
const stats: Fail2BanStats = {
|
||||
@@ -95,6 +110,15 @@ export async function unbanIP(ip: string): Promise<boolean> {
|
||||
*/
|
||||
export async function getBanHistory(limit: number = 50): Promise<Array<{ ip: string; date: string; action: string }>> {
|
||||
try {
|
||||
// Vérifier si Fail2Ban est disponible
|
||||
try {
|
||||
await execAsync('which fail2ban-client');
|
||||
} catch (e) {
|
||||
// Fail2Ban n'est pas installé (environnement sandbox)
|
||||
console.log('[Fail2Ban] Service non disponible (environnement sandbox)');
|
||||
return [];
|
||||
}
|
||||
|
||||
const { stdout } = await execAsync(`sudo grep "Ban" /var/log/fail2ban.log | tail -${limit}`);
|
||||
|
||||
const history: Array<{ ip: string; date: string; action: string }> = [];
|
||||
@@ -125,6 +149,15 @@ export async function getBanHistory(limit: number = 50): Promise<Array<{ ip: str
|
||||
*/
|
||||
export async function countRecentBans(hours: number = 1): Promise<number> {
|
||||
try {
|
||||
// Vérifier si Fail2Ban est disponible
|
||||
try {
|
||||
await execAsync('which fail2ban-client');
|
||||
} catch (e) {
|
||||
// Fail2Ban n'est pas installé (environnement sandbox)
|
||||
console.log('[Fail2Ban] Service non disponible (environnement sandbox)');
|
||||
return 0;
|
||||
}
|
||||
|
||||
const since = new Date();
|
||||
since.setHours(since.getHours() - hours);
|
||||
const sinceStr = since.toISOString().slice(0, 19).replace('T', ' ');
|
||||
|
||||
Reference in New Issue
Block a user