AccessTokenFacade   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Test Coverage

Coverage 94.44%

Importance

Changes 0
Metric Value
wmc 7
eloc 19
dl 0
loc 69
ccs 17
cts 18
cp 0.9444
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getEntity() 0 8 2
A getIdentifier() 0 3 1
A create() 0 15 1
A getStorage() 0 3 1
A __construct() 0 6 1
A getLifetime() 0 3 1
1
<?php
2
3
namespace kalanis\OAuth2\Storage\AccessTokens;
4
5
6
use DateTime;
7
use kalanis\OAuth2\IKeyGenerator;
8
use kalanis\OAuth2\Storage\Clients\IClient;
9
use kalanis\OAuth2\Storage\Exceptions\InvalidAccessTokenException;
10
use kalanis\OAuth2\Storage\ITokenFacade;
11
12
13
/**
14
 * AccessToken
15
 * @package kalanis\OAuth2\Storage\AccessTokens
16
 */
17 1
class AccessTokenFacade implements ITokenFacade
18
{
19
20 1
    public function __construct(
21
        private readonly int $lifetime,
22
        private readonly IKeyGenerator $keyGenerator,
23
        private readonly IAccessTokenStorage $storage,
24
    )
25
    {
26 1
    }
27
28
    /**
29
     * Create access token
30
     */
31
    public function create(IClient $client, string|int|null $userId, array $scope = []): IAccessToken
32
    {
33 1
        $accessExpires = new DateTime;
34 1
        $accessExpires->modify('+' . $this->lifetime . ' seconds');
35
36 1
        $accessToken = new AccessToken(
37 1
            $this->keyGenerator->generate(),
38
            $accessExpires,
39 1
            $client->getId(),
40
            $userId,
41
            $scope
42
        );
43 1
        $this->storage->store($accessToken);
44
45 1
        return $accessToken;
46
    }
47
48
    /**
49
     * Check access token
50
     */
51
    public function getEntity(string $token): IAccessToken
52
    {
53 1
        $entity = $this->storage->getValidAccessToken($token);
54 1
        if (!$entity) {
55 1
            $this->storage->remove($token);
56 1
            throw new InvalidAccessTokenException;
57
        }
58 1
        return $entity;
59
    }
60
61
    /**
62
     * Get token identifier name
63
     */
64
    public function getIdentifier(): string
65
    {
66 1
        return self::ACCESS_TOKEN;
67
    }
68
69
70
    /**
71
     * Returns access token lifetime
72
     * @return int
73
     */
74
    public function getLifetime(): int
75
    {
76 1
        return $this->lifetime;
77
    }
78
79
    /**
80
     * Get access token storage
81
     * @return IAccessTokenStorage
82
     */
83
    public function getStorage(): IAccessTokenStorage
84
    {
85
        return $this->storage;
86
    }
87
}
88