From 0903606b12296bc60a086b2712831d65c12e74b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20G=2E=20Marand?=
 <14036-fgm@users.noreply.drupalcode.org>
Date: Thu, 5 Oct 2023 08:18:36 +0000
Subject: [PATCH] Issue #3323967 by fgm: Request tracking also tracks invalid
 request IDs

---
 modules/mongodb/mongodb.install               |  2 +-
 .../mongodb_watchdog/src/EventController.php  |  2 +-
 modules/mongodb_watchdog/src/Logger.php       | 43 ++++++++++---------
 .../src/Unit/FormStateValueResolverTest.php   |  4 +-
 4 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/modules/mongodb/mongodb.install b/modules/mongodb/mongodb.install
index 220d661..ee68350 100644
--- a/modules/mongodb/mongodb.install
+++ b/modules/mongodb/mongodb.install
@@ -112,7 +112,7 @@ function _mongodb_requirements_databases(array $settings, array $databases, arra
   $warnings = [];
   $success = TRUE;
   foreach ($databases as $database => $list) {
-    [$client,] = $list;
+    [$client] = $list;
     if (empty($aliases[$client])) {
       $success = FALSE;
       $warnings[] = t('Database "@db" references undefined client "@client".', [
diff --git a/modules/mongodb_watchdog/src/EventController.php b/modules/mongodb_watchdog/src/EventController.php
index 8832efa..f95f02d 100644
--- a/modules/mongodb_watchdog/src/EventController.php
+++ b/modules/mongodb_watchdog/src/EventController.php
@@ -119,7 +119,7 @@ class EventController {
         : $location,
       empty($event->referrer) ? '' : Link::fromTextAndUrl($event->referrer, Url::fromUri($event->referrer)),
       $event->hostname,
-      isset($event->requestTracking_id)
+      (isset($event->requestTracking_id) && $event->requestTracking_id !== Logger::INVALID_REQUEST)
         ? Link::createFromRoute($this->t('Request'),
           'mongodb_watchdog.reports.request',
           ['uniqueId' => $event->requestTracking_id])
diff --git a/modules/mongodb_watchdog/src/Logger.php b/modules/mongodb_watchdog/src/Logger.php
index d524d24..5afa8a2 100644
--- a/modules/mongodb_watchdog/src/Logger.php
+++ b/modules/mongodb_watchdog/src/Logger.php
@@ -35,48 +35,52 @@ class Logger extends AbstractLogger {
 
   // Configuration-related constants.
   // The configuration item.
-  const CONFIG_NAME = 'mongodb_watchdog.settings';
+  public const CONFIG_NAME = 'mongodb_watchdog.settings';
 
   // The individual configuration keys.
-  const CONFIG_ITEMS = 'items';
+  public const CONFIG_ITEMS = 'items';
 
-  const CONFIG_REQUESTS = 'requests';
+  public const CONFIG_REQUESTS = 'requests';
 
-  const CONFIG_LIMIT = 'limit';
+  public const CONFIG_LIMIT = 'limit';
 
-  const CONFIG_ITEMS_PER_PAGE = 'items_per_page';
+  public const CONFIG_ITEMS_PER_PAGE = 'items_per_page';
 
-  const CONFIG_REQUEST_TRACKING = 'request_tracking';
+  public const CONFIG_REQUEST_TRACKING = 'request_tracking';
 
   // The logger database alias.
-  const DB_LOGGER = 'logger';
+  public const DB_LOGGER = 'logger';
 
   // The default channel exposed when using the raw PSR-3 contract.
-  const DEFAULT_CHANNEL = 'psr-3';
+  public const DEFAULT_CHANNEL = 'psr-3';
 
-  const MODULE = 'mongodb_watchdog';
+  // The magic invalid request ID used in events not triggered by a Web request
+  // with a valid UNIQUE_ID. 23-byte format, unlike mod_unique_id values (24).
+  public const INVALID_REQUEST = '@@Not-a-valid-request@@';
+
+  public const MODULE = 'mongodb_watchdog';
 
   // The service for the specific PSR-3 logger for MongoDB.
-  const SERVICE_LOGGER = 'mongodb.logger';
+  public const SERVICE_LOGGER = 'mongodb.logger';
 
   // The service for the Drupal LoggerChannel for this module, logging to all
   // active loggers.
-  const SERVICE_CHANNEL = 'logger.channel.mongodb_watchdog';
+  public const SERVICE_CHANNEL = 'logger.channel.mongodb_watchdog';
 
   // The service for hook_requirements().
-  const SERVICE_REQUIREMENTS = 'mongodb.watchdog_requirements';
+  public const SERVICE_REQUIREMENTS = 'mongodb.watchdog_requirements';
 
-  const SERVICE_SANITY_CHECK = 'mongodb.watchdog.sanity_check';
+  public const SERVICE_SANITY_CHECK = 'mongodb.watchdog.sanity_check';
 
-  const TRACKER_COLLECTION = 'watchdog_tracker';
+  public const TRACKER_COLLECTION = 'watchdog_tracker';
 
-  const TEMPLATE_COLLECTION = 'watchdog';
+  public const TEMPLATE_COLLECTION = 'watchdog';
 
-  const EVENT_COLLECTION_PREFIX = 'watchdog_event_';
+  public const EVENT_COLLECTION_PREFIX = 'watchdog_event_';
 
-  const EVENT_COLLECTIONS_PATTERN = '^watchdog_event_[[:xdigit:]]{32}$';
+  public const EVENT_COLLECTIONS_PATTERN = '^watchdog_event_[[:xdigit:]]{32}$';
 
-  const LEGACY_TYPE_MAP = [
+  public const LEGACY_TYPE_MAP = [
     'typeMap' => [
       'array' => 'array',
       'document' => 'array',
@@ -370,8 +374,7 @@ class Logger extends AbstractLogger {
       $this->trackerCollection()->insertOne($track);
     }
     else {
-      // 24-byte format like mod_unique_id values.
-      $requestId = '@@Not-a-valid-request@@';
+      $requestId = self::INVALID_REQUEST;
     }
 
     $eventCollection = $this->eventCollection($templateId);
diff --git a/modules/mongodb_watchdog/tests/src/Unit/FormStateValueResolverTest.php b/modules/mongodb_watchdog/tests/src/Unit/FormStateValueResolverTest.php
index 86e7cf0..a5524a8 100644
--- a/modules/mongodb_watchdog/tests/src/Unit/FormStateValueResolverTest.php
+++ b/modules/mongodb_watchdog/tests/src/Unit/FormStateValueResolverTest.php
@@ -35,11 +35,11 @@ class FormStateValueResolverTest extends UnitTestCase {
   }
 
   /**
-   * Test extra optionnal argument resolution.
+   * Test extra optional argument resolution.
    *
    * @covers ::supports
    */
-  public function testOptionnalExtraArgumentResolver() {
+  public function testOptionalExtraArgumentResolver() {
     $resolver = new FormStateValueResolver();
     $request = new Request();
     $request->attributes->add([FormStateValueResolver::NAME_LEGACY => new FormState()]);
-- 
GitLab