From f37d3f8979b34dbb03d7a39ccbb3889763bea61d Mon Sep 17 00:00:00 2001
From: polo
" + params.get('database_restauration'));
}
}
+ if(params.has('get_last_dump')){
+ toastNotify(params.get('get_last_dump'));
+ }
if(params.has('get_all_media')){
toastNotify(params.get('get_all_media'));
}
diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php
index eb1db04..47e51ac 100644
--- a/src/controller/MaintenanceController.php
+++ b/src/controller/MaintenanceController.php
@@ -49,10 +49,22 @@ class MaintenanceController
die;
}
- static public function getLastDump(): void
+ static public function getLastDump(EntityManager $entityManager): void
{
+ $backup_list = Backup::getBackupList();
+ $nb = count($backup_list);
+
+ if($nb <= 0){ // se produit à la première connexion en mode admin pour une raison algorithimque
+ Backup::mySQLdump($entityManager, 'auto');
+ $backup_list = Backup::getBackupList();
+ $nb = count($backup_list);
+ if($nb <= 0){ // improbable, les dossiers devraient déjà avoir été créés
+ throw new RuntimeException("Le serveur a rencontré une erreur: aucun backup n'est disponible et ce n'est pas normal.");
+ }
+ }
+
try{
- $file_path = Backup::$backup_dir . '/' . Backup::getLastBackupName();
+ $file_path = Backup::$backup_dir . '/' . $backup_list[$nb - 1];
header('Content-Type: application/octet-stream'); // signifie fichier quelconque, du binaire quoi!
header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); // pour provoquer un téléchargement et non pour afficher
header('Content-Length: ' . filesize($file_path)); // peut servir côté client (barre de progression...)
diff --git a/src/controller/UserController.php b/src/controller/UserController.php
index f911d2d..9de2fb8 100644
--- a/src/controller/UserController.php
+++ b/src/controller/UserController.php
@@ -81,8 +81,7 @@ class UserController
if($form->validate()){
// à mettre dans une classe métier UserService, Authentication, AuthService?
$user = self::getUserByName($_POST['login'], $entityManager);
- if(!empty($user) && $_POST['login'] === $user->getLogin() && password_verify($_POST['password'], $user->getPassword()))
- {
+ if(!empty($user) && $_POST['login'] === $user->getLogin() && password_verify($_POST['password'], $user->getPassword())){
$log = new Log(true);
// protection fixation de session, si l'attaquant crée un cookie de session, il est remplacé
@@ -94,7 +93,9 @@ class UserController
EmailService::cleanEmails($entityManager);
try{
- Backup::mySQLdump($entityManager, 'auto'); // créer un nouveau backup
+ if(file_exists('../var/backups')){
+ Backup::mySQLdump($entityManager, 'auto'); // créer un nouveau backup, sauf si les dossiers nécessaires sont encore à créer
+ }
}
catch(RuntimeException $e){
echo '';
diff --git a/src/service/Backup.php b/src/service/Backup.php
index c886617..e29ff64 100644
--- a/src/service/Backup.php
+++ b/src/service/Backup.php
@@ -22,6 +22,7 @@ class Backup
$engine = stripos($version, 'mariadb') !== false ? 'mariadb-dump' : 'mysqldump';
$tmp = tempnam('../var', 'tmp_db_codes_'); // crée un fichier avec un nom aléatoire et des droits 600 (concurrence)
+ // attention, si le dossier de destination n'est pas disponible, le fichier est placé avec les fichiers temporaires
file_put_contents($tmp,
"[client]\n
user=" . Config::$user . "\n
@@ -88,11 +89,6 @@ class Backup
}
return $backup_array;
}
- static public function getLastBackupName(): string // chemin inclu
- {
- $backup_list = self::getBackupList();
- return $backup_list[count($backup_list) - 1];
- }
static public function cleanBackups(): void
{
diff --git a/src/service/UserDataService.php b/src/service/UserDataService.php
index 5fa60d5..e0156e2 100644
--- a/src/service/UserDataService.php
+++ b/src/service/UserDataService.php
@@ -23,7 +23,7 @@ class UserDataService
$iterator = new RecursiveIteratorIterator($directory);
foreach($iterator as $info){
- if($info->getFilename() != "." && $info->getFilename() != ".."){ // chemins inutiles . et ..
+ if($info->getFilename() != "." && $info->getFilename() != ".." && $info->getFilename() != '.htaccess'){ // chemins inutiles . et .. et le .htaccess
$Zip->addGlob($info->getPathname(), 0, array(''));
$counter++;
}
diff --git a/src/service/router.php b/src/service/router.php
index 556651f..6430e9e 100644
--- a/src/service/router.php
+++ b/src/service/router.php
@@ -46,7 +46,7 @@ if($request->getMethod() === 'GET'){
if(IS_ADMIN === true){
if($request->query->has('action') && $request->query->get('action') === 'get_mysqldump'){
- MaintenanceController::getLastDump();
+ MaintenanceController::getLastDump($entityManager);
die;
}
if($request->query->has('action') && $request->query->get('action') === 'get_all_media'){
diff --git a/src/view/templates/maintenance.php b/src/view/templates/maintenance.php
index 403ed97..6b4d223 100644
--- a/src/view/templates/maintenance.php
+++ b/src/view/templates/maintenance.php
@@ -48,7 +48,7 @@
- Toutes vos photos et vos documents dans un "zip"
+ Toutes vos photos et vos documents dans un .zip
--
cgit v1.2.3