RequestFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 6
eloc 24
c 3
b 0
f 0
dl 0
loc 58
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createStandaloneRequest() 0 14 3
A __construct() 0 3 1
A createRequest() 0 6 2
1
<?php declare( strict_types=1 );
2
3
namespace BotRiconferme\Request;
4
5
use Psr\Log\LoggerInterface;
6
7
class RequestFactory {
8
	private const STANDALONE_REQUEST_ALLOWED_COOKIES = [
9
		'WMF-Last-Access',
10
		'WMF-Last-Access-Global',
11
		'GeoIP',
12
		'NetworkProbeLimit',
13
	];
14
15
	/** @var string */
16
	private $domain;
17
	/** @var LoggerInterface */
18
	private $logger;
19
20
	/**
21
	 * @param LoggerInterface $logger
22
	 * @param string $domain
23
	 */
24
	public function __construct( LoggerInterface $logger, string $domain ) {
25
		$this->logger = $logger;
26
		$this->domain = $domain;
27
	}
28
29
	/**
30
	 * @param array $params
31
	 * @phan-param array<int|string|bool> $params
32
	 * @param string[] $cookies
33
	 * @param callable $cookiesCallback
34
	 * @return RequestBase
35
	 */
36
	public function createRequest( array $params, array $cookies, callable $cookiesCallback ) {
37
		$ret = extension_loaded( 'curl' )
38
			? new CurlRequest( $this->logger, $params, $this->domain, $cookiesCallback )
39
			: new NativeRequest( $this->logger, $params, $this->domain, $cookiesCallback );
40
		$ret->setCookies( $cookies );
41
		return $ret;
42
	}
43
44
	/**
45
	 * Similar to createRequest, but doesn't save any info like cookies.
46
	 *
47
	 * @param array $params
48
	 * @phan-param array<int|string|bool> $params
49
	 * @return RequestBase
50
	 */
51
	public function createStandaloneRequest( array $params ) {
52
		/** @param string[] $newCookies */
53
		$cookiesCallback = function ( array $newCookies ) {
54
			$newCookies = array_map( 'trim', array_keys( $newCookies ) );
55
			$relevantCookies = array_diff( $newCookies, self::STANDALONE_REQUEST_ALLOWED_COOKIES );
56
			if ( $relevantCookies ) {
57
				$this->logger->warning(
58
					'Standalone request with set-cookie: ' . implode( ', ', $relevantCookies )
59
				);
60
			}
61
		};
62
		return extension_loaded( 'curl' )
63
			? new CurlRequest( $this->logger, $params, $this->domain, $cookiesCallback )
64
			: new NativeRequest( $this->logger, $params, $this->domain, $cookiesCallback );
65
	}
66
}
67