APIClient.php
2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
declare(strict_types=1);
namespace WP_Rocket\Engine\Optimization\DynamicLists;
use WP_Error;
use WP_Rocket\Admin\Options_Data;
class APIClient {
/**
* API URL.
*/
const API_URL = 'https://b.rucss.wp-rocket.me/api/';
/**
* Response Code.
*
* @var int
*/
protected $response_code = 200;
/**
* Error message.
*
* @var string
*/
protected $error_message = '';
/**
* Response Body.
*
* @var string
*/
protected $response_body = '';
/**
* Plugin options instance.
*
* @var Options_Data
*/
protected $options;
/**
* Instantiate the class.
*
* @param Options_Data $options Options instance.
*/
public function __construct( Options_Data $options ) {
$this->options = $options;
}
/**
* Get exclusions list.
*
* @param string $hash Hash of lists content to compare.
*
* @return array
*/
public function get_exclusions_list( $hash ) {
$args = [
'body' => [
'hash' => $hash,
],
'timeout' => 5,
];
if ( ! $this->handle_request( 'exclusions/list', $args ) ) {
return [
'code' => $this->response_code,
'message' => $this->error_message,
];
}
return [
'code' => $this->response_code,
'body' => $this->response_body,
];
}
/**
* Handle the request.
*
* @param string $request_path request path.
* @param array $args Passed arguments.
*
* @return bool
*/
private function handle_request( string $request_path, array $args ) {
$api_url = rocket_get_constant( 'WP_ROCKET_EXCLUSIONS_API_URL', false )
? rocket_get_constant( 'WP_ROCKET_EXCLUSIONS_API_URL', false )
: self::API_URL;
if ( empty( $args['body'] ) ) {
$args['body'] = [];
}
$args['body']['credentials'] = [
'wpr_email' => $this->options->get( 'consumer_email', '' ),
'wpr_key' => $this->options->get( 'consumer_key', '' ),
];
$response = wp_remote_get(
$api_url . $request_path,
$args
);
return $this->check_response( $response );
}
/**
* Handle SaaS request error.
*
* @param array|WP_Error $response WP Remote request.
*
* @return bool
*/
private function check_response( $response ): bool {
$this->response_code = is_array( $response )
? wp_remote_retrieve_response_code( $response )
: $response->get_error_code();
if ( 200 !== $this->response_code && 206 !== $this->response_code ) {
$this->error_message = is_array( $response )
? wp_remote_retrieve_response_message( $response )
: $response->get_error_message();
return false;
}
$this->response_body = wp_remote_retrieve_body( $response );
return true;
}
}