. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function explode; /** * Middleware to detect the client's IP address. */ class ClientIp extends \Middlewares\ClientIp { /** * @param ServerRequestInterface $request * @param RequestHandlerInterface $handler * * @return ResponseInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // The configuration comes from config.ini.php, via request attributes. $trusted_headers = $this->getCommaSeparatedAttribute($request, 'trusted_headers'); $trusted_proxies = $this->getCommaSeparatedAttribute($request, 'trusted_proxies'); $this->proxy($trusted_proxies, $trusted_headers); return parent::process($request, $handler); } /** * @param ServerRequestInterface $request * @param string $attribute * * @return string[] */ private function getCommaSeparatedAttribute(ServerRequestInterface $request, string $attribute): array { $value = $request->getAttribute($attribute); if ($value === null) { return []; } return explode(',', $value); } }