ValidateOwnerMiddleware::process()   A
last analyzed

Complexity

Conditions 5
Paths 3

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 5

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 8
cts 8
cp 1
rs 9.4222
c 0
b 0
f 0
cc 5
nc 3
nop 2
crap 5
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Domain\Middleware;
5
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Message\ServerRequestInterface;
8
use Psr\Http\Server\MiddlewareInterface;
9
use Psr\Http\Server\RequestHandlerInterface;
10
use SlayerBirden\DataFlowServer\Authentication\Middleware\TokenMiddleware;
11
use SlayerBirden\DataFlowServer\Doctrine\Middleware\ResourceMiddlewareInterface;
12
use SlayerBirden\DataFlowServer\Domain\Entities\ClaimedResourceInterface;
13
use SlayerBirden\DataFlowServer\Domain\Entities\User;
14
use SlayerBirden\DataFlowServer\Stdlib\ResponseFactory;
15
16
final class ValidateOwnerMiddleware implements MiddlewareInterface
17
{
18
    /**
19
     * @inheritdoc
20
     */
21 24
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
22
    {
23 24
        $resource = $request->getAttribute(ResourceMiddlewareInterface::DATA_RESOURCE);
24
25 24
        if ($resource && $resource instanceof ClaimedResourceInterface) {
26 14
            $resourceOwner = $resource->getOwner();
27
            /** @var User|null $currentOwner */
28 14
            $currentOwner = $request->getAttribute(TokenMiddleware::USER_PARAM);
29
30 14
            if (!$currentOwner || ($currentOwner->getId() !== $resourceOwner->getId())) {
31 4
                return (new ResponseFactory())('Access denied.', 403);
32
            }
33
        }
34
35 20
        return $handler->handle($request);
36
    }
37
}
38