LicenseActivate.php
3.06 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
<?php
namespace ACP\RequestHandler\Ajax;
use AC\Capabilities;
use AC\Nonce;
use AC\Request;
use ACP\Access\ActivationKeyStorage;
use ACP\Access\ActivationUpdater;
use ACP\Access\PermissionChecker;
use ACP\Access\Rule\ApiActivateResponse;
use ACP\API;
use ACP\RequestAjaxHandler;
use ACP\RequestDispatcher;
use ACP\Type\Activation\Key;
use ACP\Type\LicenseKey;
use ACP\Type\SiteUrl;
use ACP\Updates\PluginDataUpdater;
use InvalidArgumentException;
class LicenseActivate implements RequestAjaxHandler {
/**
* @var ActivationKeyStorage
*/
private $activation_key_storage;
/**
* @var RequestDispatcher
*/
private $api;
/**
* @var SiteUrl
*/
private $site_url;
/**
* @var PluginDataUpdater
*/
private $plugin_updater;
/**
* @var ActivationUpdater
*/
private $activation_updater;
/**
* @var PermissionChecker
*/
private $permission_checker;
public function __construct( ActivationKeyStorage $activation_key_storage, RequestDispatcher $api, SiteUrl $site_url, PluginDataUpdater $plugins_updater, ActivationUpdater $activation_updater, PermissionChecker $permission_checker ) {
$this->activation_key_storage = $activation_key_storage;
$this->api = $api;
$this->site_url = $site_url;
$this->plugins_updater = $plugins_updater;
$this->activation_updater = $activation_updater;
$this->permission_checker = $permission_checker;
}
public function handle(): void {
if ( ! current_user_can( Capabilities::MANAGE ) ) {
return;
}
$request = new Request();
if ( ! ( new Nonce\Ajax() )->verify( $request ) ) {
wp_send_json_error( __( 'Invalid request', 'codepress-admin-columns' ) );
}
$key = sanitize_text_field( $request->get( 'license' ) );
if ( ! $key ) {
$this->send_error_response( __( 'Empty license.', 'codepress-admin-columns' ) );
}
if ( ! LicenseKey::is_valid( $key ) ) {
$this->send_error_response( __( 'Invalid license.', 'codepress-admin-columns' ) );
}
$license_key = new LicenseKey( $key );
$response = $this->api->dispatch(
new API\Request\Activate( $license_key, $this->site_url )
);
$this->permission_checker
->add_rule( new ApiActivateResponse( $response ) )
->apply();
if ( $response->has_error() ) {
$this->send_error_response( $response->get_error()->get_error_message(), $response->get( 'data' )['permissions'] );
}
try {
$activation_key = new Key( $response->get( 'activation_key' ) );
} catch ( InvalidArgumentException $e ) {
$this->send_error_response( $response->get_error()->get_error_message() );
}
$this->activation_key_storage->save( $activation_key );
$this->activation_updater->update( $activation_key );
$this->plugins_updater->update( $activation_key );
wp_clean_plugins_cache();
wp_update_plugins();
wp_send_json_success( [
'permissions' => $response->get( 'permissions' ),
'status' => $response->get( 'status' ),
'message' => $response->get( 'message' ),
] );
}
private function send_error_response( $message, $permissions = [] ) {
wp_send_json_error( [
'message' => $message,
'permissions' => $permissions,
] );
}
}