GetTokenAction::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 9.9
c 0
b 0
f 0
cc 1
nc 1
nop 4
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DataFlowServer\Authentication\Controller;
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 Psr\Log\LoggerInterface;
11
use SlayerBirden\DataFlowServer\Authentication\Exception\InvalidCredentialsException;
12
use SlayerBirden\DataFlowServer\Authentication\Exception\PermissionDeniedException;
13
use SlayerBirden\DataFlowServer\Authentication\TokenManagerInterface;
14
use SlayerBirden\DataFlowServer\Stdlib\Request\Parser;
15
use SlayerBirden\DataFlowServer\Stdlib\ResponseFactory;
16
use SlayerBirden\DataFlowServer\Stdlib\Validation\ValidationResponseFactory;
17
use Zend\Hydrator\ExtractionInterface;
18
use Zend\InputFilter\InputFilterInterface;
19
20
final class GetTokenAction implements MiddlewareInterface
21
{
22
    /**
23
     * @var TokenManagerInterface
24
     */
25
    private $tokenManager;
26
    /**
27
     * @var ExtractionInterface
28
     */
29
    private $extraction;
30
    /**
31
     * @var InputFilterInterface
32
     */
33
    private $inputFilter;
34
    /**
35
     * @var LoggerInterface
36
     */
37
    private $logger;
38
39 10
    public function __construct(
40
        TokenManagerInterface $tokenManager,
41
        ExtractionInterface $extraction,
42
        InputFilterInterface $inputFilter,
43
        LoggerInterface $logger
44
    ) {
45 10
        $this->tokenManager = $tokenManager;
46 10
        $this->extraction = $extraction;
47 10
        $this->inputFilter = $inputFilter;
48 10
        $this->logger = $logger;
49 10
    }
50
51
    /**
52
     * @inheritdoc
53
     */
54 10
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
55
    {
56 10
        $data = Parser::getRequestBody($request);
57 10
        $this->inputFilter->setData($data);
58
59 10
        if (!$this->inputFilter->isValid()) {
60 4
            return (new ValidationResponseFactory())('token', $this->inputFilter);
61
        }
62
63
        try {
64 6
            $token = $this->tokenManager->getToken($data['user'], $data['password'], $data['resources']);
65 2
            $msg = 'Token successfully created';
66 2
            return (new ResponseFactory())($msg, 200, 'token', $this->extraction->extract($token));
67 4
        } catch (InvalidCredentialsException $exception) {
68 2
            $msg = 'Invalid credentials provided. Please double check your user and password.';
69 2
            return (new ResponseFactory())($msg, 401, 'token');
70 2
        } catch (PermissionDeniedException $exception) {
71 2
            $msg = 'Provided user does not have permission to access requested resources.';
72 2
            return (new ResponseFactory())($msg, 403, 'token');
73
        }
74
    }
75
}
76