Completed
Push — master ( fc6f01...c001b0 )
by Alexandre
01:58
created

PKCEExtension::extendAuthorizationServerBuilder()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 22
rs 9.568
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: Alexandre
5
 * Date: 16/06/2018
6
 * Time: 15:28
7
 */
8
9
namespace OAuth2\Extensions\PKCE;
10
11
12
use OAuth2\AuthorizationGrantTypes\Flows\AuthorizationCodeFlow;
13
use OAuth2\Extensions\ExtensionInterface;
14
use OAuth2\Extensions\PKCE\AuthorizationGrantTypes\Flows\AuthorizationCodeFlow as PKCEAuthorizationCodeFlow;
15
use OAuth2\Extensions\PKCE\Endpoints\Authorization\AuthorizationRequestBuilder as PKCEAuthorizationRequestBuilder;
16
use OAuth2\Extensions\PKCE\Storages\AuthorizationCodeStorageInterface as PKCEAuthorizationCodeStorageInterface;
17
use OAuth2\Roles\AuthorizationServer\AuthorizationServerBuilder;
18
19
class PKCEExtension implements ExtensionInterface
20
{
21
    public function extendAuthorizationServerBuilder(AuthorizationServerBuilder $builder)
22
    {
23
        $builder->setAuthorizationRequestBuilder(new PKCEAuthorizationRequestBuilder(
24
            $builder->getStorageManager()->getClientStorage(),
25
            $builder->getResponseTypeManager(),
26
            $builder->getResponseModeManager(),
27
            $builder->getScopePolicyManager()
28
        ));
29
30
        $authorizationCodeStorage = $builder->getStorageManager()->getAuthorizationCodeStorage();
31
        if(!$authorizationCodeStorage instanceof PKCEAuthorizationCodeStorageInterface) {
32
            throw new \InvalidArgumentException('Authorization code storage must be an instance of "' . PKCEAuthorizationCodeStorageInterface::class . '"');
33
        }
34
35
        $authorizationCodeFlow = $builder->getFlowManager()->getFlow('authorization_code');
36
        if (!$authorizationCodeFlow instanceof AuthorizationCodeFlow) {
37
            throw new \InvalidArgumentException('Flow with key "authorization_code" must be an instance of "' . AuthorizationCodeFlow::class . '"');
38
        }
39
40
        $builder->getFlowManager()->addFlow('authorization_code', new PKCEAuthorizationCodeFlow(
41
            $authorizationCodeFlow,
42
            $authorizationCodeStorage
43
        ));
44
    }
45
}