Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Classes/Controller/AbstractController.php
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ protected function configureProxyUrl(string &$url): void
->setCreateAbsoluteUri(!empty($this->extConf['general']['forceAbsoluteUrl']))
->setArguments(
[
'eID' => 'tx_dlf_pageview_proxy',
'middleware' => 'dlf/page-view-proxy',
'url' => $url,
'uHash' => GeneralUtility::hmac($url, 'PageViewProxy')
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,22 @@
* 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;
use TYPO3\CMS\Core\Http\Response;
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
Expand All @@ -34,7 +36,7 @@
*
* @access public
*/
class PageViewProxy
class PageViewProxy implements MiddlewareInterface
{
/**
* @access protected
Expand All @@ -61,6 +63,35 @@ public function __construct()
$this->extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('dlf', 'general');
}

/**
* The process method of the middleware.
*
* @access public
*
* @param ServerRequestInterface $request
* @param RequestHandlerInterface $handler
*
* @return ResponseInterface
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// 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 $handler->handle($request);
}

return match ($request->getMethod()) {
'OPTIONS' => $this->handleOptions($request),
'GET' => $this->handleGet($request),
'HEAD' => $this->handleHead($request),
default => GeneralUtility::makeInstance(Response::class)
->withStatus(405),
};
}

/**
* Return a response that is derived from $response and contains CORS
* headers to be sent to the client.
Expand Down Expand Up @@ -223,24 +254,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
{
return match ($request->getMethod()) {
'OPTIONS' => $this->handleOptions($request),
'GET' => $this->handleGet($request),
'HEAD' => $this->handleHead($request),
default => GeneralUtility::makeInstance(Response::class)
->withStatus(405),
};
}
}
10 changes: 10 additions & 0 deletions Configuration/RequestMiddlewares.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@

return [
'frontend' => [
'dlf/page-view-proxy' => [
'target' => \Kitodo\Dlf\Middleware\PageViewProxy::class,
// Ensure this runs before the router/dispatcher so it can handle the request
'before' => [
// replace with the actual TYPO3 router middleware id if known
'typo3/cms-frontend/router'
],
//'after' => [],
'priority' => 50,
],
'dlf/search-in-document' => [
'target' => \Kitodo\Dlf\Middleware\SearchInDocument::class,
'after' => [
Expand Down
2 changes: 1 addition & 1 deletion Tests/Functional/Api/PageViewProxyDisabledTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class PageViewProxyDisabledTest extends FunctionalTestCase
protected function queryProxy(array $query, string $method = 'GET'): ResponseInterface
{
$request = (new InternalRequest($this->baseUrl))->withQueryParameters(
array_merge([ 'eID' => 'tx_dlf_pageview_proxy' ], $query)
array_merge([ 'middleware' => 'dlf/page-view-proxy' ], $query)
)->withMethod($method);

return $this->executeInternalRequest($request);
Expand Down
2 changes: 1 addition & 1 deletion Tests/Functional/Api/PageViewProxyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protected function getDlfConfiguration(): array
protected function queryProxy(array $query, string $method = 'GET'): ResponseInterface
{
$request = (new InternalRequest($this->baseUrl))->withQueryParameters(
array_merge([ 'eID' => 'tx_dlf_pageview_proxy' ], $query)
array_merge([ 'middleware' => 'dlf/page-view-proxy' ], $query)
)->withMethod($method);

return $this->executeInternalRequest($request);
Expand Down
4 changes: 0 additions & 4 deletions ext_localconf.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,6 @@
'description' => 'LLL:EXT:dlf/Resources/Private/Language/locallang_tasks.xlf:suggestBuildTask.description',
'additionalFields' => \Kitodo\Dlf\Task\SuggestBuildAdditionalFieldProvider::class,
];
// Register AJAX eID handlers.
if ($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['dlf']['general']['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
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_dlf_solr'] ??= [];

Expand Down
Loading