From 5751a8b72aabc9ba9d0e5447c4f5836d22742b6a Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Sun, 11 Sep 2022 07:05:31 +0000
Subject: [PATCH 1/2] imp: dynamic page cache policy for json requests

---
 .../shareholder_register_api.services.yml     | 12 ++++-
 .../src/JsonRequestPolicy.php                 | 49 +++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 modules/shareholder_register_api/src/JsonRequestPolicy.php

diff --git a/modules/shareholder_register_api/shareholder_register_api.services.yml b/modules/shareholder_register_api/shareholder_register_api.services.yml
index 2d0fa0a0..8d08bcba 100644
--- a/modules/shareholder_register_api/shareholder_register_api.services.yml
+++ b/modules/shareholder_register_api/shareholder_register_api.services.yml
@@ -1,4 +1,14 @@
 services:
+  logger.channel.shareholder_register_api:
+    parent: logger.channel_base
+    arguments: ['shareholder_register_api']
+
   shareholder_register.token:
     class: Drupal\shareholder_register_api\Services\TokenIssuer
-    arguments: [ '@jwt.transcoder', '@event_dispatcher' ]
\ No newline at end of file
+    arguments: [ '@jwt.transcoder', '@event_dispatcher' ]
+
+  shareholder_register_api.cache_request_policy:
+    class: 'Drupal\shareholder_register_api\JsonRequestPolicy'
+    arguments: ['@logger.channel.shareholder_register_api']
+    tags:
+      - { name: dynamic_page_cache_request_policy }
\ No newline at end of file
diff --git a/modules/shareholder_register_api/src/JsonRequestPolicy.php b/modules/shareholder_register_api/src/JsonRequestPolicy.php
new file mode 100644
index 00000000..a8db9228
--- /dev/null
+++ b/modules/shareholder_register_api/src/JsonRequestPolicy.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Drupal\shareholder_register_api;
+
+use Drupal\Core\PageCache\RequestPolicyInterface;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Class RequestPolicy.
+ *
+ * This request policy will prevent the current page from being cached if it
+ * is a json format request.
+ *
+ * @package Drupal\shareholder_register_api
+ */
+class JsonRequestPolicy implements RequestPolicyInterface {
+
+  /**
+   * The logger service.
+   *
+   * @var \Psr\Log\LoggerInterface
+   */
+  protected $logger;
+
+  /**
+   * RequestPolicy constructor.
+   *
+   * @param \Psr\Log\LoggerInterface $logger
+   *   The logger service.
+   */
+  public function __construct(LoggerInterface $logger) {
+    $this->logger = $logger;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function check(Request $request) {
+    $result = NULL;
+
+    if ($request->query->get('_format') === 'json') {
+      $result = static::DENY;
+    }
+
+    return $result;
+  }
+
+}
-- 
GitLab


From 23c3d45ba8b89aff8031b29ad354b37658492aea Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Fri, 16 Sep 2022 07:44:04 +0000
Subject: [PATCH 2/2] imp: deny caching only for route rest.entity.payment.GET

---
 .../shareholder_register_api.services.yml         |  2 +-
 .../src/JsonRequestPolicy.php                     | 15 +++++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/modules/shareholder_register_api/shareholder_register_api.services.yml b/modules/shareholder_register_api/shareholder_register_api.services.yml
index 8d08bcba..adc217c2 100644
--- a/modules/shareholder_register_api/shareholder_register_api.services.yml
+++ b/modules/shareholder_register_api/shareholder_register_api.services.yml
@@ -9,6 +9,6 @@ services:
 
   shareholder_register_api.cache_request_policy:
     class: 'Drupal\shareholder_register_api\JsonRequestPolicy'
-    arguments: ['@logger.channel.shareholder_register_api']
+    arguments: ['@logger.channel.shareholder_register_api', '@current_route_match']
     tags:
       - { name: dynamic_page_cache_request_policy }
\ No newline at end of file
diff --git a/modules/shareholder_register_api/src/JsonRequestPolicy.php b/modules/shareholder_register_api/src/JsonRequestPolicy.php
index a8db9228..6ca6e753 100644
--- a/modules/shareholder_register_api/src/JsonRequestPolicy.php
+++ b/modules/shareholder_register_api/src/JsonRequestPolicy.php
@@ -3,6 +3,7 @@
 namespace Drupal\shareholder_register_api;
 
 use Drupal\Core\PageCache\RequestPolicyInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
 use Psr\Log\LoggerInterface;
 use Symfony\Component\HttpFoundation\Request;
 
@@ -23,14 +24,24 @@ class JsonRequestPolicy implements RequestPolicyInterface {
    */
   protected $logger;
 
+  /**
+   * The current route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
   /**
    * RequestPolicy constructor.
    *
    * @param \Psr\Log\LoggerInterface $logger
    *   The logger service.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   *   The current route match.
    */
-  public function __construct(LoggerInterface $logger) {
+    public function __construct(LoggerInterface $logger, RouteMatchInterface $route_match) {
     $this->logger = $logger;
+    $this->routeMatch = $route_match;
   }
 
   /**
@@ -39,7 +50,7 @@ class JsonRequestPolicy implements RequestPolicyInterface {
   public function check(Request $request) {
     $result = NULL;
 
-    if ($request->query->get('_format') === 'json') {
+    if ($this->routeMatch->getRouteName() === 'rest.entity.payment.GET') {
       $result = static::DENY;
     }
 
-- 
GitLab