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

ApiContredanseProfileHandler   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 49
c 0
b 0
f 0
ccs 0
cts 33
cp 0
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A handle() 0 31 4
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