DigiComp.FlowMaintenanceMode/Classes/Http/MaintenanceModeMiddleware.php

44 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace DigiComp\FlowMaintenanceMode\Http;
use DigiComp\FlowMaintenanceMode\AllowModules\AllowModuleInterface;
use DigiComp\FlowMaintenanceMode\MaintenanceModeActiveException;
use DigiComp\FlowMaintenanceMode\MaintenanceModeManagerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class MaintenanceModeMiddleware implements MiddlewareInterface
{
protected MaintenanceModeManagerInterface $maintenanceModeManager;
/**
* @var array<array-key, AllowModuleInterface>
*/
protected array $allowModules;
public function __construct(
MaintenanceModeManagerInterface $maintenanceModeManager,
AllowModuleInterface ...$allowModules
) {
$this->maintenanceModeManager = $maintenanceModeManager;
$this->allowModules = $allowModules;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if ($this->maintenanceModeManager->isMaintenanceMode()) {
foreach ($this->allowModules as $allowModule) {
if ($allowModule->isRequestAllowed($request)) {
return $handler->handle($request);
}
}
throw new MaintenanceModeActiveException('Maintenance is active');
}
return $handler->handle($request);
}
}