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

AuthenticationMiddleware   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 31
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 18 5
A __construct() 0 4 1
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