ResourcePresenter   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 14
dl 0
loc 38
rs 10
c 1
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A checkRequirements() 0 8 2
A checkAccessToken() 0 6 2
1
<?php
2
3
namespace kalanis\OAuth2\Application;
4
5
6
use kalanis\OAuth2\Http\IInput;
7
use kalanis\OAuth2\Storage\AccessTokens\AccessTokenFacade;
8
use kalanis\OAuth2\Storage\Exceptions\InvalidAccessTokenException;
9
use Nette\Application\ForbiddenRequestException;
10
use Nette\Application\UI\Presenter;
11
use ReflectionClass;
12
use ReflectionMethod;
13
14
15
/**
16
 * OAuth2 secured resource presenter
17
 * @package kalanis\OAuth2\Application
18
 */
19
abstract class ResourcePresenter extends Presenter implements IResourcePresenter
20
{
21
22
    /** Access token manager facade */
23
    #[\Nette\DI\Attributes\Inject]
24
    public AccessTokenFacade $accessToken;
25
26
    /** Standard input parser */
27
    #[\Nette\DI\Attributes\Inject]
28
    public IInput $input;
29
30
    /**
31
     * Check presenter requirements
32
     * @param ReflectionClass<object>|ReflectionMethod $element
33
     * @throws ForbiddenRequestException
34
     */
35
    public function checkRequirements(ReflectionClass|ReflectionMethod $element): void
36
    {
37
        parent::checkRequirements($element);
38
        $accessToken = $this->input->getAuthorization();
39
        if (!$accessToken) {
40
            throw new ForbiddenRequestException('Access token not provided');
41
        }
42
        $this->checkAccessToken($accessToken);
43
    }
44
45
    /**
46
     * Check if access token is valid
47
     * @param string $accessToken
48
     * @throws ForbiddenRequestException
49
     * @return void
50
     */
51
    public function checkAccessToken(string $accessToken): void
52
    {
53
        try {
54
            $this->accessToken->getEntity($accessToken);
55
        } catch (InvalidAccessTokenException $e) {
56
            throw new ForbiddenRequestException('Invalid access token provided. Use refresh token to grant new one.', 0, $e);
57
        }
58
    }
59
}
60