From 98c4376cee0e18e7e58cc6b41d4e2baecee58bf0 Mon Sep 17 00:00:00 2001
From: pfleu <fleutotp@gmail.com>
Date: Fri, 27 Jan 2023 15:11:39 +0100
Subject: [PATCH] =?UTF-8?q?Ajout=20envoi=20de=20mail=20lors=20des=20logs?=
 =?UTF-8?q?=20d'erreurs.=20Ajout=20adresses=20d'envoi=20de=20tous=20les=20?=
 =?UTF-8?q?emails=20pour=20env=20=3D=20preprod.=20Rajout=20validation=20em?=
 =?UTF-8?q?ail=20user=20v=C3=A9rifi=C3=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/packages/mailer.yaml                   | 19 +++++-
 config/packages/monolog.yaml                  | 61 +++++++++++++++----
 config/services.yaml                          |  9 +++
 .../CheckVerifiedUserSubscriber.php           | 10 +--
 src/Logger/ExtraDataProcessor.php             | 42 +++++++++++++
 5 files changed, 120 insertions(+), 21 deletions(-)
 create mode 100644 src/Logger/ExtraDataProcessor.php

diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml
index 56a650d..8738058 100644
--- a/config/packages/mailer.yaml
+++ b/config/packages/mailer.yaml
@@ -1,3 +1,16 @@
-framework:
-    mailer:
-        dsn: '%env(MAILER_DSN)%'
+when@preprod:
+    framework:
+        mailer:
+            dsn: '%env(MAILER_DSN)%'
+            envelope:
+                recipients: ['fleutotp@gmail.com', 'enzo.simonnet@liris.cnrs.fr', 'mathieu.loiseau@liris.cnrs.fr']
+
+when@dev:
+    framework:
+        mailer:
+            dsn: '%env(MAILER_DSN)%'
+
+when@prod:
+    framework:
+        mailer:
+            dsn: '%env(MAILER_DSN)%'
\ No newline at end of file
diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml
index 8c9efa9..3a453d6 100644
--- a/config/packages/monolog.yaml
+++ b/config/packages/monolog.yaml
@@ -43,19 +43,54 @@ when@prod:
             main:
                 type: fingers_crossed
                 action_level: error
-                handler: nested
+                handler: grouped
                 excluded_http_codes: [404, 405]
                 buffer_size: 50 # How many messages should be saved? Prevent memory leaks
-            nested:
-                type: stream
-                path: php://stderr
+            grouped:
+                type:    group
+                members: [streamed, symfony_mailer]
+            streamed:
+                type:  stream
+                path:  '%kernel.logs_dir%/%kernel.environment%.log'
                 level: debug
-                formatter: monolog.formatter.json
-            console:
-                type: console
-                process_psr_3_messages: false
-                channels: ["!event", "!doctrine"]
-            deprecation:
-                type: stream
-                channels: [deprecation]
-                path: php://stderr
+            deduplicated:
+                type:    deduplication
+                time: 10             # the time in seconds during which duplicate entries are discarded (default: 60)
+                handler: symfony_mailer
+            symfony_mailer:
+                type:         symfony_mailer
+                from_email:   '%env(MONOLOG_ERROR_MAIL_FROM)%'
+                to_email:     '%env(MONOLOG_ERROR_MAIL_TO)%'
+                subject:      'Bug Balex %kernel.environment% : %%message%%'
+                level:        critical
+                formatter:    monolog.formatter.extra_data
+                content_type: text/html
+
+when@preprod:
+    monolog:
+        handlers:
+            main:
+                type: fingers_crossed
+                action_level: error
+                handler: grouped
+                excluded_http_codes: [404, 405]
+                buffer_size: 50 # How many messages should be saved? Prevent memory leaks
+            grouped:
+                type:    group
+                members: [streamed, symfony_mailer]
+            streamed:
+                type:  stream
+                path:  '%kernel.logs_dir%/%kernel.environment%.log'
+                level: debug
+            deduplicated:
+                type:    deduplication
+                time: 10             # the time in seconds during which duplicate entries are discarded (default: 60)
+                handler: symfony_mailer
+            symfony_mailer:
+                type:         symfony_mailer
+                from_email:   '%env(MONOLOG_ERROR_MAIL_FROM)%'
+                to_email:     '%env(MONOLOG_ERROR_MAIL_TO)%'
+                subject:      'Bug Balex %kernel.environment% : %%message%%'
+                level:        critical
+                formatter:    monolog.formatter.extra_data
+                content_type: text/html
diff --git a/config/services.yaml b/config/services.yaml
index e983b4f..d03bcf5 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -37,6 +37,15 @@ services:
         tags: [serializer.normalizer]
 
 
+    monolog.formatter.extra_data:
+        class: Monolog\Formatter\HtmlFormatter
+        arguments:
+            - "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%% %%context%% %%extra%%\n"
+
+    App\Logger\ExtraDataProcessor:
+        tags:
+            - { name: monolog.processor }
+
 #    app.listener.api_exception:
 #        class: AppBundle\EventListener\ApiExceptionSubscriber
 #        tags:
diff --git a/src/EventSubscriber/CheckVerifiedUserSubscriber.php b/src/EventSubscriber/CheckVerifiedUserSubscriber.php
index 52affab..a6643a1 100644
--- a/src/EventSubscriber/CheckVerifiedUserSubscriber.php
+++ b/src/EventSubscriber/CheckVerifiedUserSubscriber.php
@@ -20,11 +20,11 @@ class CheckVerifiedUserSubscriber implements EventSubscriberInterface
         if (!$user instanceof User) {
             throw new \Exception('Unexpected user type');
         }
-//        if (!$user->getIsVerified()) {
-//            throw new CustomUserMessageAuthenticationException(
-//                "Veuillez confirmer la création de votre compte depuis l'email reçu."
-//            );
-//        }
+        if (!$user->getIsVerified()) {
+            throw new CustomUserMessageAuthenticationException(
+                "Veuillez confirmer la création de votre compte depuis l'email reçu."
+            );
+        }
     }
     public static function getSubscribedEvents()
     {
diff --git a/src/Logger/ExtraDataProcessor.php b/src/Logger/ExtraDataProcessor.php
new file mode 100644
index 0000000..0ceb714
--- /dev/null
+++ b/src/Logger/ExtraDataProcessor.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Logger;
+
+use App\Entity\User;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
+use Symfony\Component\Security\Core\Security;
+
+class ExtraDataProcessor
+{
+    private $tokenStorage;
+    private $requestStack;
+
+    public function __construct(Security $security, RequestStack $requestStack)
+    {
+        $this->security = $security;
+        $this->requestStack = $requestStack;
+    }
+
+    public function __invoke(array $record)
+    {
+        if ($this->security->getUser() != null) {
+            $user = $this->security->getUser();
+            if ($user instanceOf User) {
+                $record['extra']['utilisateur']['nom'] = $user->getPseudo();
+                $record['extra']['utilisateur']['email'] = $user->getEmail();
+            } else {
+                $record['extra']['utilisateur'] = "Not logged in.";
+            }
+        } else {
+            $record['extra']['utilisateur'] = "Not logged in.";
+        }
+
+        $request = $this->requestStack->getCurrentRequest();
+        if ($request){
+            $record['extra']['url'] = $request->getUri();
+        }
+
+        return $record;
+    }
+}
-- 
GitLab