for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Chubbyphp\Cors\Negotiation;
use Psr\Http\Message\ServerRequestInterface;
final class HeadersNegotiator implements HeadersNegotiatorInterface
{
/**
* @var string[]
*/
private $allowHeaders;
* @param string[] $allowHeaders
public function __construct(array $allowHeaders)
$this->allowHeaders = [];
foreach ($allowHeaders as $allowHeader) {
$this->addAllowHeader($allowHeader);
}
* @param string $allowHeader
private function addAllowHeader(string $allowHeader): void
$this->allowHeaders[] = $allowHeader;
* @param ServerRequestInterface $request
*
* @return bool
public function negotiate(ServerRequestInterface $request): bool
if (!$request->hasHeader(self::HEADER)) {
return false;
$headers = $request->getHeader(self::HEADER);
foreach ($headers as $i => $header) {
foreach ($this->allowHeaders as $allowHeader) {
if (mb_strtolower($allowHeader) === mb_strtolower($header)) {
unset($headers[$i]);
return [] === $headers;
* @return string[]
public function getAllowedHeaders(): array
return $this->allowHeaders;