hendrikmaus/branda

View on GitHub
src/Matching/Matcher/HttpHeaders.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace Hmaus\Branda\Matching\Matcher;

use Hmaus\Branda\Matching\Matcher;
use Hmaus\Spas\Parser\ParsedRequest;
use React\Http\Request;
use Symfony\Component\HttpFoundation\HeaderBag;

class HttpHeaders implements Matcher
{

    /**
     * Try to match the incoming request to the api description request
     *
     * @param Request $request
     * @param ParsedRequest $parsedRequest
     * @return bool
     */
    public function match(Request $request, ParsedRequest $parsedRequest)
    {
        $requestHeaders = new HeaderBag($request->getHeaders());
        $parsedRequestHeaders = $parsedRequest->getHeaders();

        if ($requestHeaders->count() === 0 && $parsedRequestHeaders->count() === 0) {
            return true;
        }

        if ($parsedRequestHeaders->count() === 0) {
            return true;
        }

        foreach ($parsedRequestHeaders as $key => $value) {
            if (!$requestHeaders->has($key)) {
                return false;
            }

            if ($requestHeaders->get($key) !== array_shift($value)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Return id of the matcher, e.g. 'http_method'
     *
     * @return string
     */
    public function getId()
    {
        return 'http_headers';
    }

    /**
     * Return human readable name of the matcher, e.g. 'HTTP Method Matcher'
     *
     * @return string
     */
    public function getName()
    {
        return 'HTTP Header Matcher';
    }
}