ValidateOwnerMiddleware   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 5
dl 0
loc 22
ccs 8
cts 8
cp 1
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A process() 0 16 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