From ed5df18ed28a338ecd763e6492991ccbf5e23eb0 Mon Sep 17 00:00:00 2001 From: polo Date: Wed, 6 Jul 2022 01:59:48 +0200 Subject: rangement du code --- controller/ajax.php | 60 +++++++++++++++++++++++++++++ controller/backup.php | 2 + controller/config.php | 63 +++++++++++++++++++++++++++++++ controller/installation.php | 92 ++++++++++++++++++--------------------------- controller/password.php | 3 +- 5 files changed, 163 insertions(+), 57 deletions(-) create mode 100644 controller/ajax.php create mode 100644 controller/config.php (limited to 'controller') diff --git a/controller/ajax.php b/controller/ajax.php new file mode 100644 index 0000000..489e814 --- /dev/null +++ b/controller/ajax.php @@ -0,0 +1,60 @@ + insertion d'une image dans l'éditeur +if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') +{ + // sécurité !! + if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 + || !isset($_FILES['upload']) || empty($_FILES['upload'])) + { + // sans effet? + header('Location: index.php?erreur=image_ajax'); + } + else + { + require('model/Image.php'); + // paramètre "true" parce qu'on reçoit une requête AJAX + $Image = new Image(true); + $Image->upload(); + echo($Image->reponseAjax); // attendu par l'éditeur + } + exit; // stop !! +} + +// page restauration quand le fichier zip est lourd +// -> input file onchange +if(isset($_GET['action']) && $_GET['action'] == 'restauration' + && isset($_GET['file_name']) && isset($_GET['file_size'])) +{ + if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) + { + header('Location: index.php?erreur=file_infos_ajax'); + } + else + { + $_SESSION['fileSize'] = $_GET['file_size']; + $_SESSION['fileName'] = $_GET['file_name']; + //echo("file infos send"); + var_dump($_SESSION['fileName']); + exit(); // stop !! + } +} +// -> input submit onclick +if(isset($_GET['action']) && $_GET['action'] == 'restauration' + && isset($_GET['chunk_name']) && isset($_FILES['blob'])) +{ + + if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1) + { + header('Location: index.php?erreur=upload_ajax'); + } + else + { + require('controller/backup.php'); + uploadChunkAndMerge(); + echo('file send'); + exit(); // stop !! + } +} \ No newline at end of file diff --git a/controller/backup.php b/controller/backup.php index 62f08a1..014a6cb 100644 --- a/controller/backup.php +++ b/controller/backup.php @@ -156,10 +156,12 @@ function restoreData($path) return($message); } + function pageRestauration($from) { $title = 'Restauration des données'; $message = ''; + // taille max des fichiers dans le php.ini (défaut = 2M) global $maxWeight; // recharger la même page en écrivant les données diff --git a/controller/config.php b/controller/config.php new file mode 100644 index 0000000..47b85f9 --- /dev/null +++ b/controller/config.php @@ -0,0 +1,63 @@ + vérifier la disponibilité des extensions PHP +// => obtenir des variables globales +// => permettre une configuration à la main par l'utilisateur + + +// mode de stockage des données, écrire 'files' ou 'database' +$storage = 'files'; +// laisser 'files'!! +// l'utilisation d'une BDD n'est pas prévue pour l'instant + +// Racine du site (inutile pour l'instant) +//$root = getcwd(); + +// nom de domaine (inutile pour l'instant) +//$host = $_SERVER['HTTP_HOST']; + +// bibliothèque utilisée pour créer les miniatures +if(extension_loaded("imagick")) // on préfère imagemagick +{ + $imageLibrary = 'imagick'; +} +elseif(extension_loaded('gd')) +{ + $imageLibrary = 'gd'; +} +else +{ + echo(''); +} + +// format dans lequel créer les sauvegardes +// zip uniquement pour l'instant +if(extension_loaded("zip")) +{ + $archiveFormat = 'zip'; +} +else +{ + echo(''); +} + + +// conversion des 2M du php.ini en 2000000 +// les kibi, mébi et gibi sont inutiles ici +function returnBytes ($size_str) // chaine du style '2M' +{ + switch (substr ($size_str, -1)) + { + case 'Ki': case 'ki': return (int)$size_str * 1024; + case 'Mi': case 'mi': return (int)$size_str * 1048576; + case 'Gi': case 'gi': return (int)$size_str * 1073741824; + case 'K': case 'k': return (int)$size_str * 1000; + case 'M': case 'm': return (int)$size_str * 1000000; + case 'G': case 'g': return (int)$size_str * 1000000000; + default: return $size_str; + } +} +// taille max des fichiers dans le php.ini (défaut = 2M) +$maxWeight = returnBytes(ini_get('upload_max_filesize')); diff --git a/controller/installation.php b/controller/installation.php index 1c90026..b2a687c 100644 --- a/controller/installation.php +++ b/controller/installation.php @@ -1,54 +1,36 @@ '); - //echo('server name: ' . $_SERVER['SERVER_NAME'] . '
'); - // echo('dirname: ' . dirname(__FILE__) . '
'); - // echo('file: ' . __FILE__ . '
'); - // echo('dir: ' . __DIR__. '
'); - - //$lien_htaccess = $_SERVER['SERVER_NAME'] . "/.htaccess"; - //$nomDuSite = "melaine"; - - // créer le .htaccess + // présence du .htaccess if(!file_exists(".htaccess")) { - echo('

