DbalAccessTokenStorage::findByToken()   B
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 35
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 35
rs 8.5806
cc 4
eloc 23
nc 2
nop 1
1
<?php
2
3
namespace Bgy\OAuth2Server\DbalStorage;
4
5
use Bgy\OAuth2\AccessToken;
6
use Bgy\OAuth2\ResourceOwner;
7
use Bgy\OAuth2\Storage\AccessTokenNotFound;
8
use Bgy\OAuth2\Storage\AccessTokenStorage;
9
use Doctrine\DBAL\Connection;
10
11
/**
12
 * @author Boris Guéry <[email protected]>
13
 */
14
class DbalAccessTokenStorage implements AccessTokenStorage
15
{
16
    private $dbalConnection;
17
    private $tableConfiguration;
18
19
    public function __construct(Connection $dbalConnection, TableConfiguration $tableConfiguration)
20
    {
21
        $this->dbalConnection     = $dbalConnection;
22
        $this->tableConfiguration = $tableConfiguration;
23
    }
24
25
    public function save(AccessToken $accessToken)
26
    {
27
        $this->dbalConnection->insert(
28
            $this->tableConfiguration->getAccessTokenTableName(),
29
            [
30
                'access_token'        => $accessToken->getToken(),
31
                'resource_owner_id'   => (null === $accessToken->getResourceOwner())
32
                    ? null
33
                    : $accessToken->getResourceOwner()->getResourceOwnerId(),
34
                'resource_owner_type' => (null === $accessToken->getResourceOwner())
35
                    ? null
36
                    : $accessToken->getResourceOwner()->getResourceOwnerType(),
37
                'client_id'           => $accessToken->getClientId(),
38
                'scopes'              => implode(',', $accessToken->getScopes()),
39
                'expires_at'          => substr(
40
                    $accessToken->getExpiresAt()->format(\DateTime::ISO8601),
41
                    0,
42
                    -5
43
                )
44
            ]
45
        );
46
    }
47
48
    public function delete(AccessToken $accessToken)
49
    {
50
        $this->dbalConnection->delete(
51
            $this->tableConfiguration->getAccessTokenTableName(),
52
            ['access_token' => $accessToken->getToken()]
53
        );
54
    }
55
56
    public function findByToken($accessTokenId)
57
    {
58
        $qb = $this->dbalConnection->createQueryBuilder();
59
        $stmt = $qb->select('*')
60
            ->from($this->tableConfiguration->getAccessTokenTableName())
61
            ->where(
62
                $qb->expr()->like('access_token', ':accessToken')
63
            )
64
            ->setMaxResults(1)
65
            ->setParameter('accessToken', $accessTokenId)
66
            ->execute()
67
        ;
68
69
        $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
70
71
72
        if (1 !== count($rows)) {
73
74
            throw new AccessTokenNotFound($accessTokenId);
75
        }
76
77
        return new AccessToken(
78
            $rows[0]['access_token'],
79
            \DateTimeImmutable::createFromFormat(
80
                'Y-m-d H:i:s',
81
                $rows[0]['expires_at'],
82
                new \DateTimeZone('UTC')
83
            ),
84
            $rows[0]['client_id'],
85
            ($rows[0]['resource_owner_id'] && $rows[0]['resource_owner_type'])
86
                ? new ResourceOwner($rows[0]['resource_owner_id'], $rows[0]['resource_owner_type'])
87
                : null,
88
            explode(',', $rows[0]['scopes'])
89
        );
90
    }
91
}
92