Completed
Pull Request — master (#554)
by Alejandro
11:37 queued 08:50
created

AuthenticationMiddleware::process()   A

Complexity

Conditions 5
Paths 2

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 5

Importance

Changes 0
Metric Value
cc 5
eloc 11
nc 2
nop 2
dl 0
loc 18
ccs 11
cts 11
cp 1
crap 5
rs 9.6111
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Shlinkio\Shlink\Rest\Middleware;
6
7
use Fig\Http\Message\RequestMethodInterface;
8
use Fig\Http\Message\StatusCodeInterface;
9
use Psr\Http\Message\ResponseInterface as Response;
10
use Psr\Http\Message\ServerRequestInterface as Request;
11
use Psr\Http\Server\MiddlewareInterface;
12
use Psr\Http\Server\RequestHandlerInterface;
13
use Shlinkio\Shlink\Rest\Authentication\RequestToHttpAuthPluginInterface;
14
use Zend\Expressive\Router\RouteResult;
15
16
use function Functional\contains;
17
18
class AuthenticationMiddleware implements MiddlewareInterface, StatusCodeInterface, RequestMethodInterface
19
{
20
    /** @var array */
21
    private $routesWhitelist;
22
    /** @var RequestToHttpAuthPluginInterface */
23
    private $requestToAuthPlugin;
24
25 5
    public function __construct(RequestToHttpAuthPluginInterface $requestToAuthPlugin, array $routesWhitelist)
26
    {
27 5
        $this->routesWhitelist = $routesWhitelist;
28 5
        $this->requestToAuthPlugin = $requestToAuthPlugin;
29
    }
30
31 5
    public function process(Request $request, RequestHandlerInterface $handler): Response
32
    {
33
        /** @var RouteResult|null $routeResult */
34 5
        $routeResult = $request->getAttribute(RouteResult::class);
35
        if (
36 5
            $routeResult === null
37 5
            || $routeResult->isFailure()
38 5
            || $request->getMethod() === self::METHOD_OPTIONS
39 5
            || contains($this->routesWhitelist, $routeResult->getMatchedRouteName())
40
        ) {
41 4
            return $handler->handle($request);
42
        }
43
44 1
        $plugin = $this->requestToAuthPlugin->fromRequest($request);
45 1
        $plugin->verify($request);
46 1
        $response = $handler->handle($request);
47
48 1
        return $plugin->update($request, $response);
49
    }
50
}
51