PluginProbe
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More / 2.0.12
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More v2.0.12
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.10 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 47 releases
content-control / classes / RestAPI / License.php

License.php in Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More 2.0.12, at classes/RestAPI/License.php

328 lines 8.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * RestAPI Global Settings Endpoint.
4 *
5 * @copyright (c) 2021, Code Atlantic LLC.
6 * @package ContentControl
7 */
8
9 namespace ContentControl\RestAPI;
10
11 use WP_REST_Controller, WP_REST_Response, WP_REST_Server, WP_Error, WP_REST_Request;
12
13 use function ContentControl\plugin;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Rest API Licensing Controller Class.
19 */
20 class License extends WP_REST_Controller {
21
22 /**
23 * Endpoint namespace.
24 *
25 * @var string
26 */
27 protected $namespace = 'content-control/v2';
28
29 /**
30 * Route base.
31 *
32 * @var string
33 */
34 protected $base = 'license';
35
36 /**
37 * Register API endpoint routes.
38 *
39 * @return void
40 */
41 public function register_routes() {
42 register_rest_route(
43 $this->namespace,
44 '/' . $this->base,
45 [
46 [
47 'methods' => WP_REST_Server::READABLE,
48 'callback' => [ $this, 'get_license' ],
49 'permission_callback' => [ $this, 'manage_license_permissions' ],
50 ],
51 [
52 'methods' => WP_REST_Server::EDITABLE,
53 'callback' => [ $this, 'update_license_key' ],
54 'permission_callback' => [ $this, 'manage_license_permissions' ],
55 'args' => [
56 'licenseKey' => [
57 'required' => true,
58 'validate_callback' => function ( $param, $request, $key ) {
59 return is_string( $param );
60 },
61 ],
62 ],
63 ],
64 [
65 'methods' => WP_REST_Server::DELETABLE,
66 'callback' => [ $this, 'remove_license' ],
67 'permission_callback' => [ $this, 'manage_license_permissions' ],
68 ],
69 ]
70 );
71
72 register_rest_route(
73 $this->namespace,
74 '/' . $this->base . '/activate',
75 [
76 [
77 'methods' => WP_REST_Server::EDITABLE,
78 'callback' => [ $this, 'activate_license' ],
79 'permission_callback' => [ $this, 'manage_license_permissions' ],
80 'args' => [
81 'licenseKey' => [
82 'required' => false,
83 'validate_callback' => function ( $param, $request, $key ) {
84 return is_string( $param );
85 },
86 ],
87 ],
88 ],
89 ]
90 );
91
92 register_rest_route(
93 $this->namespace,
94 '/' . $this->base . '/deactivate',
95 [
96 [
97 'methods' => WP_REST_Server::EDITABLE,
98 'callback' => [ $this, 'deactivate_license' ],
99 'permission_callback' => [ $this, 'manage_license_permissions' ],
100 ],
101 ]
102 );
103
104 register_rest_route(
105 $this->namespace,
106 '/' . $this->base . '/status',
107 [
108 [
109 'methods' => WP_REST_Server::READABLE,
110 'callback' => [ $this, 'get_license_status' ],
111 'permission_callback' => [ $this, 'manage_license_permissions' ],
112 ],
113 [
114 'methods' => WP_REST_Server::EDITABLE,
115 'callback' => [ $this, 'refresh_license_status' ],
116 'permission_callback' => [ $this, 'manage_license_permissions' ],
117 ],
118 ]
119 );
120 }
121
122 /**
123 * Clean private or unnecessary data from license data before returning it.
124 *
125 * @param array{key:string,status:array<string,mixed>} $license_data License data.
126 * @return array{key:string,status:array<string,mixed>}
127 */
128 public function clean_license_data( $license_data ) {
129 $license_data['status'] = $this->clean_license_status( $license_data['status'] );
130
131 return $license_data;
132 }
133
134 /**
135 * Clean license status.
136 *
137 * @param array{key:string,status:array<string,mixed>} $license_status License status.
138 * @return array{key:string,status:array<string,mixed>}
139 */
140 public function clean_license_status( $license_status ) {
141 // Remove customer_email, customer_name, payment_id, ..., checksum keys from status array.
142 $license_status = array_diff_key(
143 $license_status,
144 array_flip(
145 [
146 'customer_email',
147 'customer_name',
148 'payment_id',
149 'checksum',
150 'item_id',
151 'item_name',
152 ]
153 )
154 );
155
156 return $license_status;
157 }
158
159 /**
160 * Get plugin license.
161 *
162 * @return \WP_Error|\WP_REST_Response
163 */
164 public function get_license() {
165 $license_data = plugin( 'license' )->get_license_data();
166
167 if ( $license_data ) {
168 return new WP_REST_Response( $this->clean_license_data( $license_data ), 200 );
169 } else {
170 return new WP_Error( '404', __( 'Something went wrong.', 'content-control' ), [ 'status' => 404 ] );
171 }
172 }
173
174 /**
175 * Update plugin license key.
176 *
177 * @param \WP_REST_Request<array<string,mixed>> $request Request object.
178 *
179 * @return \WP_Error|\WP_REST_Response
180 */
181 public function update_license_key( $request ) {
182 $license_key = sanitize_text_field( $request->get_param( 'licenseKey' ) );
183
184 try {
185 $old_key = plugin( 'license' )->get_license_key();
186
187 if ( $old_key === $license_key ) {
188 $license_status = plugin( 'license' )->get_license_status();
189 return new WP_REST_Response( $this->clean_license_status( $license_status ), 200 );
190 }
191
192 if ( plugin( 'license' )->is_license_active() ) {
193 plugin( 'license' )->deactivate_license();
194 }
195
196 plugin( 'license' )->update_license_key( $license_key );
197
198 $license_status = plugin( 'license' )->activate_license( $license_key );
199
200 $response = [
201 'status' => $this->clean_license_status( $license_status ),
202 ];
203
204 if ( ! plugin()->is_pro_installed() ) {
205 $response['connectInfo'] = plugin( 'connect' )->get_connect_info( $license_key );
206 }
207
208 return new WP_REST_Response( $response, 200 );
209 } catch ( \Exception $e ) {
210 $message = __( 'Something went wrong, the license key could not be saved.', 'content-control' );
211
212 if ( '' !== $e->getMessage() ) {
213 $message = $e->getMessage();
214 }
215
216 return new WP_Error( '404', $message, [ 'status' => 404 ] );
217 }
218 }
219
220 /**
221 * Remove plugin license key.
222 *
223 * @return \WP_Error|\WP_REST_Response
224 */
225 public function remove_license() {
226 plugin( 'license' )->remove_license();
227
228 if ( '' === plugin( 'license' )->get_license_key() ) {
229 return new WP_REST_Response( true, 200 );
230 } else {
231 return new WP_Error( '404', __( 'Something went wrong.', 'content-control' ), [ 'status' => 404 ] );
232 }
233 }
234
235 /**
236 * Activate plugin license.
237 *
238 * @param WP_REST_Request<array<string,mixed>> $request Request object.
239 *
240 * @return \WP_Error|\WP_REST_Response
241 */
242 public function activate_license( $request ) {
243 $license_key = sanitize_text_field( $request->get_param( 'licenseKey' ) );
244
245 try {
246 $license_status = plugin( 'license' )->activate_license( $license_key );
247
248 $response = [
249 'status' => $this->clean_license_status( $license_status ),
250 ];
251
252 if ( ! plugin()->is_pro_installed() ) {
253 $response['connectInfo'] = plugin( 'connect' )->get_connect_info( plugin( 'license' )->get_license_key() );
254 }
255
256 return new WP_REST_Response( $response, 200 );
257 } catch ( \Exception $e ) {
258 $message = __( 'Something went wrong, the license could not be activated.', 'content-control' );
259
260 if ( '' !== $e->getMessage() ) {
261 $message = $e->getMessage();
262 }
263
264 return new WP_Error( '404', $message, [ 'status' => 404 ] );
265 }
266 }
267
268 /**
269 * Deactivate plugin license.
270 *
271 * @return \WP_Error|\WP_REST_Response
272 */
273 public function deactivate_license() {
274 try {
275 $license_status = plugin( 'license' )->deactivate_license();
276
277 return new WP_REST_Response( [ 'status' => $this->clean_license_status( $license_status ) ], 200 );
278 } catch ( \Exception $e ) {
279 $message = __( 'Something went wrong, the license could not be deactivated.', 'content-control' );
280
281 if ( '' !== $e->getMessage() ) {
282 $message = $e->getMessage();
283 }
284
285 return new WP_Error( '404', $message, [ 'status' => 404 ] );
286 }
287 }
288
289 /**
290 * Get plugin license status.
291 *
292 * @return \WP_Error|\WP_REST_Response
293 */
294 public function get_status() {
295 $license_status = plugin( 'license' )->get_license_status();
296
297 if ( $license_status ) {
298 return new WP_REST_Response( [ 'status' => $this->clean_license_status( $license_status ) ], 200 );
299 } else {
300 return new WP_Error( '404', __( 'Something went wrong.', 'content-control' ), [ 'status' => 404 ] );
301 }
302 }
303
304 /**
305 * Refresh plugin license status.
306 *
307 * @return \WP_Error|\WP_REST_Response
308 */
309 public function refresh_license_status() {
310 $license_status = plugin( 'license' )->get_license_status( true );
311
312 if ( $license_status ) {
313 return new WP_REST_Response( [ 'status' => $this->clean_license_status( $license_status ) ], 200 );
314 } else {
315 return new WP_Error( '404', __( 'Something went wrong.', 'content-control' ), [ 'status' => 404 ] );
316 }
317 }
318
319 /**
320 * Check update settings permissions.
321 *
322 * @return bool
323 */
324 public function manage_license_permissions() {
325 return current_user_can( 'manage_options' ) || current_user_can( 'activate_plugins' );
326 }
327 }
328