aboutsummaryrefslogtreecommitdiff
path: root/src/Controller/MenuAndPathsController.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-10-23 23:29:59 +0200
committerpolo <ordipolo@gmx.fr>2026-10-23 23:29:59 +0200
commit126a49185229f248eae8c485b3e16e029ebcb353 (patch)
tree7877918b7067103d667d522883e04f0129a1addc /src/Controller/MenuAndPathsController.php
parent5a25142d778eafdec33d10d673bd4abc5fe38d1c (diff)
downloadcms-polo1.tar.gz
cms-polo1.tar.bz2
cms-polo1.zip
audit claude code 1, validation formulaire toujours ok, échappement dans URL, quelques htmlspecialchars manquants, fonction Security::validateURLpolo1
Diffstat (limited to 'src/Controller/MenuAndPathsController.php')
-rw-r--r--src/Controller/MenuAndPathsController.php22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/Controller/MenuAndPathsController.php b/src/Controller/MenuAndPathsController.php
index 1916f06..aa283b6 100644
--- a/src/Controller/MenuAndPathsController.php
+++ b/src/Controller/MenuAndPathsController.php
@@ -6,31 +6,33 @@ declare(strict_types=1);
6namespace App\Controller; 6namespace App\Controller;
7 7
8use Doctrine\ORM\EntityManager; 8use Doctrine\ORM\EntityManager;
9use Symfony\Component\HttpFoundation\Request;
9use Symfony\Component\HttpFoundation\JsonResponse; 10use Symfony\Component\HttpFoundation\JsonResponse;
10use Symfony\Component\HttpFoundation\RedirectResponse; 11use Symfony\Component\HttpFoundation\RedirectResponse;
11use App\Entity\Page; 12use App\Entity\Page;
12use App\Model\Menu; 13use App\Model\Menu;
13use App\Model\Model; 14use App\Model\Model;
14use App\Service\URL; 15use App\Service\URL;
16use App\Service\Security;
15use App\View\NavBuilder; 17use App\View\NavBuilder;
16use App\View\MenuBuilder; 18use App\View\MenuBuilder;
17 19
18class MenuAndPathsController 20class MenuAndPathsController
19{ 21{
20 static public function newUrlMenuEntry(EntityManager $entityManager): RedirectResponse 22 static public function newUrlMenuEntry(EntityManager $entityManager, Request $request): RedirectResponse
21 { 23 {
22 Model::$menu = new Menu($entityManager); 24 Model::$menu = new Menu($entityManager);
23 $previous_page = Model::$menu->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1); 25 $previous_page = Model::$menu->findPageById((int)$_POST["location"]); // (int) à cause de declare(strict_types=1);
24 $parent = $previous_page->getParent(); 26 $parent = $previous_page->getParent();
25 27
26 $url_input = trim($_POST["url_input"]); // faire htmlspecialchars à l'affichage 28 $url_input = trim($request->request->get("url_input")); // faire htmlspecialchars à l'affichage
27 if(!filter_var($url_input, FILTER_VALIDATE_URL) || !str_starts_with($url_input, 'http')){ 29 if(!Security::validateURL($url_input)){
28 // utiliser une flash error 30 // utiliser une flash error
29 return new RedirectResponse((string)new URL(['page' => $_GET['from'], 'error' => 'invalide_url'])); 31 return new RedirectResponse((string)new URL(['page' => $request->query->get('from'), 'error' => 'invalide_url']));
30 } 32 }
31 33
32 $page = new Page( 34 $page = new Page(
33 trim(htmlspecialchars($_POST["label_input"])), 35 trim(htmlspecialchars($request->request->get("label_input"))),
34 $url_input, '', 36 $url_input, '',
35 true, true, false, 37 true, true, false,
36 $previous_page->getPosition(), 38 $previous_page->getPosition(),
@@ -47,7 +49,7 @@ class MenuAndPathsController
47 49
48 $entityManager->persist($page); 50 $entityManager->persist($page);
49 $entityManager->flush(); 51 $entityManager->flush();
50 return new RedirectResponse((string)new URL(['page' => $_GET['from']])); 52 return new RedirectResponse((string)new URL(['page' => $request->query->get('from')]));
51 } 53 }
52 54
53 // on pourrait utiliser FormValidation ici 55 // on pourrait utiliser FormValidation ici
@@ -62,7 +64,7 @@ class MenuAndPathsController
62 elseif(!in_array($json['field'], ['url_name', 'url_content'])){ 64 elseif(!in_array($json['field'], ['url_name', 'url_content'])){
63 return new JsonResponse(['success' => false, 'message' => "champ invalide"]); 65 return new JsonResponse(['success' => false, 'message' => "champ invalide"]);
64 } 66 }
65 elseif($json['field'] === 'url_content' && (!filter_var($url_data, FILTER_VALIDATE_URL) || !str_starts_with($url_data, 'http'))){ 67 elseif($json['field'] === 'url_content' && !Security::validateURL($url_data)){
66 return new JsonResponse(['success' => false, 'message' => "la chaîne envoyée n'est pas une URL valide"]); 68 return new JsonResponse(['success' => false, 'message' => "la chaîne envoyée n'est pas une URL valide"]);
67 } 69 }
68 else{ 70 else{
@@ -77,10 +79,10 @@ class MenuAndPathsController
77 } 79 }
78 } 80 }
79 81
80 static public function deleteUrlMenuEntry(EntityManager $entityManager): RedirectResponse 82 static public function deleteUrlMenuEntry(EntityManager $entityManager, Request $request): RedirectResponse
81 { 83 {
82 Model::$menu = new Menu($entityManager); 84 Model::$menu = new Menu($entityManager);
83 $page = Model::$menu->findPageById((int)$_POST["delete"]); 85 $page = Model::$menu->findPageById((int)$request->request->get("delete"));
84 $parent = $page->getParent(); 86 $parent = $page->getParent();
85 if($parent == null){ 87 if($parent == null){
86 $parent = Model::$menu; 88 $parent = Model::$menu;
@@ -91,7 +93,7 @@ class MenuAndPathsController
91 93
92 $entityManager->remove($page); // suppression en BDD 94 $entityManager->remove($page); // suppression en BDD
93 $entityManager->flush(); 95 $entityManager->flush();
94 return new RedirectResponse((string)new URL(['page' => $_GET['from']])); 96 return new RedirectResponse((string)new URL(['page' => $request->query->get('from')]));
95 } 97 }
96 98
97 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): JsonResponse 99 static public function MoveOneLevelUp(EntityManager $entityManager, array $json): JsonResponse