Le .htaccess semble absent ce qui rend le site vulnérable, veuillez contacter l\'administrateur.

'); - //$contenu = "# redirection en cas d'erreur 404\nErrorDocument 404 http://" . $_SERVER['SERVER_NAME'] . "/" . $nomDuSite . "/erreur404.php\n# Interdire exploration du répertoire\nOptions All -Indexes"; + $contenu = "ErrorDocument 404 /erreur404.php"; + + echo('

Le .htaccess est absent.
+ Si vous ne savez pas de quoi il s\'agit, contactez le responsable du site.
+ Sinon, veuillez créer un fichier nommé .htaccess à la racine du site et y copier-coller la ligne suivante:

+ ' . $contenu . '

'); + + // Pour le créer + // laisser commenté, la création risque d'échouer // $fichier = fopen('.htaccess', 'w'); // fputs($fichier, $contenu); // fclose($fichier); // chmod('.htaccess', 0666); // mettre 0644 en production } - // droits en lecture et écriture dans le cas d'une migration - // tester si le site est "vide" et prévoir un formulaire permettant d'upload le fichier .zip - // contenant toutes les données qu'il est possible de créer depuis le mode admin - // cette méthode a deux intérêts: - // - facilité pour l'utilisateur - // - toutes les données sont la "possession" du serveur apache, - // on prévient ainsi tous les futurs problèmes de droits - - // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump" - // (un fichier .sql), à voir si php est capable d'obtenir ou redonner ce fichier à la BDD + + // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump" (un fichier .sql), + // à voir si php est capable d'obtenir ou redonner ce fichier à la BDD - // créer les dossiers (fait également à l'extraction du zip de données) - // attention: ne fonctionne pas sans une manipulation préalable - // - modifier soit-même les droits du dossier data pour 777 - // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant // création des dossiers + // attention: ne fonctionne pas sans une manipulation préalable + // - créer le dossier data à la racine du site + // - lui donner les droits du dossier data pour 777 // valeur en octal $droitsDossiers = 0777; // mettre 0755 en production @@ -61,22 +43,13 @@ function installation() require('view/backup.php'); exit(); } - if(!touch('data')) + if(!touch('data')) // test autorisation en écriture { $erreur = 'data'; $title = 'Écriture non autorisée dans le dossier data'; require('view/backup.php'); exit(); } - - function createIndexPHP($path, $droitsFichiers) - { - $content = "