Failed Conditions
Push — ng ( f2606a...ec729c )
by Florent
03:34
created

RefreshTokenRepository::initRefreshTokens()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 35

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 42
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 35
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * The MIT License (MIT)
7
 *
8
 * Copyright (c) 2014-2018 Spomky-Labs
9
 *
10
 * This software may be modified and distributed under the terms
11
 * of the MIT license.  See the LICENSE file for details.
12
 */
13
14
namespace OAuth2Framework\Bundle\Tests\TestBundle\Entity;
15
16
use OAuth2Framework\Component\Core\Client\ClientId;
17
use OAuth2Framework\Component\Core\DataBag\DataBag;
18
use OAuth2Framework\Component\Core\UserAccount\UserAccountId;
19
use OAuth2Framework\Component\RefreshTokenGrant\RefreshToken;
20
use OAuth2Framework\Component\RefreshTokenGrant\RefreshTokenId;
21
use OAuth2Framework\Component\RefreshTokenGrant\RefreshTokenRepository as RefreshTokenRepositoryInterface;
22
use Symfony\Component\Cache\Adapter\AdapterInterface;
23
24
class RefreshTokenRepository implements RefreshTokenRepositoryInterface
25
{
26
    /**
27
     * @var AdapterInterface
28
     */
29
    private $cache;
30
31
    /**
32
     * RefreshTokenRepository constructor.
33
     *
34
     * @param AdapterInterface $cache
35
     */
36
    public function __construct(AdapterInterface $cache)
37
    {
38
        $this->cache = $cache;
39
        $this->initRefreshTokens();
40
    }
41
42
    /**
43
     * {@inheritdoc}
44
     */
45
    public function find(RefreshTokenId $refreshTokenId)
46
    {
47
        $refreshToken = $this->getFromCache($refreshTokenId);
48
49
        return $refreshToken;
50
    }
51
52
    /**
53
     * {@inheritdoc}
54
     */
55
    public function save(RefreshToken $refreshToken)
56
    {
57
        $refreshToken->eraseMessages();
58
        $this->cacheObject($refreshToken);
59
    }
60
61
    /**
62
     * @param RefreshTokenId $refreshTokenId
63
     *
64
     * @return RefreshToken|null
65
     */
66
    private function getFromCache(RefreshTokenId $refreshTokenId): ? RefreshToken
67
    {
68
        $itemKey = sprintf('oauth2-refresh_token-%s', $refreshTokenId->getValue());
69
        $item = $this->cache->getItem($itemKey);
70
        if ($item->isHit()) {
71
            return $item->get();
72
        }
73
74
        return null;
75
    }
76
77
    /**
78
     * @param RefreshToken $refreshToken
79
     */
80
    private function cacheObject(RefreshToken $refreshToken)
81
    {
82
        $itemKey = sprintf('oauth2-refresh_token-%s', $refreshToken->getTokenId()->getValue());
83
        $item = $this->cache->getItem($itemKey);
84
        $item->set($refreshToken);
85
        $item->tag(['oauth2_server', 'refresh_token', $itemKey]);
86
        $this->cache->save($item);
87
    }
88
89
    private function initRefreshTokens()
90
    {
91
        $refreshToken = RefreshToken::createEmpty();
92
        $refreshToken = $refreshToken->create(
93
            RefreshTokenId::create('VALID_REFRESH_TOKEN'),
94
            UserAccountId::create('john.1'),
95
            ClientId::create('CLIENT_ID_3'),
96
            DataBag::create([]),
97
            DataBag::create([]),
98
            new \DateTimeImmutable('now +1 day'),
99
            null
100
        );
101
        $refreshToken->eraseMessages();
102
        $this->save($refreshToken);
103
104
        $refreshToken = RefreshToken::createEmpty();
105
        $refreshToken = $refreshToken->create(
106
            RefreshTokenId::create('REVOKED_REFRESH_TOKEN'),
107
            UserAccountId::create('john.1'),
108
            ClientId::create('CLIENT_ID_3'),
109
            DataBag::create([]),
110
            DataBag::create([]),
111
            new \DateTimeImmutable('now +1 day'),
112
            null
113
        );
114
        $refreshToken = $refreshToken->markAsRevoked();
115
        $refreshToken->eraseMessages();
116
        $this->save($refreshToken);
117
118
        $refreshToken = RefreshToken::createEmpty();
119
        $refreshToken = $refreshToken->create(
120
            RefreshTokenId::create('EXPIRED_REFRESH_TOKEN'),
121
            UserAccountId::create('john.1'),
122
            ClientId::create('CLIENT_ID_3'),
123
            DataBag::create([]),
124
            DataBag::create([]),
125
            new \DateTimeImmutable('now -1 day'),
126
            null
127
        );
128
        $refreshToken->eraseMessages();
129
        $this->save($refreshToken);
130
    }
131
}
132