PluginProbe
Boxzilla – WordPress Popup Builder / 3.4.6
Boxzilla – WordPress Popup Builder v3.4.6
3.4.11 3.4.10 3.4.9 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 trunk 3.0 3.0.1 3.0.2 3.0.3 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 All 72 releases
boxzilla / src / licensing / class-api.php

class-api.php in Boxzilla – WordPress Popup Builder 3.4.6, at src/licensing/class-api.php

184 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Boxzilla\Licensing;
4
5 use Boxzilla\Plugin;
6 use Exception;
7 use WP_Error;
8
9 class API
10 {
11 /**
12 * @var License
13 */
14 protected $license;
15
16 /**
17 * The API url
18 *
19 * @var string
20 */
21 public $url = '';
22
23 /**
24 * @var int
25 */
26 protected $error_code = 0;
27
28 /**
29 * @var string
30 */
31 protected $error_message = '';
32
33 /**
34 * @var
35 */
36 protected $last_response;
37
38 /**
39 * @param string $url
40 * @param License $license
41 */
42 public function __construct($url, License $license)
43 {
44 $this->url = $url;
45 $this->license = $license;
46 }
47
48 /**
49 * Gets license status
50 *
51 * @return object
52 */
53 public function get_license()
54 {
55 $endpoint = '/license';
56 $response = $this->request('GET', $endpoint);
57 return $response;
58 }
59
60
61 /**
62 * Logs the current site in to the remote API
63 *
64 * @return object
65 */
66 public function activate_license()
67 {
68 $endpoint = '/license/activations';
69 $args = [
70 'site_url' => get_option('siteurl'),
71 ];
72 $response = $this->request('POST', $endpoint, $args);
73 return $response;
74 }
75
76 /**
77 * Logs the current site out of the remote API
78 *
79 * @return object
80 */
81 public function deactivate_license()
82 {
83 $endpoint = sprintf('/license/activations/%s', $this->license->activation_key);
84 $response = $this->request('DELETE', $endpoint);
85 return $response;
86 }
87
88 /**
89 * @param Plugin $plugin
90 * @return object
91 */
92 public function get_plugin(Plugin $plugin)
93 {
94 $endpoint = sprintf('/plugins/%s?format=wp', $plugin->id());
95 $response = $this->request('GET', $endpoint);
96 return $response;
97 }
98
99 /**
100 * @param Plugin[] $plugins (optional)
101 * @return object
102 */
103 public function get_plugins($plugins = null)
104 {
105 $args = [
106 'format' => 'wp',
107 ];
108
109 $endpoint = add_query_arg($args, '/plugins');
110 $response = $this->request('GET', $endpoint);
111 return $response;
112 }
113
114 /**
115 * @param string $method
116 * @param string $endpoint
117 * @param array $data
118 *
119 * @return object|array
120 */
121 public function request($method, $endpoint, $data = [])
122 {
123 $url = $this->url . $endpoint;
124 $args = [
125 'method' => $method,
126 'headers' => [
127 'Content-Type' => 'application/json',
128 'Accepts' => 'application/json',
129 ],
130 'timeout' => 10,
131 ];
132
133 // add license key to headers if set
134 if (! empty($this->license->key)) {
135 $args['headers']['Authorization'] = 'Bearer ' . urlencode($this->license->key);
136 }
137
138 if (! empty($data)) {
139 if (in_array($method, [ 'GET', 'DELETE' ], true)) {
140 $url = add_query_arg($data, $url);
141 } else {
142 $args['body'] = json_encode($data);
143 }
144 }
145
146 $response = wp_remote_request($url, $args);
147 return $this->parse_response($response);
148 }
149
150 /**
151 * @param mixed $response
152 *
153 * @return object|null
154 *
155 * @throws API_Exception
156 */
157 public function parse_response($response)
158 {
159 // test for wp errors (request failures)
160 if ($response instanceof WP_Error) {
161 throw new API_Exception($response->get_error_message());
162 }
163
164 // retrieve response body
165 $body = wp_remote_retrieve_body($response);
166 if (empty($body)) {
167 return null;
168 }
169
170 $json = json_decode($body, false);
171 if (is_null($json)) {
172 throw new API_Exception(esc_html__('The Boxzilla server returned an invalid response.', 'boxzilla'));
173 }
174
175 // did request return an error response?
176 if (wp_remote_retrieve_response_code($response) >= 400) {
177 throw new API_Exception($json->message, $json->code);
178 }
179
180 // return actual response data
181 return $json;
182 }
183 }
184