Passed
Push — master ( 1deb14...1f5a3a )
by Petr
03:17
created

ResourcePresenter::injectInput()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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
12
13
/**
14
 * OAuth2 secured resource presenter
15
 * @package kalanis\OAuth2\Application
16
 */
17
abstract class ResourcePresenter extends Presenter implements IResourcePresenter
18
{
19
20
    /** Access token manager facade */
21
    #[\Nette\DI\Attributes\Inject]
22
    public AccessTokenFacade $accessToken;
23
24
    /** Standard input parser */
25
    #[\Nette\DI\Attributes\Inject]
26
    public IInput $input;
27
28
    /**
29
     * Check presenter requirements
30
     * @param \ReflectionClass<object>|\ReflectionMethod $element
31
     * @throws ForbiddenRequestException
32
     */
33
    public function checkRequirements(\ReflectionClass|\ReflectionMethod $element): void
34
    {
35
        parent::checkRequirements($element);
36
        $accessToken = $this->input->getAuthorization();
37
        if (!$accessToken) {
38
            throw new ForbiddenRequestException('Access token not provided');
39
        }
40
        $this->checkAccessToken($accessToken);
41
    }
42
43
    /**
44
     * Check if access token is valid
45
     * @param string $accessToken
46
     * @throws ForbiddenRequestException
47
     * @return void
48
     */
49
    public function checkAccessToken(string $accessToken): void
50
    {
51
        try {
52
            $this->accessToken->getEntity($accessToken);
53
        } catch (InvalidAccessTokenException $e) {
54
            throw new ForbiddenRequestException('Invalid access token provided. Use refresh token to grant new one.', 0, $e);
55
        }
56
    }
57
}
58