From bde6e4156c08febd5db037819286418cb66f0bf1 Mon Sep 17 00:00:00 2001
From: Timo Poppinga <timo.poppinga@zdrei.com>
Date: Tue, 7 Apr 2020 12:12:17 +0200
Subject: [PATCH] [TASK] Add methods PURGE and BAN in
 TYPO3\CMS\Core\Http\Request

Add the HTTP methods 'PURGE' and 'BAN' to $supportedMethods, to
support clear cache requests for proxy caches like varnish.

Resolves: #90968
Releases: master, 9.5
Change-Id: I2d4737319d23b362af689eadd21b6c3134a894e4
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64093
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Jonas Eberle <flightvision@googlemail.com>
Tested-by: Timo Poppinga <timo.poppinga@zdrei.com>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Jonas Eberle <flightvision@googlemail.com>
Reviewed-by: Timo Poppinga <timo.poppinga@zdrei.com>
Reviewed-by: Benni Mack <benni@typo3.org>
---
 typo3/sysext/core/Classes/Http/Request.php     |  5 ++++-
 .../core/Tests/Unit/Http/RequestTest.php       | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/typo3/sysext/core/Classes/Http/Request.php b/typo3/sysext/core/Classes/Http/Request.php
index 4f89e0a9b813..39519917c9f6 100644
--- a/typo3/sysext/core/Classes/Http/Request.php
+++ b/typo3/sysext/core/Classes/Http/Request.php
@@ -66,7 +66,10 @@ class Request extends Message implements RequestInterface
         'PROPFIND',
         'PROPPATCH',
         'REPORT',
-        'UNLOCK'
+        'UNLOCK',
+        // Custom methods
+        'PURGE',
+        'BAN'
     ];
 
     /**
diff --git a/typo3/sysext/core/Tests/Unit/Http/RequestTest.php b/typo3/sysext/core/Tests/Unit/Http/RequestTest.php
index d28b0f13ee77..8c6dabafb26b 100644
--- a/typo3/sysext/core/Tests/Unit/Http/RequestTest.php
+++ b/typo3/sysext/core/Tests/Unit/Http/RequestTest.php
@@ -527,4 +527,22 @@ class RequestTest extends UnitTestCase
         $this->expectException(\InvalidArgumentException::class);
         new Request(null, null, 'php://memory', [$name => $value]);
     }
+
+    /**
+     * @test
+     */
+    public function supportedRequestMethodsWork(): void
+    {
+        $request = new Request('some-uri', 'PURGE');
+        self::assertEquals('PURGE', $request->getMethod());
+    }
+
+    /**
+     * @test
+     */
+    public function nonSupportedRequestMethodsRaisesException(): void
+    {
+        $this->expectException(\InvalidArgumentException::class);
+        new Request('some-uri', 'UNSUPPORTED');
+    }
 }
-- 
GitLab