PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-blaze / src / class-rest-controller.php
jetpack / jetpack_vendor / automattic / jetpack-blaze / src Last commit date
class-blaze.php 1 month ago class-dashboard-config-data.php 1 month ago class-dashboard-rest-controller.php 1 month ago class-dashboard.php 3 days ago class-rest-controller.php 1 month ago
class-rest-controller.php
186 lines
1 <?php
2 /**
3 * The Blaze Rest Controller class.
4 * Registers the REST routes for Blaze Dashboard.
5 *
6 * @package automattic/jetpack-blaze
7 */
8
9 namespace Automattic\Jetpack\Blaze;
10
11 use Automattic\Jetpack\Blaze;
12 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
13 use Automattic\Jetpack\Status\Host;
14 use WP_Error;
15 use WP_REST_Server;
16
17 /**
18 * Registers general REST routes for Blaze.
19 */
20 class REST_Controller {
21 /**
22 * Namespace for the REST API.
23 *
24 * @var string
25 */
26 public static $namespace = 'jetpack/v4/blaze';
27
28 /**
29 * Connection manager object.
30 *
31 * @var \Automattic\Jetpack\Connection\Manager
32 */
33 private $connection;
34
35 /**
36 * Creates the REST_Controller object.
37 *
38 * @param \Automattic\Jetpack\Connection\Manager $connection The connection manager object.
39 */
40 public function __construct( $connection = null ) {
41 $this->connection = $connection ?? new Connection_Manager();
42 }
43
44 /**
45 * Registers the REST routes on the `rest_api_init` hook.
46 *
47 * Instantiated here, rather than eagerly, so the controller class only loads
48 * on requests that reach `rest_api_init`. Static so the callback can be
49 * unregistered.
50 *
51 * @access public
52 */
53 public static function register() {
54 ( new self() )->register_rest_routes();
55 }
56
57 /**
58 * Registers the REST routes.
59 *
60 * @access public
61 */
62 public function register_rest_routes() {
63 $site_id = $this->get_site_id();
64
65 if ( ! is_wp_error( $site_id ) ) {
66 register_rest_route(
67 static::$namespace,
68 'eligibility',
69 array(
70 'methods' => WP_REST_Server::READABLE,
71 'callback' => array( $this, 'blaze_eligibility' ),
72 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
73 )
74 );
75
76 register_rest_route(
77 static::$namespace,
78 'dashboard',
79 array(
80 'methods' => WP_REST_Server::READABLE,
81 'callback' => array( $this, 'is_dashboard_enabled' ),
82 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
83 )
84 );
85 }
86
87 register_rest_route(
88 static::$namespace,
89 'active-campaigns',
90 array(
91 'methods' => WP_REST_Server::READABLE,
92 'callback' => array( $this, 'get_active_campaigns' ),
93 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
94 )
95 );
96 }
97
98 /**
99 * Only administrators can access the API.
100 *
101 * @return bool|WP_Error True if a blog token was used to sign the request, WP_Error otherwise.
102 */
103 public function can_user_view_blaze_settings() {
104 if (
105 $this->is_user_connected()
106 && current_user_can( 'manage_options' )
107 ) {
108 return true;
109 }
110
111 return $this->get_forbidden_error();
112 }
113
114 /**
115 * Get the eligibility for Blaze.
116 *
117 * @return bool
118 */
119 public function blaze_eligibility() {
120 $site_id = $this->get_site_id();
121 if ( is_wp_error( $site_id ) ) {
122 return false;
123 }
124
125 return (bool) Blaze::site_supports_blaze( $site_id );
126 }
127
128 /**
129 * Check if the dashboard is enabled.
130 *
131 * @return bool
132 */
133 public function is_dashboard_enabled() {
134 return (bool) Blaze::is_dashboard_enabled();
135 }
136
137 /**
138 * Get active Blaze campaign status for the site.
139 *
140 * @return array
141 */
142 public function get_active_campaigns() {
143 $site_id = $this->get_site_id();
144 if ( is_wp_error( $site_id ) ) {
145 return Blaze::get_active_campaigns_status( 0 );
146 }
147
148 return Blaze::get_active_campaigns_status( $site_id );
149 }
150
151 /**
152 * Check if the current user is connected.
153 * On WordPress.com Simple, it is always connected.
154 *
155 * @return true
156 */
157 private function is_user_connected() {
158 if ( ( new Host() )->is_wpcom_simple() ) {
159 return true;
160 }
161
162 return $this->connection->is_connected() && $this->connection->is_user_connected();
163 }
164
165 /**
166 * Return a WP_Error object with a forbidden error.
167 */
168 protected function get_forbidden_error() {
169 $error_msg = esc_html__(
170 'You are not allowed to perform this action.',
171 'jetpack-blaze'
172 );
173
174 return new WP_Error( 'rest_forbidden', $error_msg, array( 'status' => rest_authorization_required_code() ) );
175 }
176
177 /**
178 * Get the site ID.
179 *
180 * @return int|WP_Error
181 */
182 private function get_site_id() {
183 return Connection_Manager::get_site_id();
184 }
185 }
186