From c2f83a0c49f7ca20e0f96d57c59f3a01c0fbd8b8 Mon Sep 17 00:00:00 2001 From: Beatrycze Volk Date: Tue, 29 Aug 2023 16:09:56 +0200 Subject: [PATCH 1/5] Add configuration for proxy middleware --- Configuration/RequestMiddlewares.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php index a75ae101d..51de257ae 100644 --- a/Configuration/RequestMiddlewares.php +++ b/Configuration/RequestMiddlewares.php @@ -12,6 +12,9 @@ return [ 'frontend' => [ + 'dlf/page-view-proxy' => [ + 'target' => \Kitodo\Dlf\Middleware\PageViewProxy::class, + ], 'dlf/search-in-document' => [ 'target' => \Kitodo\Dlf\Middleware\SearchInDocument::class, 'after' => [ From c481cf8b88a443dc44fe4bef6429651770a64dcc Mon Sep 17 00:00:00 2001 From: Beatrycze Volk Date: Tue, 29 Aug 2023 16:22:09 +0200 Subject: [PATCH 2/5] Implement middleware for PageViewProxy --- Classes/Controller/AbstractController.php | 2 +- Classes/{Eid => Middleware}/PageViewProxy.php | 77 +++++++++++-------- .../Api/PageViewProxyDisabledTest.php | 2 +- Tests/Functional/Api/PageViewProxyTest.php | 2 +- 4 files changed, 47 insertions(+), 36 deletions(-) rename Classes/{Eid => Middleware}/PageViewProxy.php (90%) diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php index 36f62e338..e7ea92004 100644 --- a/Classes/Controller/AbstractController.php +++ b/Classes/Controller/AbstractController.php @@ -169,7 +169,7 @@ protected function configureProxyUrl(string &$url): void ->setCreateAbsoluteUri(!empty($this->settings['forceAbsoluteUrl'])) ->setArguments( [ - 'eID' => 'tx_dlf_pageview_proxy', + 'middleware' => 'dlf/page-view-proxy', 'url' => $url, 'uHash' => GeneralUtility::hmac($url, 'PageViewProxy') ] diff --git a/Classes/Eid/PageViewProxy.php b/Classes/Middleware/PageViewProxy.php similarity index 90% rename from Classes/Eid/PageViewProxy.php rename to Classes/Middleware/PageViewProxy.php index d745b5064..e7e2b34af 100644 --- a/Classes/Eid/PageViewProxy.php +++ b/Classes/Middleware/PageViewProxy.php @@ -10,12 +10,14 @@ * LICENSE.txt file that was distributed with this source code. */ -namespace Kitodo\Dlf\Eid; +namespace Kitodo\Dlf\Middleware; use Kitodo\Dlf\Common\Helper; use Kitodo\Dlf\Common\StdOutStream; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Core\Http\JsonResponse; use TYPO3\CMS\Core\Http\RequestFactory; @@ -23,7 +25,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; /** - * eID image proxy for plugin 'Page View' of the 'dlf' extension + * Image proxy Middleware for plugin 'Page View' of the 'dlf' extension * * Supported query parameters: * - `url` (mandatory): The URL to be proxied @@ -34,7 +36,7 @@ * * @access public */ -class PageViewProxy +class PageViewProxy implements MiddlewareInterface { /** * @access protected @@ -61,15 +63,52 @@ public function __construct() $this->extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('dlf'); } + /** + * The process method of the middleware. + * + * @access public + * + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * + * @return ResponseInterface + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + // Get input parameters and decrypt core name. + $parameters = $request->getQueryParams(); + // Return if not this middleware + if (!isset($parameters['middleware']) || ($parameters['middleware'] != 'dlf/page-view-proxy')) { + return $response; + } + + switch ($request->getMethod()) { + case 'OPTIONS': + return $this->handleOptions($request); + + case 'GET': + return $this->handleGet($request); + + case 'HEAD': + return $this->handleHead($request); + + default: + // 405 Method Not Allowed + return GeneralUtility::makeInstance(Response::class) + ->withStatus(405); + } + } + /** * Return a response that is derived from $response and contains CORS * headers to be sent to the client. - * + * * @access protected * * @param ResponseInterface $response * @param ServerRequestInterface $request The incoming request. - * + * * @return ResponseInterface */ protected function withCorsResponseHeaders( @@ -223,32 +262,4 @@ protected function handleGet(ServerRequestInterface $request): ResponseInterface return $this->withCorsResponseHeaders($clientResponse, $request); } - - /** - * The main method of the eID script - * - * @access public - * - * @param ServerRequestInterface $request - * - * @return ResponseInterface - */ - public function main(ServerRequestInterface $request): ResponseInterface - { - switch ($request->getMethod()) { - case 'OPTIONS': - return $this->handleOptions($request); - - case 'GET': - return $this->handleGet($request); - - case 'HEAD': - return $this->handleHead($request); - - default: - // 405 Method Not Allowed - return GeneralUtility::makeInstance(Response::class) - ->withStatus(405); - } - } } diff --git a/Tests/Functional/Api/PageViewProxyDisabledTest.php b/Tests/Functional/Api/PageViewProxyDisabledTest.php index f71a924bb..00632e9bb 100644 --- a/Tests/Functional/Api/PageViewProxyDisabledTest.php +++ b/Tests/Functional/Api/PageViewProxyDisabledTest.php @@ -11,7 +11,7 @@ class PageViewProxyDisabledTest extends FunctionalTestCase protected function queryProxy(array $query, string $method = 'GET') { - $query['eID'] = 'tx_dlf_pageview_proxy'; + $query['middleware'] = 'dlf/page-view-proxy'; return $this->httpClient->request($method, '', [ 'query' => $query, diff --git a/Tests/Functional/Api/PageViewProxyTest.php b/Tests/Functional/Api/PageViewProxyTest.php index c5a71a92c..bbd6ade6d 100644 --- a/Tests/Functional/Api/PageViewProxyTest.php +++ b/Tests/Functional/Api/PageViewProxyTest.php @@ -19,7 +19,7 @@ protected function getDlfConfiguration() protected function queryProxy(array $query, string $method = 'GET') { - $query['eID'] = 'tx_dlf_pageview_proxy'; + $query['middleware'] = 'dlf/page-view-proxy'; return $this->httpClient->request($method, '', [ 'query' => $query, From 9795e9625c72e1f976042a79ac9f7732f7b17460 Mon Sep 17 00:00:00 2001 From: Beatrycze Volk Date: Tue, 29 Aug 2023 16:23:47 +0200 Subject: [PATCH 3/5] Unregister proxy eID handler --- ext_localconf.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ext_localconf.php b/ext_localconf.php index 6ad9b5f46..b7c0a1d79 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -77,10 +77,6 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = \Kitodo\Dlf\Hooks\DataHandler::class; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][] = \Kitodo\Dlf\Hooks\DataHandler::class; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['dlf/Classes/Common/MetsDocument.php']['hookClass'][] = \Kitodo\Dlf\Hooks\KitodoProductionHacks::class; -// Register AJAX eID handlers. -if ($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['dlf']['enableInternalProxy'] ?? false) { - $GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['tx_dlf_pageview_proxy'] = \Kitodo\Dlf\Eid\PageViewProxy::class . '::main'; -} // Use Caching Framework for Solr queries if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_dlf_solr'])) { $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_dlf_solr'] = []; From f054e07b14936cab1dd87ce4aca5d01dbc353b3b Mon Sep 17 00:00:00 2001 From: Beatrycze Volk Date: Tue, 5 Sep 2023 13:59:06 +0200 Subject: [PATCH 4/5] Change middleware type --- Classes/Middleware/PageViewProxy.php | 1 - Configuration/RequestMiddlewares.php | 4 +++- Tests/Functional/Api/PageViewProxyTest.php | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Classes/Middleware/PageViewProxy.php b/Classes/Middleware/PageViewProxy.php index e7e2b34af..20223dc90 100644 --- a/Classes/Middleware/PageViewProxy.php +++ b/Classes/Middleware/PageViewProxy.php @@ -78,7 +78,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $response = $handler->handle($request); // Get input parameters and decrypt core name. $parameters = $request->getQueryParams(); - // Return if not this middleware if (!isset($parameters['middleware']) || ($parameters['middleware'] != 'dlf/page-view-proxy')) { return $response; } diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php index 51de257ae..f7ddb659e 100644 --- a/Configuration/RequestMiddlewares.php +++ b/Configuration/RequestMiddlewares.php @@ -11,10 +11,12 @@ */ return [ - 'frontend' => [ + 'backend' => [ 'dlf/page-view-proxy' => [ 'target' => \Kitodo\Dlf\Middleware\PageViewProxy::class, ], + ], + 'frontend' => [ 'dlf/search-in-document' => [ 'target' => \Kitodo\Dlf\Middleware\SearchInDocument::class, 'after' => [ diff --git a/Tests/Functional/Api/PageViewProxyTest.php b/Tests/Functional/Api/PageViewProxyTest.php index bbd6ade6d..32b9de848 100644 --- a/Tests/Functional/Api/PageViewProxyTest.php +++ b/Tests/Functional/Api/PageViewProxyTest.php @@ -2,7 +2,6 @@ namespace Kitodo\Dlf\Tests\Functional\Api; -use GuzzleHttp\Client as HttpClient; use Kitodo\Dlf\Tests\Functional\FunctionalTestCase; use TYPO3\CMS\Core\Utility\GeneralUtility; From f87361cc642b1500ec7625b1edf5613d8e66ece3 Mon Sep 17 00:00:00 2001 From: Beatrycze Volk Date: Tue, 30 Jan 2024 14:52:44 +0100 Subject: [PATCH 5/5] Remove dlf prefix --- Classes/Controller/AbstractController.php | 2 +- Classes/Middleware/PageViewProxy.php | 2 +- Configuration/RequestMiddlewares.php | 2 +- Tests/Functional/Api/PageViewProxyDisabledTest.php | 2 +- Tests/Functional/Api/PageViewProxyTest.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php index e7ea92004..a5f7ba25c 100644 --- a/Classes/Controller/AbstractController.php +++ b/Classes/Controller/AbstractController.php @@ -169,7 +169,7 @@ protected function configureProxyUrl(string &$url): void ->setCreateAbsoluteUri(!empty($this->settings['forceAbsoluteUrl'])) ->setArguments( [ - 'middleware' => 'dlf/page-view-proxy', + 'middleware' => 'page-view-proxy', 'url' => $url, 'uHash' => GeneralUtility::hmac($url, 'PageViewProxy') ] diff --git a/Classes/Middleware/PageViewProxy.php b/Classes/Middleware/PageViewProxy.php index 20223dc90..8e2441937 100644 --- a/Classes/Middleware/PageViewProxy.php +++ b/Classes/Middleware/PageViewProxy.php @@ -78,7 +78,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $response = $handler->handle($request); // Get input parameters and decrypt core name. $parameters = $request->getQueryParams(); - if (!isset($parameters['middleware']) || ($parameters['middleware'] != 'dlf/page-view-proxy')) { + if (!isset($parameters['middleware']) || ($parameters['middleware'] != 'page-view-proxy')) { return $response; } diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php index f7ddb659e..42dcebd0e 100644 --- a/Configuration/RequestMiddlewares.php +++ b/Configuration/RequestMiddlewares.php @@ -12,7 +12,7 @@ return [ 'backend' => [ - 'dlf/page-view-proxy' => [ + 'page-view-proxy' => [ 'target' => \Kitodo\Dlf\Middleware\PageViewProxy::class, ], ], diff --git a/Tests/Functional/Api/PageViewProxyDisabledTest.php b/Tests/Functional/Api/PageViewProxyDisabledTest.php index 00632e9bb..6c4c302b3 100644 --- a/Tests/Functional/Api/PageViewProxyDisabledTest.php +++ b/Tests/Functional/Api/PageViewProxyDisabledTest.php @@ -11,7 +11,7 @@ class PageViewProxyDisabledTest extends FunctionalTestCase protected function queryProxy(array $query, string $method = 'GET') { - $query['middleware'] = 'dlf/page-view-proxy'; + $query['middleware'] = 'page-view-proxy'; return $this->httpClient->request($method, '', [ 'query' => $query, diff --git a/Tests/Functional/Api/PageViewProxyTest.php b/Tests/Functional/Api/PageViewProxyTest.php index 32b9de848..557f36783 100644 --- a/Tests/Functional/Api/PageViewProxyTest.php +++ b/Tests/Functional/Api/PageViewProxyTest.php @@ -18,7 +18,7 @@ protected function getDlfConfiguration() protected function queryProxy(array $query, string $method = 'GET') { - $query['middleware'] = 'dlf/page-view-proxy'; + $query['middleware'] = 'page-view-proxy'; return $this->httpClient->request($method, '', [ 'query' => $query,