Completed
Push — main ( 26c7b4...5ab5c5 )
by
unknown
04:18
created

ClientFactory::newClient()   A

Complexity

Conditions 5
Paths 12

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 32
c 0
b 0
f 0
rs 9.0968
cc 5
nc 12
nop 0
1
<?php
2
3
namespace Addwiki\Mediawiki\Api\Guzzle;
4
5
use GuzzleHttp\Client;
6
use GuzzleHttp\Handler\CurlHandler;
7
use GuzzleHttp\HandlerStack;
8
use Psr\Log\LoggerAwareInterface;
9
use Psr\Log\LoggerInterface;
10
use Psr\Log\NullLogger;
11
12
/**
13
 * @since 2.1
14
 *
15
 * @author Addshore
16
 */
17
class ClientFactory implements LoggerAwareInterface {
18
19
	private ?Client $client = null;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected '?', expecting T_FUNCTION or T_CONST
Loading history...
20
	private NullLogger $logger;
21
	private array $config;
22
23
	/**
24
	 * @since 2.1
25
	 *
26
	 * @param array $config All configuration settings supported by Guzzle, and these:
27
	 *          middleware => array of extra middleware to pass to guzzle
28
	 *          user-agent => string default user agent to use for requests
29
	 */
30
	public function __construct( array $config = [] ) {
31
		$this->logger = new NullLogger();
32
		$this->config = $config;
33
	}
34
35
	/**
36
	 * @since 2.1
37
	 */
38
	public function getClient(): ?Client {
39
		if ( $this->client === null ) {
40
			$this->client = $this->newClient();
41
		}
42
		return $this->client;
43
	}
44
45
	private function newClient(): Client {
46
		$this->config += [
47
			'cookies' => true,
48
			'headers' => [],
49
			'middleware' => [],
50
		];
51
52
		if ( !array_key_exists( 'User-Agent', $this->config['headers'] ) ) {
53
			if ( array_key_exists( 'user-agent', $this->config ) ) {
54
				$this->config['headers']['User-Agent'] = $this->config['user-agent'];
55
			} else {
56
				$this->config['headers']['User-Agent'] = 'Addwiki - mediawiki-api-base';
57
			}
58
		}
59
		unset( $this->config['user-agent'] );
60
61
		if ( !array_key_exists( 'handler', $this->config ) ) {
62
			$this->config['handler'] = HandlerStack::create( new CurlHandler() );
63
		}
64
65
		$middlewareFactory = new MiddlewareFactory();
66
		$middlewareFactory->setLogger( $this->logger );
67
68
		$this->config['middleware'][] = $middlewareFactory->retry();
69
70
		foreach ( $this->config['middleware'] as $middleware ) {
71
			$this->config['handler']->push( $middleware );
72
		}
73
		unset( $this->config['middleware'] );
74
75
		return new Client( $this->config );
76
	}
77
78
	/**
79
	 * Sets a logger instance on the object
80
	 *
81
	 * @since 2.1
82
	 *
83
	 * @param LoggerInterface $logger The new Logger object.
84
	 *
85
	 * @return null
86
	 */
87
	public function setLogger( LoggerInterface $logger ) {
88
		$this->logger = $logger;
89
	}
90
91
}
92