From 03668b9bb9f224f6db985bc9980dc75fab2fa4d5 Mon Sep 17 00:00:00 2001 From: polo Date: Thu, 29 May 2025 11:21:15 +0200 Subject: logs connexions --- src/controller/password.php | 4 ++++ src/model/entities/Log.php | 28 ++++++++++++++++++++++++++++ src/model/entities/Node.php | 5 +++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/model/entities/Log.php diff --git a/src/controller/password.php b/src/controller/password.php index 4b387ca..2a38508 100644 --- a/src/controller/password.php +++ b/src/controller/password.php @@ -7,6 +7,7 @@ declare(strict_types=1); use Doctrine\ORM\EntityManager; use App\Entity\User; +use App\Entity\Log; // exécutée dans installation.php à l'ouverture de chaque page function existUsers(EntityManager $entityManager) @@ -164,6 +165,9 @@ function connect(LoginBuilder $builder, EntityManager $entityManager) // enregistrement et redirection if(!empty($user) && $login === $user->getLogin() && password_verify($password, $user->getPassword())) { + $log = new Log; + $entityManager->persist($log); + $entityManager->flush(); session_regenerate_id(true); // protection fixation de session, si l'attaquant a créé un cookie de session (attaque XSS), il est remplacé //unset($_SESSION['captcha']); $_SESSION['user'] = $login; diff --git a/src/model/entities/Log.php b/src/model/entities/Log.php new file mode 100644 index 0000000..7c2caa9 --- /dev/null +++ b/src/model/entities/Log.php @@ -0,0 +1,28 @@ + 'CURRENT_TIMESTAMP'])] + //#[ORM\Column(type: 'datetime', columnDefinition: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")] + private ?\DateTime $date_time ; // le type datetime de doctrine convertit en type \DateTime de PHP + + public function __construct(){ + $this->date_time = new \DateTime(); + } +} diff --git a/src/model/entities/Node.php b/src/model/entities/Node.php index fea9d50..850f37d 100644 --- a/src/model/entities/Node.php +++ b/src/model/entities/Node.php @@ -36,12 +36,13 @@ class Node #[ORM\JoinColumn(name: "parent_id", referencedColumnName: "id_node", onDelete: "SET NULL", nullable: true)] private ?self $parent = null; + // un onDelete: "CASCADE" serait logique ici mais dangereux, on pourrait aussi faire en sorte que les noeuds soient récupérables si la page est brutalement supprimée #[ORM\ManyToOne(targetEntity: Page::class)] - #[ORM\JoinColumn(name: "page_id", referencedColumnName: "id_page", onDelete: "SET DEFAULT", nullable: true)] + #[ORM\JoinColumn(name: "page_id", referencedColumnName: "id_page", nullable: true)] private ?Page $page; #[ORM\ManyToOne(targetEntity: Article::class, cascade: ['persist'])] - #[ORM\JoinColumn(name: "article_id", referencedColumnName: "id_article", onDelete: "SET NULL", nullable: true)] + #[ORM\JoinColumn(name: "article_id", referencedColumnName: "id_article", onDelete: "CASCADE", nullable: true)] // supprimer le contenu d'un article supprime les noeuds associés, faux dans l'autre sens private ?Article $article = null; // propriété non mappée dans la table "node", la jointure est décrite dans NodeData -- cgit v1.2.3