mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-12 01:37:40 +02:00
Merge pull request #327 from R0m1k3/1.1
Ensure daily automatic backups are performed upon user login
This commit is contained in:
3 files changed
+68
-2
No files matched your search
@@ -211,6 +211,46 @@ export class BackupService {
|
||||
return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];
|
||||
}
|
||||
|
||||
// Nouvelle méthode : Vérifier et effectuer une sauvegarde quotidienne si nécessaire
|
||||
async checkAndPerformDailyBackup(userId: string = 'system'): Promise<{ backupPerformed: boolean; message: string }> {
|
||||
try {
|
||||
const today = new Date().toISOString().split('T')[0]; // Format YYYY-MM-DD
|
||||
|
||||
// Vérifier s'il y a déjà une sauvegarde automatique aujourd'hui
|
||||
const existingBackupToday = await db.select()
|
||||
.from(databaseBackups)
|
||||
.where(eq(databaseBackups.backupType, 'automatic'))
|
||||
.orderBy(desc(databaseBackups.createdAt))
|
||||
.limit(1);
|
||||
|
||||
const lastBackup = existingBackupToday[0];
|
||||
const lastBackupDate = lastBackup ? lastBackup.createdAt.toISOString().split('T')[0] : null;
|
||||
|
||||
// Si aucune sauvegarde automatique aujourd'hui, en créer une
|
||||
if (lastBackupDate !== today) {
|
||||
console.log('🔄 Première connexion du jour - Création de la sauvegarde automatique...');
|
||||
await this.createBackup('automatic', userId);
|
||||
console.log('✅ Sauvegarde quotidienne effectuée avec succès');
|
||||
return {
|
||||
backupPerformed: true,
|
||||
message: 'Sauvegarde quotidienne effectuée avec succès'
|
||||
};
|
||||
} else {
|
||||
console.log('ℹ️ Sauvegarde quotidienne déjà effectuée aujourd\'hui');
|
||||
return {
|
||||
backupPerformed: false,
|
||||
message: 'Sauvegarde quotidienne déjà effectuée aujourd\'hui'
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ Erreur lors de la vérification de sauvegarde quotidienne:', error);
|
||||
return {
|
||||
backupPerformed: false,
|
||||
message: `Erreur: ${error instanceof Error ? error.message : 'Erreur inconnue'}`
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private scheduleAutomaticBackup(): void {
|
||||
// Check for automatic backup every hour
|
||||
const checkBackupNeeded = async () => {
|
||||
|
||||
@@ -6,6 +6,7 @@ import { storage } from "./storage.js";
|
||||
import connectPg from "connect-pg-simple";
|
||||
import { scrypt, randomBytes, timingSafeEqual } from "crypto";
|
||||
import { promisify } from "util";
|
||||
import { backupService } from "./backupService.js";
|
||||
|
||||
const scryptAsync = promisify(scrypt);
|
||||
|
||||
@@ -206,8 +207,20 @@ export function setupLocalAuth(app: Express) {
|
||||
return res.status(400).json({ message: info?.message || "Invalid credentials" });
|
||||
}
|
||||
|
||||
req.login(user, (err) => {
|
||||
req.login(user, async (err) => {
|
||||
if (err) return next(err);
|
||||
|
||||
// Vérifier et effectuer une sauvegarde quotidienne si nécessaire
|
||||
try {
|
||||
const backupResult = await backupService.checkAndPerformDailyBackup(user.id);
|
||||
if (backupResult.backupPerformed) {
|
||||
console.log('💾 Sauvegarde quotidienne effectuée lors de la connexion de', user.username);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('⚠️ Erreur lors de la vérification de sauvegarde:', error);
|
||||
// Ne pas faire échouer la connexion si la sauvegarde échoue
|
||||
}
|
||||
|
||||
res.json({
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
|
||||
+14
-1
@@ -7,6 +7,7 @@ import { promisify } from "util";
|
||||
import { storage } from "./storage";
|
||||
import { User as SelectUser } from "@shared/schema";
|
||||
import connectPg from "connect-pg-simple";
|
||||
import { backupService } from "./backupService";
|
||||
|
||||
declare global {
|
||||
namespace Express {
|
||||
@@ -156,8 +157,20 @@ export function setupLocalAuth(app: Express) {
|
||||
return res.status(400).json({ message: info?.message || "Invalid credentials" });
|
||||
}
|
||||
|
||||
req.login(user, (err) => {
|
||||
req.login(user, async (err) => {
|
||||
if (err) return next(err);
|
||||
|
||||
// Vérifier et effectuer une sauvegarde quotidienne si nécessaire
|
||||
try {
|
||||
const backupResult = await backupService.checkAndPerformDailyBackup(user.id);
|
||||
if (backupResult.backupPerformed) {
|
||||
console.log('💾 Sauvegarde quotidienne effectuée lors de la connexion de', user.username);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('⚠️ Erreur lors de la vérification de sauvegarde:', error);
|
||||
// Ne pas faire échouer la connexion si la sauvegarde échoue
|
||||
}
|
||||
|
||||
res.json({
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
|
||||
Reference in new issue
Block a user