PluginProbe
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More / 2.0.0
Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More v2.0.0
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.0, at classes/RestAPI/License.php

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