PluginProbe
YayMail – WooCommerce Email Customizer / trunk
YayMail – WooCommerce Email Customizer vtrunk
4.4.4 4.4.3 4.4.2 4.4.1 trunk 1.9.6 2.1.4 2.1.5 3.2.2 3.2.6 3.2.7.1 3.2.8.1 3.2.9 3.3 3.3.1 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4 3.4.1 3.4.2 3.4.3 All 55 releases
yaymail / vendor-prefixed / src / License / RestAPI.php

RestAPI.php in YayMail – WooCommerce Email Customizer trunk, at vendor-prefixed/src/License/RestAPI.php

90 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace YayMailScoped\YayCommerce\AdminShell\License;
4
5 use YayMailScoped\YayCommerce\AdminShell\License\Contracts\LicenseConfigAdapter;
6 use YayMailScoped\YayCommerce\AdminShell\Support\Slug;
7 defined('ABSPATH') || exit;
8 /**
9 * Per-plugin REST routes for license management.
10 *
11 * REST namespace: {slug}/v1 (derived from adapter slug).
12 * Ported from YayMail Pro RestAPI.php — CorePlugin::get() replaced with adapter.
13 */
14 class RestAPI
15 {
16 protected LicenseConfigAdapter $adapter;
17 public function __construct(LicenseConfigAdapter $adapter)
18 {
19 $this->adapter = $adapter;
20 add_action('rest_api_init', [$this, 'init_rest_api']);
21 }
22 public function init_rest_api(): void
23 {
24 $namespace = Slug::to_var_name($this->adapter->get_plugin_slug()) . '/v1';
25 register_rest_route($namespace, '/license/activate', ['methods' => [\WP_REST_Server::CREATABLE], 'callback' => [$this, 'activate_license'], 'permission_callback' => [$this, 'permission_callback']]);
26 register_rest_route($namespace, '/license/update', ['methods' => [\WP_REST_Server::CREATABLE], 'callback' => [$this, 'update_license'], 'permission_callback' => [$this, 'permission_callback']]);
27 register_rest_route($namespace, '/license/delete', ['methods' => [\WP_REST_Server::CREATABLE], 'callback' => [$this, 'remove_license'], 'permission_callback' => [$this, 'permission_callback']]);
28 }
29 public function activate_license(\WP_REST_Request $request_data): \WP_REST_Response
30 {
31 $nonce = $request_data->get_header('x_wp_nonce');
32 if (!wp_verify_nonce($nonce, 'wp_rest')) {
33 return new \WP_REST_Response(['success' => \false, 'message' => 'Nonce is invalid'], 403);
34 }
35 $license_key = \sanitize_text_field($request_data->get_param('license_key'));
36 $license = new License($this->adapter);
37 $activate_response = $license->activate($license_key);
38 $return = ['success' => $activate_response['success'], 'name' => $this->adapter->get_plugin_name(), 'slug' => $this->adapter->get_plugin_slug()];
39 if ($activate_response['success']) {
40 $_plugin = ['slug' => $this->adapter->get_plugin_slug(), 'name' => $this->adapter->get_plugin_name()];
41 ob_start();
42 include __DIR__ . '/../../views/license-card.php';
43 $return['html'] = ob_get_clean();
44 } else {
45 $return['message'] = LicenseAPI::get_error_message($activate_response['message'] ?? '');
46 }
47 return new \WP_REST_Response($return);
48 }
49 public function update_license(\WP_REST_Request $request_data): \WP_REST_Response
50 {
51 $nonce = $request_data->get_header('x_wp_nonce');
52 if (!wp_verify_nonce($nonce, 'wp_rest')) {
53 return new \WP_REST_Response(['success' => \false, 'message' => 'Nonce is invalid'], 403);
54 }
55 $license = new License($this->adapter);
56 $update_response = $license->update();
57 $return = ['success' => $update_response['success'], 'name' => $this->adapter->get_plugin_name(), 'slug' => $this->adapter->get_plugin_slug()];
58 $_plugin = ['slug' => $this->adapter->get_plugin_slug(), 'name' => $this->adapter->get_plugin_name()];
59 if ($update_response['success'] || !empty($update_response['is_server_error'])) {
60 ob_start();
61 include __DIR__ . '/../../views/license-card.php';
62 $return['html'] = ob_get_clean();
63 } else {
64 ob_start();
65 include __DIR__ . '/../../views/license-activate-card.php';
66 $return['html'] = ob_get_clean();
67 }
68 return new \WP_REST_Response($return);
69 }
70 public function remove_license(\WP_REST_Request $request_data): \WP_REST_Response
71 {
72 $nonce = $request_data->get_header('x_wp_nonce');
73 if (!wp_verify_nonce($nonce, 'wp_rest')) {
74 return new \WP_REST_Response(['success' => \false, 'message' => 'Nonce is invalid'], 403);
75 }
76 $license = new License($this->adapter);
77 $license->remove();
78 $return = ['success' => \true, 'name' => $this->adapter->get_plugin_name(), 'slug' => $this->adapter->get_plugin_slug()];
79 $_plugin = $return;
80 ob_start();
81 include __DIR__ . '/../../views/license-activate-card.php';
82 $return['html'] = ob_get_clean();
83 return new \WP_REST_Response($return);
84 }
85 public function permission_callback(): bool
86 {
87 return current_user_can($this->adapter->get_capability());
88 }
89 }
90