Completed
Push — master ( 5c0b6f...5c71f2 )
by Oleg
10:16
created

InvalidateTokenAction   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 85%

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 8
dl 0
loc 52
ccs 17
cts 20
cp 0.85
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A process() 0 26 2
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Authentication\Controller;
5
6
use Doctrine\Common\Persistence\ManagerRegistry;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Server\MiddlewareInterface;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Psr\Log\LoggerInterface;
12
use SlayerBirden\DataFlowServer\Authentication\Entities\Token;
13
use SlayerBirden\DataFlowServer\Doctrine\Middleware\ResourceMiddlewareInterface;
14
use SlayerBirden\DataFlowServer\Notification\DangerMessage;
15
use SlayerBirden\DataFlowServer\Notification\SuccessMessage;
16
use Zend\Diactoros\Response\JsonResponse;
17
use Zend\Hydrator\HydratorInterface;
18
19
final class InvalidateTokenAction implements MiddlewareInterface
20
{
21
    /**
22
     * @var LoggerInterface
23
     */
24
    private $logger;
25
    /**
26
     * @var HydratorInterface
27
     */
28
    private $hydrator;
29
    /**
30
     * @var ManagerRegistry
31
     */
32
    private $managerRegistry;
33
34 1
    public function __construct(ManagerRegistry $managerRegistry, LoggerInterface $logger, HydratorInterface $hydrator)
35
    {
36 1
        $this->managerRegistry = $managerRegistry;
37 1
        $this->logger = $logger;
38 1
        $this->hydrator = $hydrator;
39 1
    }
40
41
    /**
42
     * @inheritdoc
43
     */
44 1
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
45
    {
46
        /** @var Token $token */
47 1
        $token = $request->getAttribute(ResourceMiddlewareInterface::DATA_RESOURCE);
48 1
        $token->setActive(false);
49
50 1
        $em = $this->managerRegistry->getManagerForClass(get_class($token));
51 1
        if ($em === null) {
52
            return new JsonResponse([
53
                'msg' => new DangerMessage('Could not retrieve ObjectManager'),
54
                'success' => false,
55
                'data' => [
56
                    'token' => null,
57
                ]
58
            ], 500);
59
        }
60 1
        $em->persist($token);
61 1
        $em->flush();
62 1
        return new JsonResponse([
63 1
            'data' => [
64 1
                'token' => $this->hydrator->extract($token),
65
            ],
66
            'success' => true,
67 1
            'msg' => new SuccessMessage('Token invalidated.'),
68 1
        ], 200);
69
    }
70
}
71