ClientBuilder   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 7
dl 0
loc 73
ccs 34
cts 34
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 0 32 1
A addHeaderMiddlewareToStack() 0 15 1
A addRetryMiddlewareToStack() 0 15 1
A mergeOptions() 0 5 1
1
<?php
2
3
namespace Softonic\OAuth2\Guzzle\Middleware;
4
5
use GuzzleHttp\Client;
6
use GuzzleHttp\Handler\CurlHandler;
7
use GuzzleHttp\HandlerStack;
8
use GuzzleHttp\Middleware;
9
use League\OAuth2\Client\Provider\AbstractProvider as OAuth2Provider;
10
use Psr\Cache\CacheItemPoolInterface as Cache;
11
12
class ClientBuilder
13
{
14 4
    public static function build(
15
        OAuth2Provider $oauthProvider,
16
        array $tokenOptions,
17
        Cache $cache,
18
        array $guzzleOptions = null
19
    ): Client {
20 4
        $cacheHandler = new AccessTokenCacheHandler($cache);
21
22 4
        $stack = $guzzleOptions['handler'] ?? HandlerStack::create();
23
24 4
        $stack->setHandler(new CurlHandler());
25
26 4
        $stack = static::addHeaderMiddlewareToStack(
27 4
            $stack,
28 4
            $oauthProvider,
29 4
            $tokenOptions,
30 4
            $cacheHandler
31
        );
32 4
        $stack = static::addRetryMiddlewareToStack(
33 4
            $stack,
34 4
            $oauthProvider,
35 4
            $tokenOptions,
36 4
            $cacheHandler
37
        );
38
39
        $defaultOptions = [
40 4
            'handler' => $stack,
41
        ];
42 4
        $guzzleOptions = static::mergeOptions($defaultOptions, $guzzleOptions);
43
44 4
        return new Client($guzzleOptions);
45
    }
46
47 4
    protected static function addHeaderMiddlewareToStack(
48
        HandlerStack $stack,
49
        OAuth2Provider $oauthProvider,
50
        array $tokenOptions,
51
        AccessTokenCacheHandler $cacheHandler
52
    ): HandlerStack {
53 4
        $addAuthorizationHeader = new AddAuthorizationHeader(
54 4
            $oauthProvider,
55 4
            $tokenOptions,
56 4
            $cacheHandler
57
        );
58
59 4
        $stack->push(Middleware::mapRequest($addAuthorizationHeader));
60 4
        return $stack;
61
    }
62
63 4
    protected static function addRetryMiddlewareToStack(
64
        HandlerStack $stack,
65
        OAuth2Provider $oauthProvider,
66
        array $tokenOptions,
67
        AccessTokenCacheHandler $cacheHandler
68
    ): HandlerStack {
69 4
        $retryOnAuthorizationError = new RetryOnAuthorizationError(
70 4
            $oauthProvider,
71 4
            $tokenOptions,
72 4
            $cacheHandler
73
        );
74
75 4
        $stack->push(Middleware::retry($retryOnAuthorizationError));
76 4
        return $stack;
77
    }
78
79 4
    protected static function mergeOptions(array $defaultOptions, array $options = null): array
80
    {
81 4
        $options = $options ?? [];
82 4
        return array_merge($options, $defaultOptions);
83
    }
84
}
85