Test Setup Failed
Push — dev ( b27119...389162 )
by Herberto
04:46
created

persistNewRefreshToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Acme\App\Infrastructure\Auth\Authentication\Oauth;
6
7
use Acme\App\Core\Port\Persistence\DQL\DqlQueryBuilderInterface;
8
use Acme\App\Core\Port\Persistence\Exception\EmptyQueryResultException;
9
use Acme\App\Core\Port\Persistence\PersistenceServiceInterface;
10
use Acme\App\Core\Port\Persistence\QueryServiceRouterInterface;
11
use League\OAuth2\Server\Entities\RefreshTokenEntityInterface;
12
use League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface;
13
14
final class OauthRefreshTokenRepository implements RefreshTokenRepositoryInterface
15
{
16
    /**
17
     * @var DqlQueryBuilderInterface
18
     */
19
    private $dqlQueryBuilder;
20
21
    /**
22
     * @var QueryServiceRouterInterface
23
     */
24
    private $queryService;
25
26
    /**
27
     * @var PersistenceServiceInterface
28
     */
29
    private $persistenceService;
30
31
    public function __construct(
32
        DqlQueryBuilderInterface $dqlQueryBuilder,
33
        QueryServiceRouterInterface $queryService,
34
        PersistenceServiceInterface $persistenceService
35
    ) {
36
        $this->dqlQueryBuilder = $dqlQueryBuilder;
37
        $this->queryService = $queryService;
38
        $this->persistenceService = $persistenceService;
39
    }
40
41
    public function getNewRefreshToken(): RefreshTokenEntityInterface
42
    {
43
        return new OauthRefreshToken();
44
    }
45
46
    public function persistNewRefreshToken(RefreshTokenEntityInterface $refreshToken): void
47
    {
48
        $this->persistenceService->upsert($refreshToken);
49
    }
50
51
    /**
52
     * @param OauthRefreshTokenId $refreshTokenId
53
     */
54
    public function revokeRefreshToken($refreshTokenId): void
55
    {
56
        try {
57
            $refreshToken = $this->find($refreshTokenId);
58
        } catch (EmptyQueryResultException $e) {
59
            return;
60
        }
61
62
        $refreshToken->revoke();
63
        $this->persistenceService->upsert($refreshToken);
64
    }
65
66
    /**
67
     * @param OauthRefreshTokenId $refreshTokenId
68
     */
69
    public function isRefreshTokenRevoked($refreshTokenId): bool
70
    {
71
        try {
72
            $refreshToken = $this->find($refreshTokenId);
73
        } catch (EmptyQueryResultException $e) {
74
            return true;
75
        }
76
77
        return $refreshToken->isRevoked()
78
            ?: $refreshToken->getAccessToken()->isRevoked();
79
    }
80
81
    private function find(OauthRefreshTokenId $refreshTokenId): OauthRefreshToken
82
    {
83
        $dqlQuery = $this->dqlQueryBuilder->create(OauthRefreshToken::class)
84
            ->where('OauthAccessToken.identifier = :identifier')
85
            ->setParameter('identifier', $refreshTokenId)
86
            ->build();
87
88
        return $this->queryService->query($dqlQuery)->getSingleResult();
89
    }
90
}
91