Failed Conditions
Push — master ( b69c62...c6060f )
by Sébastien
02:49
created

ApiContredanseProfileHandler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 2
nc 1
nop 2
dl 0
loc 4
c 0
b 0
f 0
cc 1
ccs 0
cts 4
cp 0
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Handler;
6
7
use App\Middleware\AuthTokenMiddleware;
8
use App\Security\Exception\UserNotFoundException;
9
use App\Security\UserProviderInterface;
10
use App\Service\TokenManager;
11
use Fig\Http\Message\StatusCodeInterface;
12
use Lcobucci\JWT\Token;
13
use Psr\Http\Message\ResponseInterface;
14
use Psr\Http\Message\ServerRequestInterface;
15
use Psr\Http\Server\RequestHandlerInterface;
16
use Zend\Diactoros\Response\JsonResponse;
17
18
class ApiContredanseProfileHandler implements RequestHandlerInterface
19
{
20
    /**
21
     * @var UserProviderInterface
22
     */
23
    private $userProvider;
24
25
    /**
26
     * @var TokenManager
27
     */
28
    private $tokenManager;
29
30
    public function __construct(TokenManager $tokenManager, UserProviderInterface $userProvider)
31
    {
32
        $this->userProvider = $userProvider;
33
        $this->tokenManager = $tokenManager;
34
    }
35
36
    public function handle(ServerRequestInterface $request): ResponseInterface
37
    {
38
        $token = $request->getAttribute(AuthTokenMiddleware::class);
39
        if (!$token instanceof Token) {
40
            return (new JsonResponse([
41
                'success' => false,
42
                'reason'  => 'Missing auth middleware attribute',
43
            ]))->withStatus(StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR);
44
        }
45
46
        $user_id = $token->getClaim('user_id');
47
48
        try {
49
            $userData = $this->userProvider->findUser($user_id);
50
            $data     = [
51
                'success' => true,
52
                'data'    => [
53
                    'user_id'   => $userData['user_id'],
54
                    'firstname' => $userData['firstname'],
55
                    'name'      => $userData['name'],
56
                    'email'     => $userData['email'],
57
                ]
58
            ];
59
60
            return (new JsonResponse($data))->withStatus(StatusCodeInterface::STATUS_OK);
61
        } catch (UserNotFoundException $e) {
62
            return (new JsonResponse(['success' => false, 'reason' => $e->getMessage()]))
63
                ->withStatus(StatusCodeInterface::STATUS_UNAUTHORIZED);
64
        } catch (\Throwable $e) {
65
            return (new JsonResponse(['success' => false, 'reason' => $e->getMessage()]))
66
                ->withStatus(StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR);
67
        }
68
    }
69
}
70